From 6617f3353e52f9a659ccaf2ea98b8d63bf92c9bd Mon Sep 17 00:00:00 2001 From: stella62420 Date: Tue, 23 Sep 2025 22:53:14 +0900 Subject: [PATCH] Add sprint 11 files --- .dockerignore | 32 + .env.example | 9 + .github/workflows/deploy.yaml | 27 + .github/workflows/test.yaml | 40 + .gitignore | 14 + .prettierrc | 9 + Dockerfile | 24 + README.md | 40 + docker-compose.yaml | 30 + infra/ec2/ecosystem.config.js | 9 + infra/ec2/nginx.conf | 78 + infra/ec2/secure-group-inbound.png | Bin 0 -> 104078 bytes infra/ec2/secure-group-outbound.png | Bin 0 -> 91942 bytes infra/ec2/start.sh | 8 + infra/rds/secure-group-inbound.png | Bin 0 -> 91378 bytes infra/rds/secure-group-outbound.png | Bin 0 -> 90454 bytes infra/s3/policy.png | Bin 0 -> 65097 bytes jest.config.js | 12 + package-lock.json | 10765 ++++++++++++++++ package.json | 41 + .../migrations/20250111082621_/migration.sql | 43 + .../20250304075708_add_user/migration.sql | 15 + .../migration.sql | 31 + .../migration.sql | 33 + .../migrations/20250429043356_/migration.sql | 15 + .../migrations/20250429061529_/migration.sql | 12 + prisma/migrations/migration_lock.toml | 3 + prisma/schema.prisma | 108 + public/.gitkeep | 0 public/socket-client-test.html | 37 + src/app.ts | 38 + src/controllers/articlesController.ts | 79 + src/controllers/authController.ts | 50 + src/controllers/commentsController.ts | 18 + src/controllers/errorController.ts | 50 + src/controllers/imagesController.ts | 9 + src/controllers/notificationsController.ts | 10 + src/controllers/productsController.ts | 79 + src/controllers/usersController.ts | 75 + src/dto/userResponseDTO.ts | 8 + src/lib/constants.ts | 26 + src/lib/errors/BadRequestError.ts | 8 + src/lib/errors/ForbiddenError.ts | 8 + src/lib/errors/NotFoundError.ts | 8 + src/lib/errors/UnauthorizedError.ts | 8 + src/lib/prismaClient.ts | 3 + src/lib/s3Client.ts | 15 + src/lib/testUtils.ts | 11 + src/lib/token.ts | 28 + src/lib/withAsync.ts | 11 + src/main.ts | 6 + src/middlewares/authenticate.ts | 23 + src/repositories/articlesRepository.ts | 95 + src/repositories/commentsRepository.ts | 50 + src/repositories/favoritesRepository.ts | 29 + src/repositories/likesRepository.ts | 22 + src/repositories/notificationsRepository.ts | 60 + src/repositories/productsRepository.ts | 154 + src/repositories/usersRepository.ts | 37 + src/routers/articlesRouter.test.ts | 201 + src/routers/articlesRouter.ts | 28 + src/routers/authRouter.test.ts | 232 + src/routers/authRouter.ts | 12 + src/routers/commentsRouter.ts | 11 + src/routers/imagesRouter.ts | 9 + src/routers/notificationsRouter.ts | 10 + src/routers/productsRouter.test.ts | 243 + src/routers/productsRouter.ts | 28 + src/routers/usersRouter.ts | 22 + src/services/articlesService.test.ts | 158 + src/services/articlesService.ts | 59 + src/services/authService.ts | 102 + src/services/commentsService.ts | 122 + src/services/favoritesService.ts | 32 + src/services/imagesService.ts | 85 + src/services/likesService.ts | 32 + src/services/notificationsService.ts | 69 + src/services/productsService.test.ts | 183 + src/services/productsService.ts | 80 + src/services/socketService.ts | 39 + src/services/usersService.ts | 38 + src/structs/articlesStructs.ts | 12 + src/structs/authStructs.ts | 14 + src/structs/commentsStruct.ts | 12 + src/structs/commonStructs.ts | 22 + src/structs/productsStruct.ts | 14 + src/structs/usersStructs.ts | 21 + src/types/Article.ts | 13 + src/types/Comment.ts | 11 + src/types/Notification.ts | 29 + src/types/Product.ts | 15 + src/types/User.ts | 11 + src/types/express.d.ts | 9 + src/types/pagination.ts | 21 + start.sh | 8 + tsconfig.json | 122 + 96 files changed, 14582 insertions(+) create mode 100644 .dockerignore create mode 100644 .env.example create mode 100644 .github/workflows/deploy.yaml create mode 100644 .github/workflows/test.yaml create mode 100644 .gitignore create mode 100644 .prettierrc create mode 100644 Dockerfile create mode 100644 README.md create mode 100644 docker-compose.yaml create mode 100644 infra/ec2/ecosystem.config.js create mode 100644 infra/ec2/nginx.conf create mode 100644 infra/ec2/secure-group-inbound.png create mode 100644 infra/ec2/secure-group-outbound.png create mode 100644 infra/ec2/start.sh create mode 100644 infra/rds/secure-group-inbound.png create mode 100644 infra/rds/secure-group-outbound.png create mode 100644 infra/s3/policy.png create mode 100644 jest.config.js create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 prisma/migrations/20250111082621_/migration.sql create mode 100644 prisma/migrations/20250304075708_add_user/migration.sql create mode 100644 prisma/migrations/20250304082334_authorization/migration.sql create mode 100644 prisma/migrations/20250304094902_add_favorite_like/migration.sql create mode 100644 prisma/migrations/20250429043356_/migration.sql create mode 100644 prisma/migrations/20250429061529_/migration.sql create mode 100644 prisma/migrations/migration_lock.toml create mode 100644 prisma/schema.prisma create mode 100644 public/.gitkeep create mode 100644 public/socket-client-test.html create mode 100644 src/app.ts create mode 100644 src/controllers/articlesController.ts create mode 100644 src/controllers/authController.ts create mode 100644 src/controllers/commentsController.ts create mode 100644 src/controllers/errorController.ts create mode 100644 src/controllers/imagesController.ts create mode 100644 src/controllers/notificationsController.ts create mode 100644 src/controllers/productsController.ts create mode 100644 src/controllers/usersController.ts create mode 100644 src/dto/userResponseDTO.ts create mode 100644 src/lib/constants.ts create mode 100644 src/lib/errors/BadRequestError.ts create mode 100644 src/lib/errors/ForbiddenError.ts create mode 100644 src/lib/errors/NotFoundError.ts create mode 100644 src/lib/errors/UnauthorizedError.ts create mode 100644 src/lib/prismaClient.ts create mode 100644 src/lib/s3Client.ts create mode 100644 src/lib/testUtils.ts create mode 100644 src/lib/token.ts create mode 100644 src/lib/withAsync.ts create mode 100644 src/main.ts create mode 100644 src/middlewares/authenticate.ts create mode 100644 src/repositories/articlesRepository.ts create mode 100644 src/repositories/commentsRepository.ts create mode 100644 src/repositories/favoritesRepository.ts create mode 100644 src/repositories/likesRepository.ts create mode 100644 src/repositories/notificationsRepository.ts create mode 100644 src/repositories/productsRepository.ts create mode 100644 src/repositories/usersRepository.ts create mode 100644 src/routers/articlesRouter.test.ts create mode 100644 src/routers/articlesRouter.ts create mode 100644 src/routers/authRouter.test.ts create mode 100644 src/routers/authRouter.ts create mode 100644 src/routers/commentsRouter.ts create mode 100644 src/routers/imagesRouter.ts create mode 100644 src/routers/notificationsRouter.ts create mode 100644 src/routers/productsRouter.test.ts create mode 100644 src/routers/productsRouter.ts create mode 100644 src/routers/usersRouter.ts create mode 100644 src/services/articlesService.test.ts create mode 100644 src/services/articlesService.ts create mode 100644 src/services/authService.ts create mode 100644 src/services/commentsService.ts create mode 100644 src/services/favoritesService.ts create mode 100644 src/services/imagesService.ts create mode 100644 src/services/likesService.ts create mode 100644 src/services/notificationsService.ts create mode 100644 src/services/productsService.test.ts create mode 100644 src/services/productsService.ts create mode 100644 src/services/socketService.ts create mode 100644 src/services/usersService.ts create mode 100644 src/structs/articlesStructs.ts create mode 100644 src/structs/authStructs.ts create mode 100644 src/structs/commentsStruct.ts create mode 100644 src/structs/commonStructs.ts create mode 100644 src/structs/productsStruct.ts create mode 100644 src/structs/usersStructs.ts create mode 100644 src/types/Article.ts create mode 100644 src/types/Comment.ts create mode 100644 src/types/Notification.ts create mode 100644 src/types/Product.ts create mode 100644 src/types/User.ts create mode 100644 src/types/express.d.ts create mode 100644 src/types/pagination.ts create mode 100644 start.sh create mode 100644 tsconfig.json diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000..8382f972 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,32 @@ +# 환경 변수 파일 +.env +.env.* +!.env.example + +# 의존성 및 빌드 관련 +node_modules +npm-debug.log +yarn-debug.log +yarn-error.log + +# 빌드 결과물 +build +dist +coverage + +# 버전 관리 +.git +.gitignore + +# 로그 파일 +*.log + +# IDE 설정 +.idea +.vscode +*.swp +*.swo + +# OS 관련 +.DS_Store +Thumbs.db \ No newline at end of file diff --git a/.env.example b/.env.example new file mode 100644 index 00000000..fb5ccc86 --- /dev/null +++ b/.env.example @@ -0,0 +1,9 @@ +DATABASE_URL=postgresql://postgres:postgres@localhost:5432/panda-market +BASE_URL=http://localhost:3000 +PORT=3000 +JWT_ACCESS_TOKEN_SECRET=your-secret-key +JWT_REFRESH_TOKEN_SECRET=your-refresh-secret-key +AWS_REGION=ap-northeast-2 +AWS_ACCESS_KEY_ID= +AWS_SECRET_ACCESS_KEY= +AWS_S3_BUCKET_NAME=panda-market diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml new file mode 100644 index 00000000..5bb64b02 --- /dev/null +++ b/.github/workflows/deploy.yaml @@ -0,0 +1,27 @@ +name: Deploy + +on: + push: + branches: [ "main" ] + +jobs: + deploy: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Configure SSH + run: | + mkdir -p ~/.ssh/ + echo "${{ secrets.EC2_PEM_KEY }}" > ~/.ssh/deploy_key.pem + chmod 600 ~/.ssh/deploy_key.pem + + - name: Deploy to EC2 + run: | + ssh -i ~/.ssh/deploy_key.pem -o StrictHostKeyChecking=no ec2-user@${{ secrets.EC2_HOST }} ' + cd /home/ec2-user/panda-market && + git pull origin main && + chmod +x start.sh && + ./start.sh + ' \ No newline at end of file diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml new file mode 100644 index 00000000..1e7aa141 --- /dev/null +++ b/.github/workflows/test.yaml @@ -0,0 +1,40 @@ +name: Test + +on: + pull_request: + branches: [ "**" ] + +jobs: + test: + runs-on: ubuntu-latest + + services: + postgres: + image: postgres:latest + env: + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + POSTGRES_DB: test_db + ports: + - 5432:5432 + + steps: + - uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '20' + cache: 'npm' + + - name: Install dependencies + run: npm install && npx prisma generate + + - name: Run tests + env: + NODE_ENV: test + DATABASE_URL: postgresql://postgres:postgres@localhost:5432/test_db + PORT: 3000 + JWT_ACCESS_TOKEN_SECRET: test-secret-key + JWT_REFRESH_TOKEN_SECRET: test-refresh-secret-key + run: npm test \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..dfa248d3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,14 @@ +# Local files +.vscode/ +node_modules/ +.env* +!.env.example +build/ +coverage/ +bun.lock* + +# Uploaded files +public/* +!public/.gitkeep +!public/socket-client-test.html + diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 00000000..503a5da4 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,9 @@ +{ + "singleQuote": true, + "trailingComma": "all", + "semi": true, + "printWidth": 100, + "endOfLine": "auto", + "arrowParens": "always", + "tabWidth": 2 +} diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..ea6b2fa1 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,24 @@ +# Build stage +FROM node:21-alpine AS build +# bcrypt를 위한 빌드 도구 설치 +RUN apk add --no-cache python3 make g++ +WORKDIR /app +COPY package*.json ./ +RUN npm install +COPY . . +RUN npx prisma generate +RUN npm run build + +# Development stage +FROM node:21-alpine AS development +WORKDIR /app +# 실행에 필요한 파일만 복사 +COPY --from=build /app/{package*.json,node_modules,build,prisma} ./ +ENV NODE_ENV=development +ENV PORT=3000 +ENV BASE_URL=http://localhost:3000 +ENV PUBLIC_PATH=/app/public +ENV STATIC_PATH=/public +VOLUME /app/public +EXPOSE 3000 +CMD ["sh", "-c", "npx prisma migrate dev && npm start"] diff --git a/README.md b/README.md new file mode 100644 index 00000000..cd042fcf --- /dev/null +++ b/README.md @@ -0,0 +1,40 @@ +# Panda Market API + +## 환경 변수 설정 +`.env.example` 파일을 참고해서 `.env`와 `.env.test`에 필요한 환경 변수를 설정해 주세요. + +## 설치 + +의존성 패키지를 설치합니다. + +``` +npm install +``` + +Prisma와 데이터베이스를 준비합니다. +``` +npx prisma generate +npx prisma migrate dev +``` + +## 실행 + +`npm dev`로 개발 모드로 실행할 수 있습니다. + +## 스프린트 미션 11 관련 설명 + +### Github Actions + +- `test.yaml` + - Github actions에서 제공하는 Postgres를 사용해서 테스트를 진행합니다. +- `deploy.yaml` + - SSH로 접속해 AWS EC2에 배포합니다. + - 이때 EC2 접속에 쓰는 키페어를 환경 변수인 `EC2_PEM_KEY`에 설정하고 public IP를 환경 변수 `EC2_HOST`에 설정해야 합니다. + - 코드의 `/panda-market`은 EC2 안에 있는 git repo 경로입니다. + - `start.sh` 파일을 만들어서 pm2를 실행하도록 했습니다. 여기서 사용한 `#!/bin/bash`의 의미는 "Shebang"을 찾아보세요! + +### Docker + +- `Dockerfile`과 `docker-compose.yaml` 파일을 참고해 주세요. +- 이 프로젝트에서는 bcrypt 패키지를 사용하고 있어서, 빌드에 필요한 도구들을 설치하는 코드가 `Dockerfile`에 있습니다. +- `COPY --from=build /app/{package*.json,node_modules,build,prisma} ./`에서 사용한 `{ ... }` 문법은 "Brace Expansion" 문법을 찾아 보세요! \ No newline at end of file diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 00000000..ccf5e2b6 --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,30 @@ +services: + db: + image: postgres:latest + ports: + - "5432:5432" + environment: + - POSTGRES_USER=postgres + - POSTGRES_PASSWORD=postgres + - POSTGRES_DB=panda_market + volumes: + - postgres_data:/var/lib/postgresql/data + + app: + build: . + ports: + - "3000:3000" + volumes: + - ./public:/app/public + environment: + - NODE_ENV=development + - DATABASE_URL=postgresql://postgres:postgres@db:5432/panda_market + - PORT=3000 + - BASE_URL=http://localhost:3000 + - PUBLIC_PATH=/app/public + - STATIC_PATH=/public + depends_on: + - db + +volumes: + postgres_data: diff --git a/infra/ec2/ecosystem.config.js b/infra/ec2/ecosystem.config.js new file mode 100644 index 00000000..ca4943ff --- /dev/null +++ b/infra/ec2/ecosystem.config.js @@ -0,0 +1,9 @@ +module.exports = { + apps: [{ + script: 'npm', + args: 'start', + env: { + NODE_ENV: 'production' + } + }] +}; diff --git a/infra/ec2/nginx.conf b/infra/ec2/nginx.conf new file mode 100644 index 00000000..09d7db1a --- /dev/null +++ b/infra/ec2/nginx.conf @@ -0,0 +1,78 @@ +# For more information on configuration, see: +# * Official English Documentation: http://nginx.org/en/docs/ +# * Official Russian Documentation: http://nginx.org/ru/docs/ + +user nginx; +worker_processes auto; +error_log /var/log/nginx/error.log notice; +pid /run/nginx.pid; + +# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic. +include /usr/share/nginx/modules/*.conf; + +events { + worker_connections 1024; +} + +http { + log_format main '$remote_addr - $remote_user [$time_local] "$request" ' + '$status $body_bytes_sent "$http_referer" ' + '"$http_user_agent" "$http_x_forwarded_for"'; + + access_log /var/log/nginx/access.log main; + + sendfile on; + tcp_nopush on; + keepalive_timeout 65; + types_hash_max_size 4096; + + include /etc/nginx/mime.types; + default_type application/octet-stream; + + # Load modular configuration files from the /etc/nginx/conf.d directory. + # See http://nginx.org/en/docs/ngx_core_module.html#include + # for more information. + include /etc/nginx/conf.d/*.conf; + + server { + listen 80; + + location / { + proxy_pass http://localhost:3000; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection 'upgrade'; + proxy_set_header Host $host; + proxy_cache_bypass $http_upgrade; + } + } + + +# Settings for a TLS enabled server. +# +# server { +# listen 443 ssl; +# listen [::]:443 ssl; +# http2 on; +# server_name _; +# root /usr/share/nginx/html; +# +# ssl_certificate "/etc/pki/nginx/server.crt"; +# ssl_certificate_key "/etc/pki/nginx/private/server.key"; +# ssl_session_cache shared:SSL:1m; +# ssl_session_timeout 10m; +# ssl_ciphers PROFILE=SYSTEM; +# ssl_prefer_server_ciphers on; +# +# # Load configuration files for the default server block. +# include /etc/nginx/default.d/*.conf; +# +# error_page 404 /404.html; +# location = /404.html { +# } +# +# error_page 500 502 503 504 /50x.html; +# location = /50x.html { +# } +# } +} diff --git a/infra/ec2/secure-group-inbound.png b/infra/ec2/secure-group-inbound.png new file mode 100644 index 0000000000000000000000000000000000000000..5f9b4f2163558ffb22454f55ddee14eda55b79d8 GIT binary patch literal 104078 zcmbTe1yqzx`v*)Zph!wdw{$3-(w))`0wSHeGzb#X4N_7f-MutOcQ-679Sca;w>)n> z-|PG5JLluvdv>_*nR{lgnYr?JZHTg>)Qe}Yp25Mvy^xU>SA~Onk_ZQfposDmcBkK* z_Y@8eUf)toOj$-uj9l5#&fL=43=Zyfv`duIYkvoVZedf^Z#+fPW9U5L=924G;gSl) z^Ctpc9^Z$4 zeAF3xmNUjHNDSrO*uWUF+aBY&dr$3tXv&N^o>(6UfI4_%g29JyHadKz$(!JoKL)+w*Tgh91!{;Cib4D z6-I9jGc6f&1qC<;SQ!NlKFAUd308uKeO|#naBzq*fpEyMZ*15{{5!(Go<2$Zj`*)K zg5pEPcWPoXGO%woQ%5s1Tc?k9&W)qjd$3ncTfWzF)>4q?Gqtl}G5%m@V#Wfrv43a+ zCjjJw6>ZF%jmd#F*0xT3KtamCYVg6z54Tw<$^WY2Y$ZskrJzhMX6I-|&c(vU!bU0d zjGUZY!104QpQ^azKbyn;6Qum;>}=1+$_fAgSO9NW>>Mpv*?D<+S=l&PIXIYMHJF{; zY@LmP%(hNc|9Hv2-Xm`2Wa?;X?`&yjOaAa)V-q_UXF*EJhmQXJ_m6R!0WJU2ldaP~ zrv;lJ>%$XPb{00)f4>{nRN&z*pRy&;%vxLA(gsEzSRX>1yleu0)&Jwke|r2|ORfL3 zWPkgH{qIfx_UONxsymrEirLw~`g9ih&(i#}@!uc*v!MX%!_@yqiht1gue&fp3q2EH z{r92?JtK4UZ-;{ufs+w`_Z|qpmxk>5QiAB$GBqao@0ft4(6^SVInNos`}+C@zs`8A zkn=q2H3KF2cgkm!lugfG&%nVy!GhmzI$zTDjS{)oNM`F_g0R%f`5~oqxAY$j!T#>f zZEX*e0ZT{udi&e+qEztMKbO9wmp_=SBmv2-G6~_eBntLwW2utmz6f{MY^^ zY*X*Y`*deH5qzYhhZhOLyR&!7j~wo?{-Eh_U1o>LM<|a~ z0&bxy>v?Z2BOpCGuqB-Db$fzuNZ)f<@yA2 zY21v2j^xtbb#B6+bTyGs)Rq{;LEj)#{~nR7uUWIJui4E2Hckt@<2_!Es2$V7{J%*8 zhe~aNuw4kE-Y%@gyI(;FsY^iBtS(c#ULRY=fsB34cMwADg78p%fPZ8qL()XP>d{b_ z$q36Nm!_6{y4XgJ=8XUH(*5iKdY zzHDn$#wdAhQy&0I-p2-K*x z8^~p%3v+Vl^_4IgsP@)LOP_nJ2qbzIsg{20cx~ zM9x7+iHfFbuKJqJXBx<)1L~YRbETn}anlXDPHxeOXBev=CyHS;6p~pzWaYM9h!TD| z?B|c%&1exkjfE=E2{uTjDmmZD#baL2r?c8MDKTiIO>1xtw~7uqyU1}YZfkotmOGxJ zS|;M1e0?&^;kAJgl8|5cHT>Q-%v}*W+PHCh9D4KiaCOhmwJXr_ziACE!xniRrYGn< zM%s^$7arr(;&oP*W$(6_oUu<&nBgua?#4!T2`Zna;E1Vb;tZjga@(P2R*ipcpjYu> zh^f)_Fo9XOwl_c~c6~ix&7t{QR-^#sm*==+5IvAH{Sc&{;rj`Zo%Ga-k!B;!X5uV&01WdjoInuP<4$I*&k~BZ8=;BK!K(3n3|XE%9=Rto(YqCNn+B zjCrSbO^y&*lb@=eCn@svtO^sDbK5G1KcY)K!%t{QU>nta7nZ~ zTjKzQztPlR?1!>3yj=>dfe* z-DrkfR&etuB+`~_rux#*Dv0SxTsNhG5~C}bw}6OuitzFrMtSYKTZ>{F03&8gT9+Ac zOh_d=5OnOwNUv59*O7_22fGRNt%KyhAmw6G1UpVErWL6zHn_;SzV^HAiOzPU+6#;) zosU0X+NK&z;d0?2P9q1#GwN!*Ds@-%*aw4_bbPT}`KrA1br?pM4c&C-nGKgfpQqor z>`I3w8b+^mN6rJB(vY$+Q7|xS$Jh|4xejFteW@D|4)+rcJXOAN*%o!I&9It|L{Yp< z+!v`+{BLd>k}7h=z`EUgjcI!MyXYJzrw0B@VX)l}8fiDvnL@IpYNDsCE%AKxM^PtV zg#rXzPDZxIDwBflqL`|>g-jb=WMjh2r!4fD9Hzg*UWphbFnu;28|M1NWHFR_M9|j} zRot_D3s82eP*cytz+v=p^Nmqh1mC|F>304l_@jD zGUNpuENEQf&?+Ucwp`84DJHU{RUhp4!Dg+~&e7QbJ3r4v3*UR+I269gbj+1K-XJ0& z8QR`<`-w#+j2#MrhLtCCyn z>i5*0H`!@zK&5)&eQa{2d4E4^^~7}wrzNH7FK^cAQp4$asH{hk9xtvbPbt#Vr?OYh z+v;cwPJBzyEE+j#dAB1;3zTk^YDY7g72HJM3HS=HZgi6Qv#bVEK;SM*QM)+!X>u)Awv&89u-25KC9f-9a zi7b4q0T96QAsuF6+6$Z-=KD>uOQ&ts%gqej3X@q?My>)U18Xv2hj#S}MSnPh)uHRB zs7cNPLLu4Q=lJJi+Io_nHhPSEW4WOPEOe(0w;6P)(Je-P2vf$vKGxiwI$U7KvIbhs zSZJ z%oIb+FqK~klwqWhKU`>%yVE`@6`c3dm74#2^#u9p_V7-zF1HJsk>@YKp+joh%c3`h z%2aHgQ`~m5CX+cI~PA?tSIKM?ikBowXw`PAw5JrDUY;*>`olp=h zYhTqee;9)ZK^h9=v<1A}cqmgfAI}hn-|5$q#g|ZHvrOT`YIsl}Ymm3Do>8~=FYAHLVDOF&PHxKCq*pPfZ zR!CRnn6jl?wZM=QInrV1tjr)LI{F-t!B5$Xcp{Syz?ZpVV1{gbSp#P@1$UG$S$`;) zSLc`vpIBWW0eH8e@V2bT0UEOvkQwCM32p4W}oZ>u6Jbm$}lJ` zmxa7?WU@DjD-1Mn!fx3-YG}MENUay2z92akuZ2JSV44&#q#dSL?;cOXLRADW9_+F^ zEw{+0w0o5Uz}flkkvKG#Z^d1kNlq@VnDSQTD?X#SVre3Q(2|&&qMa%@V-XV>pWVUG zW^t~K3f&FU>OviN&UCr?_Drm*hX>dS*Z&5eJ$oMDt|nSy;L@`RQjtJy3eH3u?XiUd z4`v%{IXf3gPY6CkBS`r7XCce+h2oUeX8MT>pTL~K{X>D*!k#nA`wrobOPZPZ-iBqZ zyeTFX5}zi#IV4Ag`uuFMb(&||O;BkuZ^PW2d?>PR*}T4`-wY8)(uf8U_a4_`=&L;4>78#{a@-Pc^LAcBBY3Oz zppWj&w-~nUbtk)c@L&XwUZ0V%HU7qCFBaaukH$^!XvT@nY%^V~f76yumpPp$Pf%)_ zmx4OCw<%_UFc+!x)aMfo;N!GL*E1hgyX>_eD&yu;&Fiw__XjB|Q(Tf9p2EhTmuyEt z^_(h@8Hcs?y?UpycV95e0R|LQpbJA_emoC=(#Fz20_HsT#u-uK~ENdhk4ruVHsO@^2pVC<+$gfyTijpmCXFFvIZ zh{Q@9&E#|*5m|&cDn&7AYIHB1Iq9rg%GCuFX1{Q=(kR6mr&v(>Z}o;cN*Xn1Kuu?Q z@5&(8smq@NkDclJ#}|+`Jw03EMf3Qb*a5>a^-nC*=S6rZgSGLBcvyJb>+bw|%yv@2 zkvFV?`!Vs3KDQw< zS08V1J}sZp)(T`pTJ1kjw>DzB0c<$GVK$Zy%G=MB;xeW! zta=|cPO-Ddge-;-=v*m_WPZpKk{t8ftu$+tY7EK-w%Q4tM<>0JLQm#!`0QV1jUTgG zJzqOKKXr6&3K@-|DL!W!vb!$=H{FO+YO!3XaUkLs^*K#Dz1HWV1;l2xM(Q>A?YrGg1Ol2%DvaM$eH`Q<+M`rFVuw(W9# z_Y+=cA*pAR6x^=AKW-NVID#Vg0~JN9@}W!suFlZNLVeY=^tXRFEBuiC;RFJWjp>M` zggiW4yx|F{t#+|u3hd2zIdk)#RhAn%f_N3iG`&?OFl_V}m~nkBN9dILw#lw!dwyMl z*AnF`s!6Dl(+{X;4algn1d_$L?pQ1~y|a!%hc>uHH|aoXkC<+T5zDSJj=faZ#s&Ee z4$g1l!6ESnoedH-@cvJGK^Z=yY$uSxY*B@En4w;V0hX-%p-^7%g4E^E>mrjJN%HbI zQicdJxGVdU^DNcH}TMAXo)Kq+GU`{Qj6@{fa$%H@K@R$KiW2`xk~%;#Dcav$VpA4Ti63?T0b~+ zN03ZY+BbvTAgQrY*OEbJvSD@~&__vUlU~~9f1M7E!X2G`%1P~grX*}REPU} z^qG&cX1GZ@i4tPwkJ7*S*rR+2nO-jHhwHB?tuC)o$`E4CZXqgc z+E&Yz&F!DB^~tDSp6p{}_)&A)e9HqU5v!?ncg7C}mgV-}B@Dlpf|rC7u_w->ZR->Q z8Df4yFvvddsIsUz-kHvr^zw-BhSI3FfRF3HqFRds!i==e&X?p7MWA~#onbx+!Cw7*MlwTYX4p7wpc(6nH?JAQE)+h1Z2q9Q?xEt*XX0*)s@)@;P&{ zl@k$wpI|^&4ZUzBd=s!Y0|7(3u~@Ucl<;$;vj-5>+M|!qEgXn;2)&Vo^UoAmb9kPKQT}s3 zu#5~P4?!#`d79rj&OZoUTbs?z%=xKt$q5ljF;j5;?d~Ceq2yL$bv)EkSC}m_+@&_@2VtV|7LX^nlYh? z`aWIyNIdX-e`)NeF(R`&%f%W73C7d}i^Wi5I|glUdyY>!0d2*Jicg94+J*v$)lejY z-!HWAz}n)*O*Hk=GY9e$T(?kpP;F4z#O#0qV>>%{z7pr)0V-E zLvp4R=S`YGvyNSiZc|EjoKk#~JN~}@vyoM*Ijgx#9?f|a{BjwEm|%ijHmc5dC_8xs zKBrywf`r+;T!0cicU+TL!LaV$*a*^b?n!Ty66s3<=KsjPJkF z3zzigr5D*8iD-|T4+YosTr{+dri<@8cN2E6l6q%?RmHRGG@+-fGCmf*7G&S7%yaX|kS8?X zJ|Ir7`r^Z^|6{F3?ESCcCjmu%zIx3IrVYR)2ciCa;m`M zdfM9A(X~)l^0gsok2L=UXj*wt#h_e#Tun% z6l208zi@8rhiVj-4TMMB8)70KB+*oSFbrU+;uQF;0$tqrP39=-7ZPknjv`eDd&U6XD&3H z;ilQ*lysi4^krvC@)rgZO&(`uhpt++-J7m6nOx+l+&}M&oGPlDY&))aLi+1qiXgXj zeT7-kFyFJt(u+k63DbJ)`Rnz;Z2`;YtH~hCemr&@mjo7dS*2FXB>?7yKcc^L-czlt zL655SMPNVF^X%6Mtudwa8ijy2m^zuu)I5$7eC?D(CFL6A#1r(=amI39dh0xY|Ggf~ zAF(uPaikSvG>2JX-OPuX!r!b7nx zjlp3Q3n;hId8Zgb!taCF% zo5TXxLa7&7Nz=IrovYqO&nvHOMCY&jU-7%IB3qf^F&u`xxI$Smdh^wkit?fub}>|9 zyNyg#9*u`IW_LZK9Yche8fz8Do;5@PJ7LxHv#}=Cw(X{!7CdNWpZ(JE@E9Ekzfk>P z54`XZ_WnFkWT3B96|g!}b~P*nJGI%}5j!?F{`iyv7HJ(yT7=e&rPYVuL11gt8uc}b z29IF_MiwT4JoewOM3dRCKWJbopA{@Mu8XCaf= z#uQ;B!rr1vzmbKw=6+|+&yfwzDK_TyY zI7?+SS8s=gK`O9rPin`tf@Kq6=KQtl<7vg&FA2h-_S{0p+xPO>0bF*6YSuezGP=Qz zSgMfXgT+(&m3r$r(FH2!w?=P2vpbt4of8YBuU_tjP}rVu8-|zhJ!5~z2sTMc>iH2C za7BEuuz%q_6wjC^b<~P;?DeT6S?*8ssZ(lYE~14-Y;c-dA>ZBcpmz8`?#WTg<&*?n zosMs8yRO$2|g0XGQX9Jn!hl>O_7bb(%jFN6QEV z(6+<{by@q8V({YB?(F7diULaT zMMS+^^oiBycYB@dfS*2kXwxAf$6@<(IP@#v1}uKUcJ96Uz!%j~`+I_6UUg4VPB7o4 zet8A-7uIj&s<6BUyVU&CxvJBHIc!tTw?v5avp4@CB1p|*h0wm29n>{3MMEl zV%5%fP6o2w>iJ(CkAr@iH1!_ZhMd3CGhvWgXt$=v6U2p5mf3CmI(tGl$~hk9vj)nD6W~taMEiBALs2 zj?aQ3ng<#ICF80sjzq`OB12 z^x6y1#Z_{srfJ3z{)aS&McwLZcF9ortCe8Bcbjg)Zb;bI6VLuI@-`0+#**w)p>mPrhr7P?)JZAe15nP>1Tj>FcDurx+T z2rchb`>~_GSvQRNolY@1i!R41&xFv!L}}tD#hV}UQ|-Lsp%%N7l>$r@jx(l_5qAgt zoB=mZ`b_P3Hy0i9mtJiMygznGiC-4cpLw$jYu#0Fk-fDm zgP$;I}qo;#~#aGF*0x42|)10U>vo$knotK6IS@Rd;g7Ux}-!w9SltsX`~n zi4xu2w=UXcYFT-y)ATj2L>y3@ORHH9<{ms&jrX4xlV9SvL6f>t~?6`TR0A=!Y~u zufXQSndMSDLpOPayBgbDKHR*^nC3hlWP=Q}yZ0H>28y1=8GK%S49^bhhl4yBcDZd| zc0!w+=~Z7!1~PmSm9666YHfcVLK{w`-94+hSKc;i>>u(1pG7BUtz*9FXurGDY%%5f zW#S3YohiU1xSuV!r>uG>{grO5x4(dPV*+k0(RS$lP5)km>#URu+N)vUhfb7mTm1%c z-lu7FLGhbSizeekbCKM;7hyN$!1Bq`ZOTclPDu>~p(Dws)BmM`s3QBCv zZK0Djs=R|?AMoodRy9%Bj?mX8stj1xUS|-@3oQ-D8$Dqlc@k!1v=Q#c%+eu8fDnkq zu9vo_OH=TQi04D_hrU!9^0;=lZg-gvgPol3lG6a3-D&T_bArQ_+RS)W!H<)e$b z7E<*Iu_4`BoAKE5rn{ZO1}$Kw@N!+bH*W^=Aqmbeg!UVJs^%Dg`}vr`KBnwZb6E>F zIrE@7~T0Z4W5Bt=yM>$0e zsfI$emU*4lCtz`QV;l=&5(44DhWX5uy+ykn5O~?Ai&W@Irh`0?7!--6N-JdA;^CAb zPlDqZGD48X=US%dH!O%`W(xfrSZ9rPR5dEI8DjQgXeVkvFL(ipG0R<*V|9?2cW0bUugw~)`>YQ-*n!Cd^acS-%j>gyUnuu zk{Wr=ap>Y_gjfoJp=^)_K3qzx$Oy-4Cjs^xu69P6kWQKxY4C``Bw765l+i_9l6dxm1;djL zhSG?jIo;x4O3>JSyCcXBTc4Xy@qPIA*5{pfD*yDPv4gDK*7dpqr1hli+wTzqaPGWm zRcUpXz9gyV5KcSxu~TpjUYh1}yt`Fsn%^OU(mXVv&OG5ypF|W8HTAN*rDq>S<{bFE z_s05$SDbc<@vOw$2!YEeN81fh_khv!neR7sc14>VPUJ3yfmy!#IQq~$BZ+O29k9o9 z%VzY5`=(s_DZY>IIg(XyTRA82eaCa|*KEo)jFAGt1qW#9-=Lly)Yd`hWHEvs=a$C( z`rew`P};#*{#tU4JqntwB-AQB2&W}Vc(kU%9^hny8CMmYlMWo*dm{&oF#&h{-X6EY zScG|pc!SMo4V~pWNrp;6l@y&K!OnPFd)-eN40v&ofs>+e65fqGHp5m^YK0ydy88TJ z6vIYWeUF7X38vUXZ|1eNJ9kxp9ZyFk={aYiyO~D%jm2&FA?gZw)=-+D+(6m&a0_v!;AcVR#LNGINBcKItrZ7B z$H?2PE;zC@AVY|J6F;JEGxo+!b=V^sIrg057l){EtLf!>j%_)1g32@!eqxXhmwaC$ zW1b)i;BdB(wvzvcAP-RiPlM(7k4X?F2ZAw&z|mb3zONhlADZyLXX=L>`Y)g#i9ey{ z(`eog#$Scz7XMcXx>G2=Xb?=at&=s>tI0RJaw6Ncv$@x+uigwV(sHdS9B;|E8AWAq4( z^Uiu<0?%F0Eu-+cg1y5fEDDqBHolqbTCDR~tLYaevJ0e7onyUn_yK@M`#%)?e@_b@ zTiPB0UZOx&WOOHnL&;KxG)d`3)ndf>4fajv`7sj1URQA;KF!SlJgQ)oO3D6(Zpr=? z-O{J16>vp9J?-26IQHysaBR{;hCIWlNoWKt|Bd1J_o~4P7#k3d!7 zQ0pjGc4^ak{~MV1U(xTC1Q=Ge_G6v@9}4T=J8dO_!E6tD*wP-a^#I1T9koaPL%RHZ zpuYSFFB2D|jrkt0rTb7TYxR-c^gw?A(rcDRst)J>d(S=8s(q*>(LwS!Ee=qW^<1R_ zw;!)%3xn;th6eIKcDQ_z7O-Hj-3YYt$5s+n3maAo@5Q5g7q*a8A`Y`8gg^d2mYW7v zi}}^TBN$-VBYP=da0NeyJl)?m@1HH~<;aug1sxVvcXt`{5mn_1-se+)@p&ebAdq}< zdDUxkx|x0V@o_StimhmLGS?G&tJwxDM(s|Q_D@=A(oj;ufPr|2;EI-(mJiYyFodZB zT_THq45MaAPd(JB0bFah95LNj$@b`a`u#-m^z=kRZym83N6Lv_`EFG238{eLLRH$^ z+p|b9LtkcmC%#-$I2w%M4aJKeP8Fo0&=d-O)-K<)}z@GuozsUlb05~v< z*gsl0AiR2XNUa?TtxjZ{{Hd^0i2bB|Wre&qS}+KPcLa|c4=_slxP>ucG(BstS>MahPQZx*Ut(%875F-&5?1l0v#xuklw0Pe(EWp6ir9nYK z{A9mu9y+uPO13Svx>wi`HKTi7T$nTS>08I@W* z0MuqX=Qnl>802TsuwYy}mrWFCk1radZ~OWAak&2GMz>t}Q#k$Sj$e*A`DjSL_Io`u z)8KN?iykbQM6P1R%+{Ctg$kgo%m+jOmOB$4!Hfq=~$4Fk+tP3%m*1x zcP2vAfuSqk$&)#ZLFx%7vO~nYsj*p$im|leo_tUoKkidl{Qmcx~W zxP^qrQ>yYUs>tBHrT)9SyW@|&F&f$q+VqAcsh|^AJ9@3}zUi%YTNWAp2{!XNB6l~c zFxM_2hy8Z}wY-wwTZ_83OCZ8TwIi*^_KY+(5_WuDDhvyne=Dx=TyL^3K6hE_HdmrB z(Pi#xvXEN4VyjTVYeSw!`rbMoYg|^|#2ywbgIu#O@0hfAbW{f&e{g2oq6>m`d`9VP?{gG%;K5WdL~FE=^fE*t(( zc&x?cdiC3Kdm^_`K&3LU=*})&Cc*&~tI0l7lzqeW>7#@wLc)f{hJG5o+n&hu-+1dj z0N}ep>V#|(aVNksb^1zM?n#-&I)x9W&lf+Qh}SyJ9z(|JbpeUmm`|xFDck2ZVGJuW zzX387FZYo2La+KGig?zkXSUM9toZno_xY_i-{A(cZjou(L&8e(Q3nRPz)r;<>rm02#I%%z}HZB36T ze86gKY&@Fv8UM(~O3wphb0|$0^DE{0j{0n~S7X1U>*3NG2T6#lalK2S#&OG3sq}_? zvfhT&5-y`=0hADN9p;}$ce7n=$dz#N02k{yLdUtybIYlSYH#>S=yl-Wb z14{tf0ugc9#6a$gqSW$~WPni^ zqQ25XCW3f2*W}Bywy(Fr3*3qtFf1E^2+=+& z3vbC`D`lp4fl+DE*yJ5hDUG&~ZNl6^NoiYOtk}7aQtx$Lb8&HjV)CYgoCRRLsl&td zLrTKEDJ1-|ZkjBwLCqVH-82-{$?W{5cyHlu#{@X-qM_$s5yik zM$(-ml`r>KTTMeIH4PFta^-dtPtrPayyOyZnaMDSKX&N~d9DYqNIa&>_#uB0iNQ`Z zv|DZiH#h#tDYWC}15sn2u-g~v9c5rU zl-jHy&hcQujo0I#s7SxofW-i`<={3T{g^%}6YZ;{9C1_Iln-pXd17{W*R(|34*Ivc z`9BLXzP{X7cI#nIGAmhH5|6PAa=%V7U$7&%9={0nF&&GV5N7_y4iuY6JbHePFu&KO z0uP=%t|H3>!gWEYoeH&79vhmp0L)6JOZRB|_NcNHLm}e8+q=M^5%;Kqi~(~6glrm= z(f&_@{qttj2bjsN$Wi+h_fM3=-;U=0ACj%G_7zO=aV4^>v=GmcSX%1W>s!UGA) zP|60YmF>Sg%m7>PVWf9><)0rN>BYlHJnBe)^HAq$DOL|J6goW_^u^cFk zwc*76FLR<3-|v0Cs*IoK<@&;x6Gw2TOyNx6>8{+qj#5vjOsv`MuW*fqM%-ARg$vXQ z7+eJ~oAm$Ac|(;X9}VtTkGG#c9aKEN{``ak22=@pZaYzyS>;_HKX7*>l?)4qRhJqp z@~PIF(A2x{7u;Mok?RR~M*e0UhX7e@5v#@Oso(A8XY+YG{{eOcm)`2||T6 zYKngEO--tEG1^?97$&~~lvMA7#$XuseC0cKUcem)=I1x4Ih@I?Tpx^;>Pui@zUz(E z1v^5z$r9g@oda0fjXf@cOS1$s#LWMaeZJ2T^!Z$3KB*V>d{+t*$KqJ>IoGGx{ZR!v zS-P%pnr88GcAQkKhG`4m)%Kv#RL9phPaL5m6itUAuO?~C`r;^sgeYx0AyRS)f2q|! zdlz#qpX18{fpv-^^M=)qkVby}qE!znCZ>TdQrZVIPXtUo^79?yzE+vXFsWOy7jj`t zB;zKE08WWv%e&fMFZZV049j9PfW||fSJ86WJNY|K8d;e0D6sP{m0Vf`0cNbk1_z_u z%C?S|eSBEq2h}RPE|m_z())^-=}SEMo^`zwB!;QaiAU)`V5-Dn*_-jpv&FQLomuzO z4<*M2*L$I>8tGda-?%I(2h;7a_3@Y;BU5-(HfL+R8euGN$?VQVf-KtC7w$-9>DR%Y z0@f_}U%v$~A8jaCo+S~#Ynm zNQU#kh+2sdVEe6TeyO#!^>q-gh7Hr)((i35DV2xZw2grz7HFNnx=NZ6^Eb}e$fsyg zGzI>{IJ=YCLD-3hHIR~sa=;$5L4~;L59QC*&lz=V!Y&vnh*&kx+*34j%|h`U_jlCu zmw76h3@eP9#dO25$dS=W}>!l(xW5O|$7M$EFpzo-`}8yrIh8S5R_ zC+0T{^QFk*Q+XYwVTuPHn`*%szRi+a^(UDYz;cK~Tnc^AUr|pW0qR2<rVvZA{aaml9p%)m+^g+o0EBpLX&(f zUv?2g~7b`DWdG&K{)K(y`L+uhRVAQ8-G9XMhasDKXS`#b^2GrZU2tK3wAo5}_- zy&^u(Y4&5ND}GiMOsU^u<@7vyYkdp?eeWdjoCQr5r&MX2x|(6mvrj}zKFGB5&mu4r zwF*D&Ru2fRArjakXUfpbW_^l5LQ5ccEFS)9Osv{0{cHb2u==yQR2JjzwX2=Jx7N&J zO|8k7uk1BV2cq^L2BO}@FqX!^%>#mAZaN{Ct#BeoH8&{>=?nu8)FD`qzX29MJ@aT& z_e%b&*K!(VnQEId`D6~6%+F79O&eWR$$h+QyP8IG3-@LlH3QK}spBUqD-D|IrP=KOic}d4jPbF% z9A;Q;PoL}42weA z5DB=m<+oL@(ybS&v|&c9Vd=Eb2I2m!UlhSFch^H&;ADv|YhToMES=IbgOZ|Nrxz~A z;Uh#Ut{qNDhN>lKVy1e8paNr9?kG0OD;Oko0_>PBP_J(WkQQUz&7$$)%SjF&oY(UZ zOu7Bb$KjiYNLMA@Cq@T#Rw-)K03Zob9cIeCX^=a_+w42Pd^@O42-vHFSVcX zk%IzJ%Z-(~-7{+4cXE^`u{Nzgma=Dc%wl?F!weJ^QFoqAr=@f@%NX>^ID?RWHM%g( zrP*!B_&da0+uNr@+V!yciXa@xt~3Fzq@%tnVdNoIrBTIOkjzcipLpYi6`ibK+TZ*6 zy9elJ7&Mve`G)?>w<;})WIptb*+!>U18d$hr`IW*$>FkhuKKsSUW2Fh+5WPf{-{~? zt=_n~yT{U=b^~JB?8&f|gIln>VnFPZ)K{?h=%#(Dx^EDpC;BPo%SsqSgsChglOxw! zx9az|d21eXg}zDO&oJ>|Y55ukO_WcbtxpSn$$uZFw1x_}nQ_=1iOo~oPU<}n_*xvM z$jE2@Q?^5yz;v}Q7F{rzegc}vU<>v!S2l1Ae!g!FGl<4zh~fy)#h6rrf1%_WgSLL7 z3q-its+1&M?$)?pRQ8&n4Xv8Q}xSu52fy+o(r@KRne#aL7Q@nvn^+BQ?cnH^0?* z9ru39IS`h|J8kyS`@u}&PjM<@75puu>?P{pqX%6BDuUD6vx->ohQ;U3^LWNI`h@`%`~snv#HGgq68KRpf*DYQPlfIO}p&F zKj)WU`MvDpk;(Q%xxdlR-mJ@(=b*GvA~zT~Gl*hPEl*+EA&KPKi4oOl8pQ-m?HH>! zv^PP$Q9~~tgcUSFWPW;1`sBwjKXHN>YOiYw44VDcF9-#3L~IxOWR!QW3)(mzKA&W5;zzF%DSh%IAjE>mF#>$_-!C7nl$)$E`D%W4U8faI{95 zCuo-FP3@vEkM4CP9NQimAW*EhcG}GTbjK7X;gUa$+!gLz3D{q1l48v$xy_Md#cmqk zCIh9VbwR{}Ff7@h`rR92madY7TUB~oCucR2-hKHnjJLgSJ+{C+Uzk4O{vyMvHs!BS z6ehEu)8^1_4T^&>dwE<&M#hkxorm25%D82)+H~f4N`n&yPO*VH4rI`D=y^x&uVt4+zB&pkIb#B{qx7v+ZMdcT-Qfw6Pr2RPwpQn}whsEG4Vw#&2LE*n_ z`xRqa=X$=JFV!HGwZ71&uhxoK%e%Oy~Fcfv4xO2eE zdr$r}{vbd6f{2U9Vsie$xW7E!z`f@e>(n<_4Ov~~K26MOy!|U0=9h#5Dm4djX*_tu z_^*f-OTHrx$G`JjEHxQ7Hn<J91KwaME#rNFeb0+1^j7$>IAdJW3{ijmGK_n+&nf%1YY|UdLZ?8gfYl0-HeBLST6h*YG9Wc-y)3 zDrLo03#ZP9z!AOG^6sjjHv#_-dvDzq$G2^b210^|210Q6;1b+|69@!%5ANQ0u*N+B z5?m789U9kQ4Fq?0cjp#4XP^B$@4fH-1owIBk2a{PRcp;PWsEUDM@$5eS9O2qFk8=t zd%jXF=vsnZ`{a9((POttFBi|&?k=vpD^yP$=*xt^0335gX4IC)7Q)-62{>nEhgmiOe@S&1AQRs-BhTR}BGY9wEC}OPFcvQ6V^=V}o z<*|`&6@{lpTc}3ln}E;lTW&x>kCyIU;A$gijVXo;OXJUl{JH9DeYpP#J~oP@H;*7nc)P&xZCH;jLaSJ%$_xSp9FN$u*GVXucThlI}d%S8w42l@lIy2?V8Ih zta6ruShDjS0jBXnH5{bH9)*-oE2r-Dm>y!aP2W_|lp-9jZ<6hdn3xk86-8N%dC*80 zOGI&aC%?`9wI;am!O=vqKYdwn^%tdMr}WhFzc9oGjlS7G50Z?0tHL`(NZppzipqaB;<4f5fzXnD;W^#~y6jmd<85nAa&K z{+x^N2Govy8eL^O{z0KLj2Ox7yIQ1w$J&<#f^@Ma>h8Oz3I9zb3zXR7eOvsRPNUT? zHZ-8h`nOT=S!JKt>h&8YqR|xYW`gs`rS+laYspIUei`7KQw=_GcLp;+`taPz`&L>rtBQj9kZQ+fO-XI?i z3B_6WeDKy*f&XvWJ;+qosVS_2R&%#s{f?od`Ko<}i(!>UZY<5gl)vGp6A_IUvdwhE z_%aAQX6V?KWSvg%Au5p@qG?%a<`&VCLh;iICT!Pd^0#6*Rb^3$fRJ;7)VWbSOLT&x z8oyO<G<0hiJ6#8a>3?0+1QefXEJyd+HhOud+Bo9g0^K+i}EW-X-->1SC9jqD4{gII+d z-<;L?4t(aHKh`j^4?!h=ijR56{tFBMwnw5uac~FVl;sp*zfXtrlCPYHg7S2k(MdWN z2n1x$0=x@Ul*+xX>4J?(J(ySfZ5PlcHv@8=-{CloP1`rye+&L^FaJo56eh?xz{~oh zUCv{(WWQ;D18$x-FqWR9!33=FSvyH=a3(UbGLs4FewyG^u|RTjjq9H{Uoc)^v$*yb z?J>sR+XiA8TCN8s1HHJLuFIdaGG!TK$SQx4kNo=$@%5fr&!rZ>4?` zVZr^-dy-#e2k~Bbf~6M!U{B;KlV(tVIFohB0HQb~6-DCWj+ZW`Yh*})9Mk&zLn|$v zl+R=v+q{nbe<$#4FW7mx5SCISmKQ?)1d<~ER~Q-kY<49H*i@g=aGflESJrMHuWGj} zk?eTXU)q^;UIpS3|4n$3sK6gjZwTc@fOVfNNlXj^)FK!=2q+k~OQV|Y zRa5H8Df;ijj|a=1mdI0ykr-1Tvs2*d5C3&shJ86~;=_cA{rjW;`R?B@j+TJb-rdri zEKtV!5Baz`4j@l>h;Nw|@}IJCBt*ckNK-t2GyF&NgQp~!qWo53zODLimD+H1(1k0* zlB$m>&ELDSr)sU4j76;dYrQj(%jQ3tw=GS z7@tN1tbq)k&A%*jTyc2Q)#~XJMMB{Y-|T2l2+TOmI{o!c+B4rHN(~= z()C$IhghygpVH-DIQ+!vnUg>K;BK6j&oe>s^#y8UxkY-Fk`EeCo=kaczNFErwrz_n^8I0?572kt`Y%fO}3uhWDOAgGAi zSjGdpDQ&Z!+g<{-GGz3iI`#bnKz7OFuKuI6EpR#YPMZlFW*IYFi)6>VD3hcthurLX*N?k+^FL#8fFa{XD@46(S`bK^ul&TT0kD78WTEYwK zSNz1@hVCcM#N3$g1f{)YaHtnQUU58~D87Bmycq7`b+zCLNWsBv3)^SBL0lpJrR?{U z#9Kw!yqk(y?8tWZSLEy7bp0m=4ypG^sItr)6)7Q5!3*Yo2Rargn^>1{!Q*{>cLbbFe*{gP~!K5EZs39UDO_@GRKDYC36-MhHbZud_ z^EuYrql!aph9{pjt3HRy_c%nRd&=)j7Shry<-`aTGzkMB;DyTv{=;5Mi7;_q5@hdj zcYp=7<(Mv5t{zQ-Mf94ARv|SG4WIo}x%p;F(`iFv(&U7f z<~~TTGATz9xf4CK~B7Lz&fy}`UF@?JmK0XDXIZA(aGmFL69m!2j_C9QP+$9c)7*8r&UBt^16ycfmkYgC7p3URxF~I5 z27I6DzK##Q4IM_xun?fO|>swE0GlbA9IY(i6yjD%F*tUEetY zb&|@bIvm*u0D`Rk_Ss@es%nbBLAInQjXKxtBGU7IY?JkVm5ItYb!a8=Z7LDTNkm|} z;9kw#7LNSC=#)}6_YZf2I zzqOi@hU@>3YnZd*PwWpZ-(SBdP9i3_8#RsHBkqWQiLggIE%Zc`=v>XK2AA9(^osxL;2>-|K@ZA-o>I)|1lLAIDSWihZ^zHam2bUzLC64_gp2OINA!+CfVw{JI2R!Ir4-FMUFMKI z2VFf!jjaLdhz(oVwDMafpA0fG(Dpi_jjMiM!P%m<@2&SI4*t^n;i0E0+-%H#R~D?{ zv^7lbt{pm27QNsr{Hp^Y%awrob#?&e!c^qfqs8k;?kYNaE%(iqI$dRs(USd*+ zBVYAt_3?WF0fqnJT-=9Vso?G8 zf`x!FH&V3rcYKuUC0ZuB9YNu^#V+a$b+q1#KHAaFH`ld`RNf8FS{WpK;4%C@DjJPcBGrjH79`n2Uo>EGjt?gBHi`{oz5EG||3 zEi-2N=bh=3iH}S=w^!Gms(J>e(bRiWuj;G3DyU#_vZJcjG*1E~h{Dc$uTOpre`!~x z+AXB~*6S_J%t%1}n|(75ZCqQn=3=q`SW%H!c+W)43wFAY&bNI>nyrG5sM>VWTO8wb zVa+^Q$?2n?x`|T{u(D0zgj`X5ERu4VCO?%FUCW?0S@d%!EG3AoPkeK7{D?dP#)sLE zp6^Ayg44LFr&MFB_k5&zm`0K9JZHEeYW^^+V9wEg0?0&! zTpm+;gq*ncrZFY^NVgr)-Ieux;+{ep*Y;KutZKi-g&;=i%{TUc-Tw2W9rU5cbw3A4 z4)?x2H+}#Tc+?{3m_U3Ajkvqe?$^d!=-6t5eWj0|gSsmV>$E*bPXGe9eVbT8PuHd< z*Ll9{mBP}qhEriQWk@X{bheq0TmJB2Ej#+`xfbGZ2H!Y6{dY0f`e+|E7GayqW;giCxuu1xhq#=qP4l&XY2(wJu zNPT+;rYqN*0AZ^#ENAGEuqLM4e!w#TFS zz{GOr0voAZ5(IlR!sr7}40u6-%2>ojQtYo%??jF80@PgqAVgJ$w@&DM-XV?)EQWNm zjrZ4JN`7UovQB!wvJ~nNC~-M+E?1qU-_ zseH~c&O6=+EL=!;`cXs{ua@Hw;;8%rZQW8c$5c}t4`#YNb}GYMT{0}CJ`x7YQ}e(% zE5o9Z^jUZMSxmMUeRs_a1-Lu*V8sVBAC;pMSfEQ6n$v4+{k7w~BNj+-ue14Ce>_jM z?^iF1Ii!^vp1!%&o+GpJDRgnzQQ1dxgYDph)UJjBKOAufKlWv%a3FH@b*3snYYEmfY9KGI!slqk-R* zcg!ubkZ&3PQTO~FF%}21d4@4AE#gep(AfR;1J!=v%v^*eCkom=e{;BJepK65pV)%> z*!g6ErZR`02pZRc=m%)2Px2J{;_q)bVqmy*)fPjen+HjrmWe)&X}l@9bWWL*h3k(2 zXPo)UvPm8Pn5m908rRy&jOCaej zF7CW_kj%Zb3oqvpJ&xmY*h|C_Hrdt7wYAO?tRv}nGP+feK$3+Vs19L>!pUpL)nOXm z2OC0$7T*ccxbttzaXRj$6wuD~$Bo|U`t&*|vL?Z~s$PZq`c~rL`Gc&lLR`vsM`=KK z^!K!TKvl+ei2(T6)ao=cr&m*_%kfAR{@jE2SXWzjp}25!y?6LVt22n!2J)j+g4Y+I zB4ACeJ!d+S3`|K3DYJUzo+7dK^_m15&}g2i#3kuyrvH<-d#9xIhOSg7apz8|7Le&= zI(uk+6HpagQHmAV0VDl$j>2Cr#V&w3%}n%Al}0^5qYm%1vr^s3;_{N|p@D&0HeiA8 zb@%dn1=%V3Nw(nm@`fsFXv(ciUNh;7mXJGi1Lijr_FC)T&@fh%l_{$e!ux4u{K#ji zj;=A*hQDYzy7W`rpC~TBcXUn8=3k8R{WH_HdIfM!3iLdwO`09!D*NZnjGWRw<5zr` zc=TqXcN8wz#dP&boW?2qsjDG$;UepR8_cT~bea+D|HV$J;X~c7)MZ$yl^-jLAFkl) z(M7u$rH_u-Ge1N98h(u7sqPLmqlmU$G)OQX82qkCUq2k<=&U`!7M0qvl`KyL^h(7D zUL5;Qy61UA`COkigT}XV<4yVbVU+?6#m#rO`?3N^hDZdR*mxd$m|E~@M(e7nh9H$s z!kxW=Ut+aVQ88TVnD1h^S@c~PPpH*N?A{kV_=I(o%r}}86R5pnsRMvv6YI6vl`aC&*;IB z1t;F;LKBx9!Y>f_vD?>LIgs|r_%?@YI?n=L?dMf;GxF6RQNGqI14&{Av)gObW9~~yw$kuuXDC(RccA~Gby~MEClaiXd3dR0dQSGeG<@0rQ zX5WSeK@*Ae>VWknbH}%7p{JoPn;W3PYC*(?VEIm; zkYQ=J^Em?L#_a>m=@eLVr*!1l&UeCe7Yg_S!H#L&EFY3U2sOUOkV(!$miJFF3; z;E>{eG4wM~j3=^4DGH}Ic=JdSonVU{?RiM0JyLza46lwbUkzDr*1YIuZfdO1aF?*% ztcBa2&Ny-|VNu{`9hS8D5t?klPIF8R=SlMoS`mJ0yyYao)Ley{sUp#MAyNn+G?(sW zo7j6fLq5G`^}6f;Y|O-W>&GMA@WZmEx15l2l^q|-DnujUTBXH#aC6A-qx--i8A?V< zVNtENfny#8;c;F#d13lsyqN$Qvdo#e;eg#P7Tt_Dgy{8W<9dqiW|BB>jGC|_PQzMI ze#g{!Vb?cr>aS0GsD*}_P)i3zf4Tl8$56l2R&X*01&fv(>Qgr7kN(KYVvNss3QC>Y zk9oyn`g8ch$v}NJ6N@^mK91eaqQ2ptrM}rJ=tAeC`p=)tyEP|j5Vtb^KkZc~qTT1M z4BRTnYasV|{6PK346hkw+;(sMOnGJYzfw;BU7F><}f{abp+Z!yLN97{K8-zJ2LL|R<%Rfx>} zihELP-1B1%FOjYTjXSMC;4PVL>rra}A`bXAO1nbvoC!AIdFmqs7HmOmzO_q-1QZw{523WzKdu;|ofH0|39 z2$V*?-}0j+M<59qV-=w4@SFu#$|)P644n!mo3#zlE6ZX2SGD-LUy+;7SR~%N55aP* z{38>sGzAwOoyK>2e-wy2)#E1_m)U}9VD1zG*eLMAWT~@uNYzJ@6@)Zo_iIsRM}HKA z@|!v=3rNe4^d#v}yo8}eGh&SU5XWKpjx^;g@ptDPglV6SP`KXcP9v()QbF!1(kP)1 zVTI%^Ta1C~-^*zLa7G9pUU&E*N>!VAX%idLv*^O1_aRi>3=F>x1(8n70fms{Lt5-N z9Ye+`CkRrAxoqG^oPcVZcP?=pMqnt}2 zLm0TJSimHfO96#A2ssaZ$MoLXYwr!a;&j_P8o;QWMAna*${XQkt!lc``%xgN zCg~P=#l&iI2PQV2x?>K>7wEhUc2UeG8hMXGSU41{D9EO1Mg7n|vhn!0T}Bsf4=G4X z6uIfr^!>Jm#b|NHYefrq{}BI-FLWVa=p+yj#DCIfg@hsHsf@JXe1e0+k;u7x1t%(c z)v`$CWX0`{yzO$_PW1V@M{od_kgJHXTJO0Q?m%#1 zSRr$I@r~Sxi;|)zg%^`09Q_oOMKW-dCxK>gc~bGMn4WxDV(sd2;akUP@b`NMlA{Wt z2bY!og1Op)=2-elqLfQ$%AG^WG^rt(<3zLYLj4p@V8@pwZ?KQGcS^B}Dy3Y9w#Q}Q z1XuF)pk`svG2?<@^Eb^N2S=63S0YWXh!_;Idw$yYggRPxB~!dr5u<~c^u7xtgXEvm)Ex{)r<2{`gxea-qb3D|E0-+du3jLN=Oq1{Ski9+ z;GbUavIGwLlvUNT2WLqvrgXGGSamyl0y$U%gImrXL9Amc-cUNRy6I*VJ-`i#fD`Xw zvnuv&UB+@Cgk~l2J(5(%%{f*AW;9-VY4snz@6p7L;fb=j({&+ux^QBMI;S)rsU%+@ z2QoTxZ^r0B>%_!cQH2u7`9zRha1#`};fkFwXOPb6A+loDl2hbnA+PLA#Ok`6kr)uj zaY&)|tKg)F-Wl$j0iG{=jZCO2~$~vc1l3njRgF1 z3A*$X-SEDeCzE7zD#OQn6%$F3K!+7d{Bn6FdAX~lB@DOj@o1vPl>f!iWdH`6J1aQ_ zkV_|Hg%2GM5B;`LJRdgV*u3-c>uzyz1YYY<)LR}d5i&_{eLeoNrJoTOOlg!zx^QfG zE-Yxv^H5D~Vu_FoP6YE=&7ca_J`9qPp4FMV0~l7Ig6J)QsTkW7vU)7UEbN^EEDsm* zsyZ0}YX_&ErW7qjc(|y{hC$|L3JNx=`_2$6xnugPRy9P^){q+%-uLS}y zJ>WA_4JQ7~rPd3&-QLx#XJEfM(@-h=8U=7*QGa7evoW2kuX&F^2MHAP%gaC zKGda3n{6Hn{31fMSkz^->XokdC;`1gqE$RvW;-6eQ1G2A>Y$vkz-RBNabuB8JJ!>)qgf}yfjV`eOuT92k}#I1)+1yy zZ&c@ma}SdtuF=t5PXzJB-ax`35k9kEFi~hIv#81ir`_~=g#5>|i~-PBgq4;c#C7VI zK8jl(eWe7q4QM$R2#jjl*pm+XA1fl?gdq6g1!^KS$)l={T+SXga|m7?sX(@#MSn&M z4d8io$jP~vSWp|xO;`}mkqLMCqkFKje0x|#iV`gg4v*{?H5yxjAU?qr>*dP~4i*SD zAECW@(kQUol<2{qa?0QG;&^N4A->kz0hr?!EBi)t9E{>GJ}E%#-wZW?DA)oe#?)OA zLgrx`Vp7B_)T zYLoC|0Fso5*Yql6{D>-`w&dNWy@~T%Q4x`%RS`hGEDnKT*CF^Mez)GN6xA^6=)DF; zXYqsMw$iCZK5+tu<($&oY4}VgawUwoa^}x2{Bq1CM0vp!p=W4qOrv@>RyHGj}z_hkJLGCd-q5 zIQr`6)7M3&O~Q8>gQ^Vp??4NOB6FP;aQem+>wd8~v-kBRYi;-9v~PE8BKFERw_&HV zB-xEoQGu=D!#Jp8GF=u!v7-IzC7i_7V2pM;{4)CoK|^7v*mBw`F`}>Rg{D7-#R; zeB4L1u_sfBzRX!v7jBO)AMoirwXcO)T-f(a(-k4`8s8vN)sJW76ISjGc18JAM8vyW zuC}wKjt@&*W{P@=`=6cIHsw7B1JI`#=8RU@jaM4(IXvr6W z*msv8o}#(Zpg~+X%#FusHm6zbxTYv!qd|?}gUX7Q7DwxLHRlzn)Y^~PLUdum8BP&LQpxq68qLDnV>rb^)Rk>$+jaOuM812t8 zm91wl_LUl(EjWyC%}{X(_`tE%kl)LD2o7B6ElG^XscL!Yd`W*ehBi7_pu+|iCR0UM z$3ZcaVEMZ|Y`SS&&%F(p6D)c~H?^(KsT7)WSoA_{ zP>n}L7%5FFYfrLP#6N?NNc31oHFNa)c}P>Zqh3VoC_q3U2~uBm5VO%_lBdpQFjUb2 zd&iJM2uz_}>5zswV|=KcYUAjyA2Ji$$X!UQ^U^Pb)O+R2chHD-J>9d(6ir%X@e~uJ zCRT>#RUda_6ZV^{Futn!KpwW^>{S}QK^utOR_l0) zF4s{I+imo!^9V~<)vUe;m5b)!R)LUf>s?C<2r~(M^iX$YcJvuSi$^ewr)DOmUYAZ; zf^*!vtn)$P*tph;2`*9U({gyc& zm@g_1aO!r)6l2u*CH8|&9N&dX;KwmMDoaUc;22BuO&?l77b>H;lpGI&f@w(f6mCZX zaC6u~-{^H`0rYG|o3($3~QDtJ7cj4orwWP~XGB;5s7$MItql zlez4;NSs1o(YWUPYcnJr+S6074(Y(3$OA_r-@0ZDNz9|YVFlx^%&}dQ8wt-O#W`(s zcUN-&ZnCH}TA6(}R+nw4;H4Li;BxgO8iv3m*=PnMbYNA7{G|c=6zYwDKiELRX@K`j z=oQEn0ruT2-DgHFBmCCi%A?9yit>%&np~AofYz?N_N|6sX4{LN=e0o|z7OM@=HGY@ zInm;C0gNq}#-PdLaMGR~&t|z$Puvsq67e~Bn`_jSg(hC?c9c|%7CQu<$~57++K(=uQE6zy?9B!Y9x5 zd6)|9>n$)Ok76WXLej<5E3FKT^qe1oImc4ye}~;1mFxl?~C|mODDKV7+p^6(*F@gUkjQ?j$EN3l8^-;)NsC@?!dC6323W#iPRbgtfwWr9 z;V zg5dC)G~`zqn#1LD?6B7U-EtllBTge$grOfCCBHs8J!HLy;97Amu?pZrmWLRs9loiE zxq}kP2d2ooldkdfe#?){;A59mc(}I$nO_&}+mB6Yn>$q0&u`A-o0~k7KckI6+)=~* zY{XRT@v|f4I8BdvOR^M=j6fGowVhY>o0|Y;N#q11z28u)7D?cbcQ&Doa!w}j)4)39s3XfD>1Yp-jU7K+3e)UlX|b|58(JVS-x(;L z0D!}2F9jHrslD5g)1M4E)j3;F+?an!?3vf2*y6!}an0uNc7bh}94VIgPzmqn3R4OW zpQ+&maa++AuDFhX8Mdd77$d~+HFgp|`oiwfRQDo%+Tese3+*;lKr`Cy3Lo2hGEv*s zrBFeY$2aC}GGx`eIQYK2%Ev)Jde*P-c8GZ_YL_=ilkKtSMF_KP!8N7Dcy+C&a?lV(Ox3lg z;39yLI+k6GXM2`{hF)|E%NsaA*)%h&!xc9_A0`w3+%o<{4fVl|_p_IZdC zu>|#gD$|&rnrVY&e`C?stFfKkF*{iMy-_OL+;R;~#SvFCyJJPG58CvS-!{GYifD-CKleIGlC^AxVqWgDfAu@X;>+(eda z&?x7rhoP>&Xdg<64{JVZuF;#mNWp59+zSWMZGo#d3I*2QYoJ9ie<-<`oIIUP1K4JJ z(VJU_E@&ugDfX$|Y?AzX$9uUy(c#;aHgB>tuSV$OR=a<}j}SWejK}xm$WD2;3|!0Z z)KCHqNakw!C)wN$)KYT}p^)SdUR?gR6es=!!GzpLT=q>CCVUrmKCl9!wdtc0O-`U% z1l(a1F>5S2&I35};3_Zt_adSnGuxU%kHcfxpL)F9C*4WAy2yc0E3OP+rf; zIYG&42xf8W?UYG$(Viq}ONd13PZ4~<(m{`*5oAXrBgsx!w|D!RzYJUFSTo3hapZpg zRx6{YPKlV^FOBvz7tK#(XW5yW`8GWK5$=w<%L_<|ZGRIX!|_%sWgC{1b{ua4!;xGK za7aFr>>(70C6{lHM_Ew%3+AlDLh!F&Xu=Y3mwUn-9!Zel?dX8#Oj$_z35M>qMr>Wf z`u%De=lfUrkTu|wSlOJKu}shJnp;dZ^ETqtoBB?}#+%p(7M|&qAh~~;>OyiWQwuh05%j)U*MBYh1poBo zlmmX#Xn}{U@E1U;6e03qvfh(MaP4%?SiZ0)zk4W%Ix!vsd+xZZD*J3%^e8h{Bc`QqGZ-#c5-}U%^ppD1|q^k|#mp zADG$<1X1b#qp1SfI`Y}>AE^TM;vY*Qm8P%+07~-XjPR{`f=`pD?8V;n`bt-L#bYZR zzJPOH3ZJ*uucqr?G76u*(1=S&$mH72Qvn?}*+oxr0jwkY=Uy^QOw5y=sq&Lc;m4$T z%ZWU41>x(@{uF6Dv+7Yqfvu8b|>|Sfq>WY9uccN{y&|9F2@-9Vh zbXC(+p|tD3?9UOQ!$yR_L}e~VX#c+-p}i^~Mdziu;Ht;@54f?2CAJ0t+7vHDLJQb( zSKgm7bx%jBDD!`Tf@gRhfs%;YawY1x*+&hs>w(@BoNbNEPCVQcY8+~ZjM1$E(%&4n zX==y#T()C$lp>`!7uxT6(N%|uxju(DPu?r!ebNS$Q;-3bo<(k(xIek_-@T7qF6MYA zE1V4D!kVvD^Mn8#(=>~eMv_yd^Cv@m_^U3-;E&%7l#fMa=>ulZP@nosdO&AmH^w`ERZ zje8N?5z={d5rntLh_L{;XANeT2a+0k6<+lN4@=LLKLbH@L@WR4yxWWIvdXtHwLnwA zkO9zKY62cC*{(rm>D%3Pmc&V$6e+Kp3zKg_(Sp+9n$z17m@0;&Tk_2ie+d=XzvZXE zlH$Wo5?hHg^S`0$t>bcJ+kSH;rj}6Ge-9Y2o~7a8z=KhftT<0PU$NOzJ*R6-08|z8 zb8%V33MMF#c!SG}X@Y3c4neZ~8MAUu>qT|8)};ouLhcm5pWR=Ml2L|EWh znT7V_{p6nAr1$-X;xYj#SX!IK`0}Le@sENaHK54EmcukBGSJHT)wRs@f8C|8;@z@iV~P3aBQFNkwV25IEun~6FAG21DMKu_ULv(-W@cjTzqwhSDmSJn zo$o0EU-#jvm(2H=1`JzuXimj|E*D%9r_t=pz%R8G*3CGD%5fn3fN)du(VSEFsmIV< zeTnW|e?YIdlMYYJ?LocNj`|G@+d0~R;JT4P>i!%BLh|l@o29>~U^tD-mPDlfmlnYPsG^B{ z!p_)q{Isa2NAyoapha;M*)5tTWR>7m?VSHT2P3U2L>nzUDk>p@z@yD#dS&JQW>wef z)PP+imptWpALOIDf?;3<_)`;DDw>cM&;aJr8)H)03Tm_RSbVrQ<&7x?QY-j}=HL&$ z0MNTccfS9rYpwyjSm1suSEnY)7E&!-sX=F4iPNmji8Med*J!FYlxmXW+6t#NlI>{L zsp#x1l0?GnOlXz~G6IL*T7@`8P7Q#XQ{(Ti8-@QN#3#avol!?L;FdV~m&fwoHZSHE zl1QB{fVaiekb<6s@p5-^Kn#_Hkg`Al#fI=gQ}1#7uq!*HqLLVcIM*QWI^87iR+Sy% zFH;5FM?+?gzIIc&Rc;QjX_mG;cr?nkwjAwvXGox8zk04W)rpo_iRPT6d4czQ2lB=o`3P;OHU_Nj`%$S?dc#6ARl`u#9R9YIFyNFtj|(AFhf>gjf zhDeRYJVi_bN_(E}Bv$sP;Lf4g%DJ9P9Dy6gDc?Uja0gwnsB_ zuhY|k{TfULlt@JZUV^!Re`@=&Yycu^iScHMu0MGAr)(mZD2G5asyW*Fq-11Vx{H4^ zy=WwPj6n_8O<3_^Eyfa7=&9XDlwpgxs z`L0C;!}`C(XZ|iOoqa%FM}OZJ4(js{bLgi+9z!djV+&n=S-#K<@+SZKkhM%;fMj(% z6oEeqKmxWGstaWTGz6SGkt+9KxF@0+)uMD!Y=9h?x(1pY8n~(3y+psZg#Oj+rtd>N zQE0eD1YR#28yoT~oLz0E;~Mgm7wxvK2YLF7cQY(VouI_jb(6`fk#D7q@&yav>_HmO z%l&u@4zq>{#SJl=*@lV7+2(nddpcBXtOO-RB48irJ>4`JO}6_0JD5jT-g};j$5v|7 zi@dz9W9v? zr3)(ZkLmJ14)MQUNc#ZHuK09%*(biu|LyS0panFW{(H+J!$Y<=8aIFzLTP|drAqG0 zxvf?+zW_Jz#(=Vwk9+EXt~3~^)h7X-&8v;Zeye|4p8xX{ey=Hj{~Xj>@gD^PkxYS$ z47ffxnfdoN`v1OVvY;o4CGs-Hg#S1!-+^H^p4~IoLm2UHX|hgPvJ|f1LA*r>|}m&hV>_C=m=s90`BWu<=K9FaT}*< z082lOa9F>>WRM03vf?&iiL`$u;PMr50TZJL5fGMkT<@h%e!SyQ+zJ3>i_|V_znb(X z_Df*YSAPCYVbY%v3x9pu50DJ0X=u8|O2!o40!`0f1K|U}6EqVVav~IVjZi7nQf+=* z?h#jDWMq^(uw2l2VwW|#9?EkHa{#s_hXtNq_b}@fKL3tt{X@g<)lrXxtO^U93J$nb+y}hVX;**%4i?Pm_n^@rnemcs5s@6&IL`X^P&oe08-lm!hjkr{ zjlTQywdz0*0NQa?fe^s;dx47EV7C01*^9vB7Xgs#a$gbWc$`~0s_nu^Rm646%wy~I zpn=)8197~S1Gi_&lqp=c;9xJ-OG?eteio$~IsEO(+~~U+pH#VYURi>%LWb!I6YLT8 z^TGM9BEx{2(c9m&)C%A_26WV1)z|Kq_m?II&}iN5r{FeCu%U56kjblN$;rt}VRqq% zfXrK!yd{fxhGLUlEi7XXbwUJI{H-GvG^K;eGrE$t`Gu2m_1H+Eu0tBD5+K&j@PxM+1#7$5Hb=%gO$ zVOC%R9Owa{aX&D z^?g0v42lXcuT2|dXMYd^_76=F{_xZtxZ(beW( zCFqS;xU7~b(YFqmYIwL@jI7hHGFPlWhV)^*d1KjWqAuAZ3aGi7Y%R6XywEdgv74h) zR2faqpDP?lq_l*VvI&9l=t|o92M8H_uw^lB&=QX}2#@rCXIiMhNdSUs$}Jr+L3N;+aDAmFhw@~El0&^=<X*rH?zG0Ou)!%d}ytMOGcF=>b)`LEA;s!h& zhJ*D(aLk^!kQl6LTSqQKDGp?JZ2R)^Qe(iuUoN@-`DB((kaA=k>Xm~pN(y)8$^*_0 zW?|K~xHC1jHUvROLSg~9=tfrQL#YfeP~XHz%~Z$Z2BRl35$vp-hhh(Il%(>bLhhKf z%axkmaPAOh#}D+34q++uM|jQa8_7B=6@nY21dxuzDWlW+$0+>E2G2Mv?_+-$70`&)@nQf! z{^hdgXrSzZAD6NBdFw(Z3?g;rzFaCeoE0=yf6qnv#^lq8`RLW;`bbX$t<2rgWztg` zKIQ?*pb9Z?U9-}xe~*{6H|sjR&t+22N(cz;F2L`R65+Iu&nHb^BPaN3x9E{oyxLjR z7geEZA`&A;)2?(aJ|jJY7Sg3`_WhKN=s7~?`)~ww@U^$;5VaipW8N=z(5o{3TlEfEm7PVyjVKN+Z9sQ+JAJ{F3Sgjwk1F7 zc%HudSR}&wCAgxx_p}`SJva}bC)mS@MbueOyJ*x9KxjJ3Y??hhTFIC@F7hseKW5ii z#~g(}EqF@%`|8Q>43OL(=Loj?(OMUkgLa9?F8nzPX$;eie?F z!k}Ip*WxlJYxFXj4~ghuNYV!-KjKJk<@G; z>3yFSkvSB*6;!jOa9+}V`ZKA!|I!36XcTIpjD7Ol@Z^ZuZ&<3-Dhbos)+gWas#&W+ zWp`WR1UAvR>#g6j@(*XMP765)*#TcHo{-C&45QZb(~=A%@lmm~i6-O}lKBPi!Y$Y~ zy+qIUROq1-nnAg->3t)LVTiwA4vH%$?KHug$Q?{EN!Z7wiLY4ZDp08(p=tENWWiqP z>7-Z20-M#bJN(_!`~zDzgdbTKYC^Q58~(`ECKlT^K z9~*uS7bgFI*n11FsPFuyIZ=uq$L$3q(i#9ySuwnVw2MKEj-V8 zACKqvI=(;P9fP5Z&Dwj-wdTEN-1ikU#SPoo09+33aQMAK5&8kDCj`F736HW2p0HH195aEZhoCFCRvl8K+Yt{VUVx# zYjDWkwv)(7V9?o3MaC1p;1}Ky4(HUqa0qwik=UPIux^mj#^R>tOTk2^AWYJA#|npg zANHyE%pa zuFJ#TwahbvFoe6m$80au=_2qa@A!R_TrxwX1$n<`D;YhTJy(V$zRs55DR)t^(=GkQDaGf!|t*Gy)Qu^KH#j4yKPRTWT!Ri>jymvx8`GxhvwaQ z#cwfKtJUC)Gs4W=Y)Ne*N$J=$Jjr!=KL-d9n9O*Yd*4qnGi$+WKCRw;3CVnhtENHt zpSb~UiXLt;gG#;a1{qdCwA9=viddb8!yTXGz3K3+d}S}GHK&eI^0eMEa-5ur`)RxV zVFReea#(4Gkzeth5Y7x#55FxLdQ>3?ny#8D*u!tiJh9z9Y0YGl_#EQu6)l-GqLz)a^@zqZ9 z``Znb_o1Kgo7}rnzatUfy}+O(5sAeA!ZVdQV;29t#A)d3FiFWkb;^U&){BXgZI(;} z2+q8*li084%=~J+s@;$UT&ZsT?;_x_>3IR&RSUAMVZt(L;)n?c8s$+oC2bs*{z8M| zS2`EHfM`+S*t_e)+bi2|o}doPU-JoNkmLTfVG6E~9Y`BXXr1MPweaSc?H54W$GA%G z9;#S1*{Pvs#e5P1DIB!p(2nNvAx-Y?z}|1OB6268n-X$+1cTHX~=jTK*wT_>5&Nn3cG~fB%7h6S$}VN2MUQ{J$T93V3QbE zNS^FefDPCRFmzR!PjtHw3c&214OWmLEPEekTg?{MsnzJXRQm@6_7&AE>vN0tAlt&c zigX0&r(gksT2*r!_w8^f9oX-({~I z+Q9R)i@w6{U$lvwq5ANCPxBpVL8ikySz9w?IGT_#8V-u%7wR0yqI#H~h~!#k;>%go zh$c^Pm2o?FW!EkX7DECSXxOhkhOno;B?a!es6N-71>AqPG6Agf4xzqGiAD>ba*38f zb=R%Di0x%P#@b1_S&}Ery;Jk62AL#-I;}0bUv`~7sgUDgwFf)bUo9d#rTT-!gy}7A z!VoRZ-JA~$CE*;WL7eO{#}Cy=*lmy;lHTU|D8L$XnfPAuz-LAj=X~1zc8FpRU7m!m zgDJ{h@26^%=n*9H5q^6?LoNIodU~M6-C8IrM;6Yq?v-kVKoh9`KEN4=EFb$}9oaW+ zT*H7)WFL+T-iUv)c^t}mmlPWna@lqn-Xbtkvi3Y35pRQ3c^ZYmTG~w@0goAf?S$3t zr(AVR>p)4w=Q*ZqiK=|1L1O7+Bxg3wm`X#^n%EsRcYlr#V5q^QrP|N+OguRbwmvb6lgHWBoY{UTb7!Ak z8w!;pK7Q#pG^sjt?804~DZXeq+)$Ba7=n7(hd;As8(u2brfyBy$o$pn^KVHtV{Y|JW*MvV8& z{P%tMvbb#5{neZv>ru~{=MR$WotRE;mPT?8K{XON7oer+x?jbxqdq=;RU6kX!%xT< zPaN+XE)ULuz-N`5++4n@#$wp~t0^iRV3L&QCqV=*oi+}67$E`b$wby9aW_{&G@?vM#24b$ST&Utkz^o0Q6u6^MA?dN#3%;EslQ-h+ zU?&@7Nfkh6xlQF8pDJx8avT|$-M8M4gT_Q0xj!M6yPg>{`M%){mlGkcO0l}s)u_8I z=FrNq^B$1EbD=}TvEoc9QRD(i`Os<9hwXdR{hE%qF@gcQ)Ae*RPi1@0Rq?NmMssG2 z?yen4kDhR4?97(TPo5+iil;}~F1pjKvrhn3?6|zD8R~x4d{BD)%t=rA=}n^1kg|`g zR%}W792~)k5p!yt>PCyD>Zy@Miqs-Nf{0A{jlN$yatUHb$>qVE0h!Y24t%-E z2(8cyj97uaEFp8ycieaLZjEqHAqmOw7fH0OgwSD_O_3TcZm{WwxREH*r~LEZKUn|?y3&&= zJ5pj@?N5#oKw60uNOew(FRj-7&zt`r2fXZ0vi-@6Z&Jwqdy#*i_y7CDkUzf~VY04R z{#-Ms0G2#I&AkQQKQj31{Pyo-G4d!ft~dzv*l4fo#ps_&Ucx#U!{H<~H-~*P03mTw z(2G4)AOUzJd2SDVp^DRV22~X!O&2ZM&uH2054~Mb`p>plB+Vj$aXin{y`^L!)vZEw zt-Y8XwM@FdxCcK;zqp_LzFo(%VoCOlmmWLby0+-u4k^qu_l&ea_o>=CFa^aE0x z;L9V2PXLpUu&|g=47&L&mzF-;h?5sT%0DxiNV7Ta#q<=t>pAOx1El{poV-yhjQd_= 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 z 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%0DoL{V($H@xWY$l6SA^CvJmXES$2694o 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 z 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 literal 0 HcmV?d00001 diff --git a/infra/ec2/start.sh b/infra/ec2/start.sh new file mode 100644 index 00000000..8d8f12aa --- /dev/null +++ b/infra/ec2/start.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +npm install +npx prisma generate +npx prisma migrate deploy +npm run build + +pm2 start ecosystem.config.js diff --git a/infra/rds/secure-group-inbound.png b/infra/rds/secure-group-inbound.png new file mode 100644 index 0000000000000000000000000000000000000000..49c3a83b79cf0eee53f3d1149ae0db8d41582ac2 GIT binary patch literal 91378 zcmd?RbyOVNwl_+Eghm35ySp`k;4~84A;CR(2<{HS9fCUqcXxNU1a~L62e;Skd+xnw z=e(Ua-uLgzHgk^0zInC3d$+rA4t96_Hk$iM zeHgzM)|Y=STp)!j^79`oR&spbrMdG+h@^fI@gp2-kC+nL#uBmGCCTRtlz z4O;tO1doSLr%8IJ#dNoHTkqL;;jrSZJ~8GcHj|poP{y3p4g?_(ClHjJ42X@H%`&-x z77IbN%xgTl#?`%YlU8&Mg&sz4CKlFr`$Io9DN=7p17nU!yzxuD>s9Pxgd z^UaFN-5IP*4n~Z{I@p_{G8?SD){KJe@k_Vh`h(T2J6JgM5X*LI3yNm%-m){`(vn z=J~;Q3PKVRkY5FT8$&}2+fSBu+w4+_kg8@(6jkk1Wu&?FEzLo?29|n;ASZLH=OR#G zCvM28xuKmdiIcgRg)O%eFWFyDa6`_YFEf#m{Pl>PDKD9-j68{urHvs8JLnDQ4H+K- z2?+_<#=waCgRtnoibMYKl6|tXv*KoAa&&YAIlcv1+88r2b8&GoyRH;`@sg1}6Z)Uef3?%l$>e`2S=j!o zTaXSiJ>Ows2EAeWpSmGM!OvH@paRS?Yd-1UDOivJqtzpg?CnhycY z^golvhu{iQGlGH=fRYe?r|9(JAQkQ-Mh|wc4zw>8H^ndQ?4V!EN&={;u&9w#lE)un z$YccG!73(s+nLaP`yi|+@W{FwXqSCO1fT#up3ATdEpLH%fl5F#fyVg)p$Go{#p>1{TjZz52lK~%wZl`$uFi}NQU7yWoFw71X%t01 zV3bk~*zi(Iuxv#N(@q3Cb-!Ji4S099dT9^eY^QmYHcRRFsKw-n{D`^XINU|8u^hmx zO@~PF&lQt+sgixoJ=2KFRi{5a8^M+`4qWJYrO8RhF+CQAkH6icDng6Vha-t4{Ld2u zOoom6Nkf&0_d3qNS#o~@RvQfRXi^D&iX1_+Ix1hhYGOdcz(`hdx;J!nk<>d5U60NA zLNTWEu32g_nu5>Sj`xUY1r+arLvCYa{Y8CeV~^NjVG)x?2ySC$i-QU0Xmv0N4%3QHVz@ z+oLPMje@Jvct)j7e_J;3dMcads}nc!sUmUGH*sVxC?QpYV_V_bK8%_^=hB@?F1q_H z+g4u}vo^kCsWm~rUt7drJ5^ElTN6PM)V)Tjcsfcg9{cKXegan2(KH@ob6davScN1O z=mPaY1T7wuY27o^(oytnZdi5n_X(!)Yg@}vM}D%B{RmMC8`>c@IKkZ!4a;(eyL-(i z-pwa&=CsPy`3A#Z-ysumQ@CC|kiRt^i#x{#acZhO#A`KeH_Xr0n?x6@)<_;p zrhyxf4pvr_YUNG3M8jiTua3B~jV~`^8<|>Za-?EoqQ-cs-%0lKS*?CEn`=}u8cife zAp%?V>s%)qXMgm9=03a)!$-c;v&oX`3y-3-{RzP4a+{=SaJ?!WMOkJmR7N~keQJ7S z(VP4f00vUwPnI#&e4hLYZm^ZQJeb>@F43_0HOqYCFm0yx6u+-Vs*oc|d0cBw9!sYj zlfq?_56{B8^=o&c(!CEkk=@;2v)Sp#8rUf7QzY4~=0_bxUSgF}%}7rag0Hbf%0p#s z4@Q-0L-#jl63KClCFYLw=+y3%kj|&Qt=zUzxx|-A>aXev-d(~5X$Q)Sy~~wO%od9W zDMzj_s?*#(&RLo-sI;FP{zK0|a>LOPQ3SJLV`kOVwC}8T zxqxhW8e}-MW_DM*LppPHE(F(}*nWThz{Dk&%P7xFezf6WEJm`jNl&hnC=rtHcp01$ zQ52}$ulza{zJoA?CR6zA3$Jf)Ia8_xZ*08Vf-wh&?jHER?$4C*9C#AoPZcS}3cf@X zy;jWX3$O8AAE%V^8`|t0Nk$g5P8`q4wmiPtN)!y=mQH3bLHi-K%MaMz=#{g|S7>c^ z-deD1#R5n=2ys7Zn|~K*EV{dI8%aKF$`QTzd^Sg&4me7$C|0WkJbs=jrnUV!5^s%8 z#R<4*u-!tqYLv&?GrYj-=XQP!@1u9VC`okv&6bEgHO4>V7ufXU>0XSswT#D@KlEl#>5#H~=O*+Mqann=V{ z8iM`qcUC1AC6F{|xf`?(j8+Xu4)hz$rcqS`E98b*&Au8lSdOZ^MzlE|ZbP%W6kwR7 zITP`gIdj`$qkq#>VXd8w2(KJW=C0bw^{uPvm^-i=plfwF&xRCP9D7 zTxu{Br(`5;ixCv@bd{d+A+5Z3FqV;?_%*>t_Vgr5up7B4;X<7wFz9%tjmgW)3%RHI z^AEwnSX%v@cbkMfF4dH1LT-=Nb2c~5JqV{)S2H(JF3tmaS)vF>brqkL3i~-J=kX(P zbm=Z1&LezCo-Q>;auUy$YcvWKmoG;EC1MwvqkgV=(zN6OuWN+$wjYjaSKP7+e8dkx z#N7r>;z-9fY|VxBheZsY8@*>7kfQDbd|EdOR1AdRB?rp z*wVLDr3#&bF?;EaZs-H~VDr?c@tOUMAt{Z0t%1qz9|epiwVmsC)2ai@<{8(lPm0Zz zU>iy47`o`?ZLMO5m_2lQI9m3kNV>&0AqUPo?+IR27z{)WB#$hY+n6oY%D7za7IopY zD_jkoZuCgO2lmfsZY7`e#B(33MCbK~CRP=13`?#ow=kd{?oAb)Jw(veN(Pd$3LZ9Q z`1v(EpY?ZJr^5>>wEtvMrSbTT(^fHq*G$L9*OAr@U^>Q;|`jfw6(x!(6QbV zr^4K98dkDU{?6YWJZ{F#a2kpevez(tYBZdZF;ScANFW->X8{AR|p?p@z=kXk5HuC-@k5qv5h=m)mvcy zMp7p)*~p)Jh3i@+dk=ftPY+-lm=j!%a1yoDeBXxPmydY2&E0L{$FY|q75{aLrTdbQ*&vV-jY+*ySTq7x|F921 zkP*jcCKoj*lKo=eGW!PK5&$dfi~DK1+9ZEtqyi{cq*$1(|0Yj7QSkEVuFPz{xu=6? zdXr7ccUd4XpqY-f%e-yj*2UxLT#nuj_RNn>7h|1nf!DQ7qrPAFjI(L`aIVT&=#=@Q zoJplvlk$O|fFvHIQyT>nBM*;d$!dHXg6Un|jl%5nd6l;;GC%fd z(CJOD@e)UL#O0{x$!cr(L)h3{MpwYdT19PlRcQH(H_}IeW8|G?7_^$IA6)W~&d|MLoe-3iiV^xZ}p(%`y1WO{Z*~d!}jE&OTxX zHP~#$47YZi_C@4hVi}Tn@T@D4Ya$-4rMchP@r3RR;QP3Sh9@4(Rql@MB&|$09yA9J zpRX1YajGmgJ7>##d7sqG^#bYfUSW`peXRcMWMCSg_)P`jY!7}0PK90@&Qrtf+JhMl@=3~J zUbn#8_c;EKDDvnXY@e?Sg_e`)e4)Ch9LyK?>;l8=bxc;jQWw7tWbP%oLkK05S4DKErT%`t>EWa8f5~_hy_r?^&$ghbFB|9~gAvP7=F3c`{000b`#8EzzDY?EbUEs5K35 z+om$9yLpX$+5^YR&#R78m>L%VBYISh!uOxMar!o`9DKg56j|~Ij0r7qGwsz3}>-HJAt&+OX-gx#mTxnNNy2u;#Wqv{6ET3M^g)rAJKYu?@m*1iV9$In9VmxVOEX zq{Z^AzF<_Zo4z5NpC(O_89Q1c5N!NLey~3fU3|{=X>vA)#=;Pw7KFIsK5D%hns%LS zPn`TX6rb)c`UVQg*!O68mp^vj-%vY0e(dWk4-XS3a_sZL^wsMc)#6jxO)Ev)5X5W7 zIV5A&OHR7Z1!61Em8s|h^;1Oj0MbCqFmbapQKQ}c4O2rgRaj$N+4Bqdhp)|NXHw%= z56idmfEmDR)U*H!|82ROGeoaE0wh7iPIOLJY(W5WdCv-4+QjX*ubv2yB^oQ#veqeC%+uIKh!e&$HJlt+sV z`s^3uN6v^5hEBL-ZvOCBt6#ZN!te&OWy>xn&(j=uV=bONmhsM^5n=b}T-gbt zO69G^VgUiu1v*Y-;L&M0Dsj^Q?O=49FLIY23jqLi-MWm#V%?+Z?VH*a{Bs6U{_z!g z=CmRe#G`k1Dx%W4S9?ErW5h$x-Wm>K?45t5RAq~-!10~Kx%~05xRJHH-hXy) zFR@g;p^}8XhS|Khz)h~daTzUEvNz|l`+@7o1KAstZRsAD*DFONQ2DUD(L8`XZ!4&IbHq!N5h1K zpV~WDU}EhkPi!4TZF~$}JAPhgYco+?zpD|er@$}NObn}XK*%5S614 zZC#7xvHB=9;%}mI$CH7?zqp95S7OkK`I)e>Ujy5;=zGZD>kXV8u}VDY84rwGBn6(m zxm>6b1Tj6RZsBG}1P$_|o??VU7Tq>`F%pmCjb;wDL+o|-1c|01&6BtmafWZ7;gIJz z2T1Nnb5ICWMp6xnv@V0b6=sYiGzEu@O9puRzSazv(XIjQoy=o-T;f}Pw5xjy{@_&8 z@YANP1f#JCFy<5+(%lZZ6fBSX&(O2p;%_fsB8@m2qsR7rJ6-q1IXL!I*`x2k?W#ug zoU!N&C!FX+7*Au=mJX=9)?ec0T_nt86c*Qas2I=Ibw0Xx_JZ4aVmBX8YYD?=pIr8w z4RAe`U0^>ONT`^dT%#xX+_~z^VbBdY6iHR`Gx&n@OFBbP{k!``?5(#v+EKA}){I@V z`a!^_Ejmj{$^`smt_S=O@`QWW)o*UOdcsX-tL%LVl)iJ}$Gmv5P+luU-mru~LT<;% zGDXcbh}pYuymwxqzj=JfqbUAmRUZ8Wc$5hi3TyXQ9pgkM<^5>CKNyQn)NGCTQL5zjefRlaxSv^C44G{}7>mUw=tGD&GramgrQzi4 z_BU%W0ZkCAqN)@{S7r6}@#w)A7EUZk>4QHqQTCWVPRD{(xzkmdM%(hzu0AU-OL{=o-Z_Wu<-uwrF;`(%nSp$!xhZBm z-a0K(x}lwVMppkEF!NP<3;#5!!4R*>+&W_bG6q4@V_DlTU79h_PuV-8Mg-3))$#lv z*oH$fagH(A#YNX+fHohu0HudFQEQ+2Kl!V(ndZA;af}NxA=s zI#x;uIJ7xgC1pfzD_Zx)?|RV66-6Q`h7&YjZ3g(g@X32CijrW(`@@;&dn9a^@p<*$ z?E8pJ*jKRXg5}G&XDGtv)oRznT|lWOjWX?N;cu&iKWZ(e_H=4yoQCSucTU7;j@Nra zSX|7knhNSt1rbR{=GF%t(`{SoW&Xn~4Hn3Z>ClBfzT>s=4K>qRrA=wM`XG_HjJ=Qx@(rk>M(lgFP**l*4 zu`reOG8azJX9K|R*}4YHL!`N^KhX3>xOHE!GAr`N>RD2CbAJ;C+~XE0W%*+|VnI(q z)ba}yyMusob>$x9uwZ#4Yx))$gO(COa?S;FY82I`K%ZtxDL!LA<#u*Kh1Fx-_y9?O zW~u)~#B?V7C9Y5ZrwAUTvRaN609FdO;|_@rAKp4J!0BfS7j&60&K}t47Y(DhSG=ve z_qU|_H-X=5xA_q;-#E{+(w68E<1@|0#{fRV_Y5{o%-;JUGGt)saw$LD7GVWftN<9O z%G`rYUG`A#>E~5S?9|(rtZ6T5^z_x)lt~Fwa?A%%4 z8Xq0HZxTh1zgveKgPibU>?}f7^KAL#n5z znzmle*|6E0xLuFsYD+3V3SMk;evd}WJZr&G$M7Sq=Y#_J!*Z{KtJQv#X3C06A9rn@ zm>nTe7l3JvK#xpSI9%OqJur=@*bTB^{l%ZXNhNDffjRT#9rW}27<$?6WK9Qi#PH$? z((r39$n?nlkx@}D(&-m!jO!R4AK|<>%{pQ0@jj$VJ7>=w8ubf1QoUYoqn1mH(HJxZ zTANhSRshJTg%NxQ>s<~DrSH$^qnFglu;`khNb%YgCb}E^W{x>_Ws^JZxqrRSx+%QbJZ`=x)d4W}bmnj6_Ng z(C~s^4t;0kU`Vf07AHWtLk5Ns&ZY>87Jso-a3^>;uk7}*TV<)*FhnW?*U&*B^L^Of zRPlPBOv1Moyb|B9m`D-CzjVv%gWzvU3ypVU<8^BN$2V|=^MoU=R_Z!s-A<=eBtNf_jc^j!0nh%@)JoI#&mYdkT7>BVJeg1WYIFg)aE!lC;FBw$h4D zr&$zVN7^(Mr;9Y6s~u;V%u-5*BDJhWuufIn0z-PiUAQZrlI?}F6*9c{7+}v+#GdBc zqk}D`dS~lOan|dmtZv!u@KLz1%ttcEPi>Qs_(g z2+w{(;4o#8*{SQCx4=YGIR?Z1M z%zDu|-oS!KqK5@U)dv^jFdI*!M0INNSa6Bd>e%Z(2^HXz!cKxke($%GiEh&w1Ec(= zJfzsKq*b`K8fTc_WKfY2gj=TSrfaS!Jyx)%9$LpbzB;Ge zWWihf+2@LOy*udyHZTC;{j3u@8G7?e&!-JJukQ)`I(%LNLEi!N%B4{%vF#SHsG4%Z zuf1cJNT}XjdwtP6XmL1Bn39(Qygx!h=g0N=iX5S*!VYn;s|-}C$jr|$Q5?PX%}=89 zI4o|k725I(T&lIFrzecg97*FDn`fs_s2}c*^fR_zLE)PuI@F;%9=$xA-~Ij?c!l~1 zae^KiEcyoB%1gJ;?4>#k!c=F(&}%5$Yz^l$H&}kM>?Mw4j4jadFmZP3oS2<$K5l(m zggitX2a4@k;r&dq*L>|wi6OS7nL4?tOXUkMh(I!J@8mzW@R6+oA1QMI4hD|PZn&O@ zC>7tK>#Z3|wD;IT|5}$F7I-4C&2*jDSYGIfACFT$py*9HhkSSS zZV&d=zIrO@aBtzsxZTwYjq!9*LhI@u-X509MoNhF1=Hg9X|>+>H}R5fVK6C6-(ETE z^ub@AAz)qnK=r%qozqLsIloD%(_eSC0!=vM6AJa#S}ahlj3$}0U!a-WNmtt=`xS-- zx*d04LL_?Xe@b-gL@2N)DTb>dEs!w-XC{Hh&_zP+{$+f8GKIcuppDI8-Rh5~OX;Af zyr`51Z^9dC?oKt~nG_*;VUA7T0u;R`I znA@x9O*#iqCrGpDQk<~PbzBt7x9A?|LE7BurpRDmEaYa;lv)?$b!k@>o)8O!zsu)L zcmqInKHGes!HS&3kP!#8H5yCK13Ru%>zU~7v{rQ#VR?>D3&HRAj;4EVPJJF$wUu_QRk6Qp$Q-nAZ9+K<)OA#+gQ+#+a`W-{CnlOr_xk}^sAI?Hn8>9RI+9xay z?9ybjc`9=B&JDp4d!Mg)S*lGZdItkkvqZo7!tK#uPQ&O`Co)vT;dNU0>Jj+f!5rJ( z&%GwfxOA%6PUS{Da2~ns5DJI^w955tGv-DkY&tfV_NVP1)-AJ$NWG@awOqLu|5_Ik z4nX&IKbh|}9_)VEd(O4JfUAtF%B-EIN}Qz^kR=<4`LNLiOr<_A$`hj z`WzR128v0)iPHXTwf5LnyG*;LF!bRUdJ*5w$qRiuZqhUx&C0$Da0=LdFe$q-6hY2+ z0PT>u{J8K3x zU2c&Q9}lG&?d*?c--SB)4=j;^L8Fo~?`Rs6CUtL#BiEW$dVR*^(^h zILzo0%eKjpbU^_pF;_40EiMvuVR_?H#UYN3rtxln?cvh&>l*#~8W0~CVM?Xd=sd&> z3NF(B`U=b8Jr_&Y)M3}+dt;~SbrkK)1S@#|wRuQztZat-Hex9mhaq01eQ2t|EHE(0 zJZ%J6ap+(Ex+@_6I~gelPK9bfp~RJ@vz#C-JNm~AB+aZUbNT2X+zd|Ra02h`;kmBK zn}p9(h3XQ(pS3jadC82{ZOEBm`vMc1Y!mmzaDncJL{XPEkxW5)!TfS4a;EVTb!aKd z(uskjNB4>J#Z+w7h&?AZC?7m~!-=2d$~u!50=t0|$u&+3XZQA4x+4{(aXaAIR@;Cg zE$)#UTqqJylF)lzwrj&}YqM@r*<4zeiAN%hMAw*R$!3?DF6H%Cy6JBkcFd zqy%D6Twk4hjj+(b-pi&VC0pU)1hKc>X-{1*(YU{eOcov$LbY)W-EYxfJ$VSVF{*L^}?+0#a5m+N;UjcLM# z7z{UFhCIBPtTVo{h~osHaQo&3271wVs^aiCU4K=ZLTAT~SmjvxL`fj5R*lBp>0y+gCH zRyUeK#)L=bxs1srESWZ?PX(M44k#as-qb`%%G9f@&l%gJ!QK(_IPMO#0XOc-!k(&( z?N$3Iys3=X!E30{FTCIA;dYTX%6E8kdrnZ54H558oBY6lPf#2uQihJM@1TpJ&x^k{ ze(-N&h@6!ST}7Z$=+-eyXd3IXmHf!2eaLw%$N!|KWob6KvDzUNCm(9X0_cE2G19*b ze-Z6}yVk(sKl@#jg56|vXx3oY4YYlj;6ju#WWU^+%h$E!+E&K<^T(;5Y&+8=Y{-aG z0x`Pi%jgM_+LEd&5mky9bGeZItMHc6iqj=yru6;)SV%MQi(J?7un;7NcIyp=((Wr8 zQ`c)`jLi~@DBx_p%HD-|N@w7hVcst46L&{6+G|hVkziP;x5>)Aif2yhDkS~#aCvup z2JxNlSCT%yBjC3E8LC*Q`XiVvG}YFu!ZHAvh{9P(Jg6-e=QZ>7;1vCbYAaO2jcHKa zL&I8RrB1cDZelhV4fP5m`it&5mlMM}*bf1#yjdUhZW0ulX#waemw^9yGA>N8J}gO6 zrk)c_IiKMXID+`2BX+7-TMKJAHA}=1kij%lWbEv`o^XSRr5+%2bBj-zA3CuBR9dTP zb{WBAEH&u=s;$G(X>wmU?xET^%#BRXsL^bw1y>7+@cw<1A(ici(7}S5F=ZC}X__L0xsmo@x`Nn$y)$wRPNB^guaX}R2 zmIfxm+L--*kB+mPN|Cxqp|4Y{K0nwe?9F1GBhz760riA};C&cAhf>Nq!Jb+%`Oi5a zZKp)MBE<~v@Bk!TOkFBq6AqbY55m?(mEoBekFSFMdoGo_uR!Wtq&u|eAzaWkgZk3~^*BHYsuzP6fqo5N)4-2@mrk zejQnn4%;Uv)<-s9JAJr3wQiv}-#C#srm9K8H`G8I(C8rr=y*L z4vX4P&*>eXLjJc$TgUebQ=5vtqJ^B5yRqVGrP5Xms7QDI@^GZMT~{(-#b|z(A?A(V z-S4nK-PH=X7sGR_hRwED76Ar8@3|IK6mkLUws=AWa)CZ$Gst|z&8df^ zoYJj~8g)rZExz05^cTcEUS9Q|sbFmTKP|Mo`+heC>zFtFqHEUSaX2(`w$QhE2l&`) z)f{wXI({I9o^IdW|DMJ2l0j;bQL8W}Nwp+~w@5ocl~;4C27g_Vqg*TAoj9%S1+jZ} zOZnlh>R1*y7t-KWuURpf{D7c~1FR|AxuL+3i`XKSePsNH#UgZFZ+?ghmifz-kVowb zDHVyWP-Q}`(r}25ALKFV{1Mjq?leN5F#SBxjmVBV?u?s_5Swsn)9d=J|83LR8QUFs zlW>YT;9f=tg=pZ5!|OG!&;}l2ZgV^~B&;RWkgF>l6^#p*51}%tsqqna&H{P;9B+-p zn`+JNm8@2n$ud;ZTe*#_4Hg=eOg*MjVRH$+;rJduO2t26l*$vtx8B+1+@Sm(;plz= z&A~nzt!St{RT1o-gcKiw2-odYLUgSacFIER==BlCa=odq4lzNb2b^UiZ$=DLHj7!L z%!M?^wk=$|tVkZv}e&A0!2(V>Va}Jw3yd#cp3|&G*nGp&=8KTzj9fU+(38=h%j9L9l zSM1)4IgJQ@GkibNbTAMC+Xs-|E^qsSi zos?H|mTprWZW~xH1XYo{NgdNLthWlM&eCqB`Qe570N|6uG4G-=n7wtH3S`c4i~c&2HmnJW(~KU%}^0(E$6DN z5u|eJuD|DYGCG<&8nExZ=5n&l(7iAgU`3XoiPX1qSDf~~ssGcM>GaxRXwd12S+??N z>6%tp{q$&N)qrK(d#-q{OKZ?6!&ZN!mZt}4+S+{QnYLdYD^$BQ zXs~g((+;oVz52PD@F%#*6}5Zzi>?-7r`NtIoYrT)1bjA%BuRa>8L91?KG((mSBu|3 zF4cm|;JtHa8PD)emt6g(qqW$l>~y&8Tala+A%^40LUVyT)VXcaQuiya^VR4#c76T;~i=;^6kuA;7vWDdosL8#hLYcQYwrEmd>0VhpNe2XI5Fn?!O0tSF~jmya` z^r(U#9|@~wuMWp*RQKv!bFPW!7$7K`A@{bS)3FIvXJqQjQ5tPE1o5+b%pGVs& zURCV3(Viu<(%%3xM&r(^EeAoMABdGs~d3F+Le@mnZ!{qh% z@%jxNOo9gsfg-~Yp-}z_KYcCmMbO%>}iva&xmEb|?NBJ1j@{2vLTKpNi{(A01G2Ou?x*QaNSubsd#e;SE(7)aw!*Fa}@ zzlVbV*82Y|hD)3vOh5fPBP}g0ibX_H0)nNXxR9g^il&GYP7B)1xE&LE5F`Kl-2ZI? zyz*k(eZIlj@Sn6UBGywsK0eyqjhe$FAOyz_In(*+F)=YoBvX}S%f_l(EY_3OSu91- zd#SKy2cQu5BG6z-{vJg9cf&6t`U?b>-mZq_lJAIMd3tdgn_Ooxc!57d3CT|pEm~iT zW;|BNDK;AZ`W~?xf>}drTksIn$&1yBrLfb&vzmobsWXx#gBi#}ezI9D!A z9%*WkBf4zyw2fS)Oe;r#KtBQsk?fy)?vw-&cq5w*YRMK)69j2C0?C(q@hTx?G*!K@)b(qcd&Z<_Z<*CLnd3F-e_=nE_w>x-Sg=t07MvU{a~;+uQs9Uzs!M?(6Qzmgql``ML^EBFp@1s$V??BiNex|6`8(gh~(J7;FZDh)@dJUl#Xc23q#P@F=!Bx4y0#vBf=ts6WZZuP-$%lVO$CFhw!jpw3s<2gBM z6S*InjAXX8ek_Z&oTy}Ias^a^d3hqkihnUPpe(5n&1p^v?z*(;t?99#WAX@+PmIN`CFVj9M6lW zvs!{&FOOoeN*3xz`UwA>q5XD#n*PO=jg?4;r}@)Djd@Yo2?Py9=)2yp$qu{i{~E8J zm%_1h(c+5hxZaUT;Apv}D0=O63fS4E<>>gB36hoaeIEk79}Tch{?n4olp%Qs5!Ja^ z9|UfH?HbOC`RHfYUvb-44mvkz^Ww7U)h`oWo{B$v8clVCRiY?m=(Yyq?2~z`ERE{! z>V5vXZW3Ko@vnl`l?DUFO=dcEXyo1*tcsn}`pXk&c)4sA_@W3f(l(h$E7 zV}{cKbykjY7~T=Gt@v0BZM554!%88%KTVr>JEj*bErzk8bzm4N)hWcYOJQHA$UV^2 z)pda2=sYwg_j5G;m|bTX+(6EV@tnt_qT}2{SM?~xG;seC(eSD5DL8$_ydk&S1ZR&h zZmH2;s`cqqtWIs!Tr=BBx9+atPyJg1Li$%xRu*9&@YZ;g;bLzx=mP*=hnP5#=Uk(R zVLKLr>E)vKYdAbSWK0jeS6$t5TU~v}<#1o$tXNkn{iv52iuYF39|;9n%uDdn?1^W% zvUH`Mbc0ITE;-NgSQ{gFX?zX&AK9(ADlA&Iyk>>l%YBea$p^JK(36Dg0a?Y#+c9zB zmf)7==FPeFo|4MUs%N$S=9`YrKsr-;TC>Hl@rJ=M|C2Z*vn2=O?mgS>k39R3+BjZh zsng*3XJV`JFha`@R-M9;Te zwQ`lGPU-wTbLfAB3jRG)5(-+EKJ)bJ`w&QG(%xi&;c=_G&DAom7q#V>g_hxLA9+{H zJO=FtaXfo7MTS@edarY>CI`mJwFSq6ug-{A;uT~fo6!~N1AJQ&W(N@X(s+Z0V*w=4 z56S2np$KU5CDASy@Ul8*{>{euO=8hx)C)Y`k2eUxxzFTD->C;UeUV?hu9-3D8`U~H z560BxLk+|RJGBSs{)9K(ZhVcOZ5ojVsv?;bmY4rpGd3}yFqq%CH5@6#V$@F}5ltBj zQ40pPhT^v@x6JR?zIAXPr?t42=$Eq?FN4*}KSc_uk6A2jj&LM>e$ja7dPsQ5Tb(+g z3-_n}frjJ-OO6pwr}m-OlU*68;K?s4n$EQxzP^Etc$Q1v+axGqDb9c;%_1yH*#g@gnIxD zcDqqRX>ce+pI$7cU9Y~glGZ11ygJgl1C{>nu=w}!6X=BJeP1aI4^jTYNQQluimnv4 z1`toHU1~nZIUO7|s6Nf;c=M}FL%hd~oWwj1()0E^J9JXM0Vh`!OZGQny%Lsa&Lu%^(Ug|8@O+Zxoiy~ws{nz zhBB>AY0CZMcKQbhzo2wbv5(b)peHr+?ryIo`!0_ghR;`m&?{}GKF8lBi2p$Vw!u^2 zWZ=|U|A?ZrIHnR5?S6SKUlFAH?j6daGWCw`SFqc)JQxgytq9cx2J^ITtHZLtyt%!t zAMv>!zzBX#`yY4cSO8-%s(j#p$oi_y)YWDd?>-8muQ8PsW>+KAo8 zV`;H6$sGGbf(Hg~JG2x_&pZ7P-*bib{UNou8wQemoNBR-%=SZTT{uW_afNzA7krq! zYqK5RR&8=q8{>Aw^{}ld!mGBFzCS$#LEn{JcT>xyqTT=agD@5+se~AFJgBBKtv<0f ztE(@bS3lZEISrE|WryQA`hlni63Bd6$5VFh+HQ}ijtyFXVM@Ic@5P9u9Tb_h2;JAMlm|tMmUp!l$t5j!be;gj}XG1-JDB=%x z1BsW@v!M>I4{C<}Q^Nw0pAGelzCUt&5~AnEqgasr*@KWN1fgiRbNXka0`A#R_et)T z`kS5jn<4doGF&7qu#lM}PCOWv`fH=D`a>-!aC}UVe*PCp(q7AoR-W*e%SbN~%5Pou z)$sbCW|yQC{oBYYqw9aa3qYP=<`}py_Ro7*0J=h&#F`zH75v+@~|#KDws%K%@dBh3=59 zDfZ{~HucrQJ4{aQc9&Qhx?SzqAxQz`wDOSm}DK z?Kqbp`?p?Y04N}`Ef`I=$#Iu~Ub!U7(s;z-%a8JRFeVoch|iH9mgA32RBwm4g@#2N<&o$ZSjpRfCi`RM)-%*}ksDBXRvo-7+P1QTIq*o3VtawZDmjhn_13)30@@&NY(!oI9CVf`< zPZXayv~_6;7e!TB8HVC|Y1Ln90bRthCYP;RlaX{P-Ae>;(y!eumkWb}Grqfn^Hb%t za%FAHN%16B3k+o}M%A$dHmU6!<0p?B*E{6+n-B~S(dT4gqCv#jRGEi8DcTS9<>RVE zlGLCzw%lDdfH(VpWL4g8r)wSg_J_V1Bx<64Aj}}Z^^P@Dp!m;(C z)}e$#s<7J_Te(nC;#4t{^-)s|5)jLFt}?ROzBDg*Qn%u1b(oS2V8iID+7M{IeN#=f#UX0y3UI+V>1x>$!GB;hsVv>!U5 z*Jq!<=T|gmz~Z>+wyb0YRDZZ|Fa(Y=gCqZPUHu^aUgXMg_|ljOhH1;e2aZ5^z36jw z*ABD(%Ph9f%4MJyMSRTn8P^*>(gVx(4r~o!ZZD>`;9$X@6^7#Ji7k@%K*J)9)h3id zXG9XZcNQmSXXAOTuE%MMD%wLP6WKqsJwn=&nU-8H92S zrk7{i@!`iU)Hi28?MIEw9rvcSkcqj-^hG105cZa)yC#I{e1a4gM4nxPUcREM$A=3! z!l&!rj`E>`3soGmYI_j0FIMPhpAyv?b@jG~T8};-+o>AUnd-N3Wf2ibL?;<&ku96s znDjk!9cvvvaG!lo2|Jod>|PjexMsaYecnsp5m>a%WQzMfG{3dP5PbEs2DIDOqxlvw z4@mZL*^K8dzOj|>o z%k{z4L!^Zo*E)gjgf^=TtYF)%!Cks0Av_nYnc{~f(h;+Ro4y*3%DJ(>;t)uit>y+cQO7xgL!$Np1^WV{e)62A^bb7*)Ikt8x^rtbG6c@@`mxV2vG%8gc z$JtC4RS|pA3$M62IomV79X1_v5g20vJ1|>0M1dGpkV?C8p-YweI2BrE3;KVSXxJ}G zyY2?on4q9rudb4AnbSXKg)iAAX!eYH_2S?-BOtDg{72p@%bno~=g<4_uBFY|HouZsI-v*nG ztv5T{AcB?uibk!5w;OLz_wTWp5;%XzS?#H1U9q=}ozX(Gk;BG$J& z2@lctfKT)uHQUe;R5%{*j3teZ2A3kW9&ua-9p_xr}{dIa8`Z-~xT zJfwL%*ygyY|0}NI2n%f7-j~pUr(*5p`G`*`?#62Mg~)z-ZOPGalRCY>;BB53LQkMb z%3Cpqff(j2P-`|G(Nc|qm}8zE_p{pBZ3>N}=BjC*ur-n_HW&k+Mh!Slau!U%e7ruF ztDCU|hg%ku>y_V=W^qB@0)oyMIqMhc zYzF~9z6muL8N`HUGWaE{-Rv}=>vYL(&L)6OCU>XXB}z)mmM zbW$uf17dj$VIr)23Bk@U0IS2C{hegUPg<+i0tU36nkoCy>(C=UDxg%++lEc3naKZVS)uGKyW8G z1Rp#&1Pc}*I3z)XySoQ>8{B1Z2=+DibKW{{ov)s|s{cr+p6Z$1-D|JC_I3T%U{M4= zuFH8WAbc?FZWD_BxI2+&naG6xCIuA}gO`6d2xqGNjU!r_5?gNP6%Ar+6XfWZsK*ev zD4JKRK$TW3E^&T4{y7`&r2njD&H~^rb{^&UxLz{d1Z&^>jb^G>_;^x&N8wsF!I}1V z_pY>rUjjYwdwei3AR$B8-))9tO9Z@E-dGm3fAul$I1CB<)j z{Ow3{)TRZwta0&=D-b0S->nWN6*oq|5mi!bO$0z7N}VgeR+@;jCqc}m;2rix1nh*c z6|IEs-})`O-kUPS)S=cJOTdOn<(DGOs!&E5y$A;_5EFfoR7D*gB&y?m@INy}9PMZK zV$UJ1#vr@7)sCXcBe#Q3QMz|N!z3-y{1>Y^U@zZ(7;Ymzbg)2+GZ!w$Q#oC&l;^q$YJbS|iI3Uc<82?AMW}<2 z;FnbS6s62v_S+Q_gFw+tM7dQb(DV9pBFoPi_89Vky!EY3i*_HQZF6&$i2s`_YC#%+ znBtMjTokd}5&RkB4cSbt5;@zFDSTr_llwuchSEb33vNR#o|w&a2}@+#)0;k8ckz=z z=}67ps9xdE5=`MXb2Nfl+annw8CCm7dpwr!GM5^9UYXa|4k@y7al%?3P2K9U_JHXc zExDbB55F2H<6;a7yk|PNg3quk#gy9TA|%J=QI>Uu7x}Oym`|v=LRVh=p-iXArpUeJ z-PWLbv5ed8THjCIvD(>_4F2CpP6=xrDC5FKTI}Xl^f3~TP=7VH&^{nEG8n^?)P!6W zSjDZ@4wHuL1$+N8rk$^JOCyS+B};zwUdEdWOwd~(K+^d^ztL4EG=>B>@2KQ|r1eg5 zFJvZ;7u$@Um`c@te>Ybh!7K;lJRwEweqsI(e_S8Ded?T1!Ln&w!4;Ay`W^5{it16X zfq|wc(Ln{$rPuh+X{3fWodZ`Wk}yWk-P6MdAMV@!28>eXV(@E|4Zg$uW|En}xekC# zGhw8hVuuDcGb}LB!{O`x)HU>>v>=B&liPWYlSQ{W{D(@iatxK&w)#sMoIRjcy7gNi zZJ<0B`QZJEhSYVxN|2aZ`T^|VJM_m01_vsW3fd6oTg$z(Efb41K%@YN7Y+)DXFVLX zEkpM95ClZZ!9(8}Uuj?`TbPizsh6#qd>$bM?LbEEZ=JW!2$z2ueh9p9<2%bW%pm@$ zo5Tu_dw1C2@=mUm6_}+b?QM_<7xDAnwWf;-4N5tkn)V>_Sa+=!uCorux)?P4<1{Qq z1+?k!9`)Pah>8Uv8F^>o^+X=Xe>=1ew-&uh7}uqdxpTRJ;Z7rqsa6P`zl%AXx9HD) zQ?x9?@x*G0LiSG>VStAgLc6U5#)&$|0&3-yTzBlQryTF4q5dc7C3WMZVV{yxjPf)i ziM*WE4kfMnG;DZDnR+8jPFuJtyPtP{R^@T!IHgXb3g0stJ^Em$D>di3+4{T4wUvl+ zkqOvtf8B0A?fEefDB;0>8yWF8vS-;ZA!e@IPdSH@li}yPt#?e3WQHl@X9N{^1|^EO ze{G+66jK^huKCIt-y~*!M~;<)!97tEAZkzMXvJ1e%#M0+kj~9$Gxk3XrSixI zFK86M$WL;&K}3B7opsK=6v%M?D3ScUH~|sC1!DqZ)o%rP`>qduun?@#AMc^{8f}Q6GDb~t^HTWi#wlCMb|ki3?c3s zSO>jE=9pE@AOGx=lnGjM&t`hZu_Su}UvixzV7cj9?hC;Hy=#E?)x*ZuvhweeBL-<- zu{6;CMz~ULDH<%-UeFyQ_uTKxR52z(oz#-BbTrB6x`{k}jYR5hM>F zSqtLq_6{dok5*&)XX`AS9j^M-(_-_y1=k8KKCKxu(|&NWJ~|(-*Xg~d^X9G^8)sJ@ z$x3heCHdoo!Xx;3`HdFcuEn^mRY-6Mx!mCH8?ShS16H{>9!8-JSSW7b6Q|bg<^8D#WWsv9O91`}b^&^R>;M(!+r3ibbwMAll$%c@Aq58PSeY$xe2}lZ z$&Z@@KYivabFllwFU)%rm)ocdMp1CKi&($qSFQO3u;N5N&&26y%}|N;OoDCgC__&C z)&|@6)Qz5=9@tN2gP69YB%q~Ui}zJJ8>91My~}M+?Ls<^v82}xtD_E@w$rta&Oo;E z8PPQTg>Wv2yDy1W<}^yD>VjR6^x}3k=qpK2Du6>9o}vAqv0GX8OYx^bg>>+%|NL;k z2G!8A85@d4d>>+ox;$C1M=rdCm|n|?elxW<$&Lg3Qia!wKrRM=0U3j%@_KHJ-Mwp=$m1OG{31SK35qD2sCVXghy z9$b}`urw_w z|8KE~rUUmAGrTM!V#W(PsR+;KwbB0^z@{>(A@cFRZOH?%5&B#MJGmPw{#WV5Cp3VF zMvTkzFBRCYlJ`si+|dteWJvk1^-Tqu4&{%@tqvaYMs<4ipASi6F8VE@oBw2|UnNoD zY72b`o__?*N7Qn$XwsP10ECam1m9Tid-;h(88D60>?7ipt5OKX3GRn`GW?U&`oqT^ zK_Z{tLPGut6nyY@DtW!pvd_c%Ipf8mx(HS&GXs37uzb{{+2g6KL2iAcO|HHHU&od> z6O$-Bn$}DHx&9zDki3@U?qSoL!bCHn!fk-k%7O{>?@EX zK9lzrix{6b=pP=Ik8vEsL}b<|iRT}l3mJNK4$@bg+spxdQZ(Y#`4wnIA20XSf2uQ* zp5N}|EaWBc&m;k$xIvg&o@o`j8oP+aV50Ng)zM4pQG^ZVfcgt6P!=k4aP1V2H9A@& zvG+;onivjCqy$IdyH+~l)&pi71nL%QF9;K!e4_TxWsI_Lxua{?J9Zp|+?&k3HQG%1 z_wU9G+T=2L=u)X?edXd=>dXsf-eN;SsEYgVPmI`ILL zo1fa_xs@K!R>4;U-YhvJZp}}tZxVyofw0^UY=LfGr1G5JYMm_r_mc`CV3wROewK{) zYj?yn#!*+;GdYk=a&@Z3`{Jwms2Fh(5zo$W9G~s%;CYSBGbRvx1O-;XnldBlLKc#3 ze)0TDWEm#_)R6mdBX$c|qk1(--JUr=JwCid>$x=Yl3%e~;GMdSD+g*w7Hjd06Rid! zg<3zqfT<)HHL6dRbn>^fprm4ru5rVyt?N04xoT~IT4QK%y7;%*_qNl}Db;nw?^A_a zD=prY*IEAN_ryk40pzLeIU)PmilxEkoT6TbDVU^OoeR{4l$~bgns0vt95>leEUMQ# zBN++e)P7dbpR=_5{(OGT4DWN@hHCA9KL8>S?s9*BPoO?3pD6e6S*=#Z?H5p>m>BFL z#FGn0{NDQ5IOX~184!-vR4l$BaetHd`e`efq)!dl#W~eD!W8#b1NJ3{_C5N4$R~v2 zeHkkDy@~1zZpo?VEii(zqEmW_Xf8gsn3}CfSSqG5ee(O9bJXN{{_9Zf1UmUkB{@5r zCL_kZ#<9#${n>f5802GR3HY9A!mz1lJa1HnaUo>>^lx{>Xtw(+e&k0;erIK4FbjIj z4VlbFakd>YZK(ewdBO3f=7TjWe}b!9M*1PxOz|7HI3NWZsn+6 z<_KEEeUIOZj%9QrGn#&hJh1%aKJfEIBHlYcZ)JO9bA@sL-7lst#yAfzgX0VY^35fI zqpdXr*&U1zgi495dFDs3-wc2LMumsv7tJ6v+&`!`R5)c8A7Wd}b8ja`m0^D+2w@#M z@}C{Jbqs=LxH0t%*7XRUvfoy+^2ZS!I{mJzea!Z-v=Nq4PqyAwrQ&BFK6&NWq@}$# zfT58Xg(X2yrs%nOb~f(3QPwaczC&0xe9Lzt62{+1@I}e*Lk7cDwVlDX!rA?nk~_P6 zI~@?u5JO&F`$Wc1qA#Cid=~BaZFfYa%Pe~X^*S78PK8f{^WS({_0BPq8cj;el4@b1+>Toe zVpsLQu6yQFv}{) z#NAxl7hsa*YR@XSBHP(Ay@Qi#o1X{QeT{CqFGKSUfjv_5MX3MK)~gRcyrzrJ_Ft9t z1Mt26&YsAh`l;ONzcg6(p!u;xI;RNN28{huH`)&eW$POo^fx);>v^$1pzQ%`Gql`M zH1Ih0s|XzvdY(v4+~FP8i7#=udL6P@-w1lw+BMRzw&#G?kB;ooM6Z1GfjA_!>QtRi zjYG+Ld%l&Rkj!B_jz^CS)ae{+sJZ^++U6@a_Qx1B^}3F885-J5bA@8RMQxkaOan3; zWR~KEn=eIw4t@(ijm;-Zxyd0FoP+&cU*HbQn)N&91m?50V% z@$UhHX0LydVFN(*BlPA^J|HzB|1mPD4tV5Cbw0-~`#{NF6}}Vrs<-Gjm1|#ASr*}V z&ULmrL)eh_*5aNt)&}R29DZH=HEfWjI3?ZJAGho^5@Y|jJ@uWxTlc_f!Mh2&8e+Yt`Ty- zz6Ej_uYQVVydtgA*C*8uYzm3jQV(924E77v&azks4{9MvoPA(KNs=&tCTdky9huB7 zBpPp$bn=zUylcv{7!M7d@O1$a%Khr2nrF%yBWbQA_f`*_iABoawP>#yO;d$QCZ!7u zo-YB$oYwmq&z_8wGe5%$sX^8N+Q_1voi7o~Fz1H~y!XbwQ?Wk!8+T&f@0_;WqLN+H zHzu7n7!1Tpo0O#cKZ_UHfBwMYXAWK>DOtd-#)a8P&rw2B zmo-d~l#6S5ZD&d*-gpi*@&L681x$&*(b0Do@88_PcMz|$Khh}1P>ShVlIA0tZ(yM~ za&F+x6#9Dm4j1v+ngeS_VMl=L;YNOSRH75;n$iY{KSOOeXi3Op#iA-XrI;4hKt8%oT6;U$q?FkJ2y_%wx?O z6q-seKN@MR_x*##<(cB6(11T!ka+xhYeRX&TGBDZabO|fW^^19J_#zqDBvgbqk8!MCc%dqj)zP z-UPYAqHw1z(K$!Fco219%*3Qqki)xoA$_QDmM)i%R~0rWWd+zja5U2*u2tqpFU1Al zM#oFaA$gnx0cGrDxc!HbYI2A__-sICBJEVm{tjR&HR6D(I}((mpP6_1&aotmZGO@+fj0>nKQts`?KENF2`l|G;ajo7biIqUy3WtVtGaiy{DusY4tXb881qpmIgcU zZ|)DNiVS5LbTTL6Tl99XC%dhA6t-uK-c6*B?t3Aoi|wk$_B+f;uk#r36MHyC((AFG z_ff-Vp6;ldZogaoLOo-oF&Zz&*A8Ml%_En17W28B9_8onFHuX%#{*N|Y~2%3SBu_idEULtgscsdE(b+JM>D>#%g)}%vC zx&@gHwLd9CBhILEUMhFwG~i{8dJ0ILfd)FM=R5CQ>#s(%Pxf3qd^*R+i|(m zN0$e$2Qczhdt(8yZgc&{)~7JmwgNJAw3EuHcT3s83h8Z@r1nvv@9ul^(J9RbR4@vW z)Il~6#*q!)bSk0~zTt0B#FN-3$4+qOQJ~A!g z5l82HJ2faiYY>srg>t_CCyG|R+Cu7IGK%u0rMTc0JzzKP@ffbHyaW=?X}8~?g|@{R zF8XsC#~79IMtKf4Ya~n=h;S&xI7rfU{o=JpxFntyCEXw@g{nX}taoTJ9Y+Bc#C#!6 zNVL%{-)9mJ0vSKO4)+6&`M%Z!_nNkS45*mlhyT8+HkZ?;3@&uC zV247dM3$@=(evIT9TCd#(YPvt30qN!X6~{*{lT)BD^M5;SR47niO(Dg3R3u2h-|P` z7`9|MWQ|n(ynuWJ&8am1%(%AzRb|>;Q-hu=>dnjRfy4naB-4pyHl>$zf+Y1k!Hk_A z@8LB0?SS2RFCm?XUXmWX%ryf7sFA0}9a``1uD5bTg;m|^Y4nIZOj3@9M8;{=koE-1 z>WWA4nyl^WyBk?z*oFcD2YX*E^(-B)Xcn#mBGJrAFsxOt=0%ZA@(&FtkD!3C^=TT) zDB|nNS-iOCNS2aj`MLy(N^%O%OwoL8b}>qLDFSb}LJ|>(`wHSHn3G9ZE<=JJEF2he zorW1G+`U;mTRH%!1~-2>f0zF`0@r1U+;%b+5#fO?>XMhF8hfJtfoR6EQ`7I4bd;oB z%}6YV34fKBYgR8rc3DHSV+Ddeb;hmHHyiLpLTv&9K(1$p3ak)ZH{tpr)`F)4=7 zt=$$yb%Meiv2Tvl+GWkjEv}6!RparE`ewccpaJ~+p`w;w73V9d{;rwk4GMdVkEasN zI%UkKXbzUkNs%yg&~#AZO{R<|N*6w<1vy5f@9OlVZaSamkwWn28wqbq`26>my{COC z6;Zy>*|!U?$LVr3UZM|Z)s`fU$*@fPdMz!*swW*0&&X)|pb&zd6VG_pdV;y}bU!le zx!iDGYQ}j!a*{eKa?-Ms>3!S+y=&bOyY|RDr~jq8CDxh2v!a-9ra@) zjWl?*s4*u|aYa1J|5_4tmO2X2dL)T1R%Pl=Q{I#pI&M+5j_79@3i`H8=Y-nCZA(T6 zN)0XLlh$V?ON4cP&LJkpN?g=*4G~DC{2pl!LS>4fcBJZ+$P~nt?}Zs-#_G?}5NeLU z0B<0yG+4bZHKJjUi*dU5ODk2W8@e zOk{0>h;fd>18yI8$43mJ3j$5tl)+uQ7WM>h%xkfjMbmL6&}7H7({AQ1&)Ohsa4U#b zR$@O}PB^=-yDR)=awe^Ax;7kpvi$#IiK$6SBfx@<*Do$4J*{piC&R+9|H9ycNMNB} zY0tE6b^d@r;i4CY;y|keMNVrnsxf0~rIgi(-*?|;jAp$17BxFIP~3vO&-ftD9h`x1 zoo~&2S3|Yozy^r81bHklRdld{hl`IKdazZ!lGvZst!CK+QPc&H9d0RHrVNO)_yEj{ zd6~%vNfpbb8sH3{-I!X$GGT93!^!W(BL8k?Qoui0xnfg*uhu#_hK6>hEuQHO+6#)*nYVgcXfh|iSlr7_x8?bX(^ z|L{iCEQN6YAp^`Ab+!lQ^AixTdB7>-u(V`}3AzhcevitE0QFMHjF3>V3tG#excW77 z-j9KR10kYQekuO`Xu}_;9IFkN!`9RI=+U>!oeV7)0S@xm#Tox6OK8y%^lm&9>^&U% zM8;#2ScotlsWUl;RUL3Rf$igl9*%=SW&wI5PgnbCdRt?hhLT()wp1A z*zWT7IMQ{0^v=A=u$?VTxMd5-LlO1u0A1F%?I7M~cKAHh>f#teKzaCtfv+HWd6Ts* z;D&F;gXeB+FfyENQaDi)h(o2}fp%X3&As?))#tdZay7Db>|9|)JKNUGfkR8oYw}Um z85+9{mmuZcmD5}vVRp`m9-+$q?Y^eAli+CIqv6r5A%zz?C}+0!OLhYM6E~GvsG@Q_ zNd+{0ngrE3D4#;fGh2GQ`+A%QlKsC8lc~dfI~ZZ_&2xvA)bUjZUXL3w!> zR`lV_Gn_ksS>6^|a)}zOvSjm$2;VWO$oq&dGUlPg=QAEuisdS`MOe{& zCo?%fFQ}M=no8l3J-1cuhGQQM^jcCTlQN8X~_>SM6&aRabc#aTf^MVHvK#v_lDf&lH3j*Y)Ow z9?{y?%a;YfInJT871J0|9()rO`UMX!(-?O>P`4qp&!%2$hSf;PA7xmIZGwpD68kWU zUIdP}FL-apK)qmouT{Xcjot;WnM{}JHM~p=QpGF_FWzXGO3%d7YA(OKdqthu4Et1z z>?nweSgtL5@{LgW(9O7?U|9T<8EGz(XjBEYX>9}6$^aJsohl&9?@@vay5+%tU=>%Da(~XLqM=_@(Q3ZdCukoLFBce-tUOd@ZMNcQ>iRrS?dMrj;2Or~bW`@;^p zxl|5bMv?7bVwUMmMWULRo3YSS2jfqz3G#Q^YJ&~$WpYM>uN@IC`$Il(H_xk<(P83J zeJT6k$R|S9`(=2>jB`u~(e$Dc8?Eobhpn}1Iy23;?KP!D7f|4yfM?hKymzwV?xfM~=BiB<<&L!%!EgY^c@&K_Jwk*;o*} zThlg2Ux9P$wu#7F(f{P;cRMO&zFgEjXw1aQQagwqTiEMphiVT92B2?fZArVTGM20h z%xRZZAGA(HFtOQZI89NcxP(6}6YYuw@T0I<;C?3Y(Qk3#S|ddqc|8lY?*`lnu}YtE zXNrj;m<8B*Oo%|&{AO{*O09WAmW=(eU$Jhf$r5SocT!~k2#acFd}C)V6&Li_uOB_* zrd4K7)U{oPzPb{wL2k#-Jm9VJ`H41@7R0(Kd7syO>jZUoQJ~!NBd6RK|1cqk#D>8 zdLQ0E!Z-FiqP*W{_q^yLl&avk`Xwpx1bR;rO46^)bG@Zs!o0WpWqzNrbrQ8zXv#&z zHpDBw*gaXWV=-aq4qlktxNr7;w|_OGjy`Bs8nt_6d$IAWTBadRcejQL4fnLs8`jnr zi|yr^$gpAQJfzMZAjSGFs$HsoPWg=D zs-J~*3bNA~LBWJf>QrI*^2YyB=pp0HUP5-1uymAY#x_ZjLv&gkdntSJptAqR#0<2E zT-o&c+0F4oA3nhiu}l898JSJGjB6?F@huM-9$c59Nt~{~7Z0RX_yE=Q zE#uFQPnf{>=n7krO*`LkkMNF}_ru56atAXX$A!p{&|r48p|s<`%FSF+5a$)a#&<3> z3PfuNc+t#6qPx2r%-39FysJtf?plDWYu9WPB@QPWJo#DngTPU9Rf2#?mgLTAtQ!91 z?ns`Ss4${e4+if|#%Ec<60Z4ES}R zz>TPH`;%(RlnDu$9ra4k0~^1{88zAuZg|*P$Ohbk9IO- zWsq$*2h;U?hhBAEOiEC}uENVJH};i@@i!4@OP?gtPv>zf*-6f?(?Pp+)9%04>blU! z$$6Wl%d?oTZy7y2kIyP%t|a`-mOoNjwvT;xOMD~yi6#iPWF#xCBsK=*?ZOo%{d&7H>?i1{ei;2i-=F2t7oAaeTeCPYJ6W>hp!-)D(QYkI% z93onlbmVa^@Jjp$10hr1pC4|pM7Qs_dVFxXMWbh~P{H?}*NRa(q77>vLM`54pT;Kv zk#XI_fjmE+kF94!_Bb9bm~jE6*YYSj%cjs#!BxDs&=g0%s%Gs11Ag=J%mccK&i`g-FZFj$vE zoPJj?jlaWhG-UOIuC|=*gfZhK_KHIQW(C7qVF0bORXw=7CKKB#c#&3jW$?|glC4&I z`N0+C4&pdM6xT4e)85K-MCQ^8wsOVN@eqLR2uPHFk%t58WU#?0^dM@M6etixi`7-+ zGzZgVPyQi8RC;Bzz}viGf<+}fig_|mvLbX5|%E$_Wt^x~MG zJCb_`Sm=>a%u=63~Ipb4;n$_vSEwxx}S9ScG~;jcB;nIT#cKk_7P^ zPI^Ejg|H}{xL67Fy8J|3gHZuiOpc|r@l+kir2R#kSV5Psn`z@HoW-4~YqD3M89CMZ zZx7lSIAv|w*S_8-hwcY&qTDcvW$h-4$XrOAV(cw*E*rrlxnb+f@;&9A!Sm%^`M}Fk zYX{6`g%K~hMZ4E~!^4b2#JW*KX^HMX*{d|LrCeoKWnxZkcb$S32{ZK0t6i8`K8pCM z;OAUfkoj=Y_yZ z5b}v$A=2XrD}Q1mv945=py#}M9W;uqjl>;Qx>uBi8#UI^9RWL&*~`)P2@Zp1%qqae{z#XM4ZKz%bPgWqWnXFh2hE}5GWSvFiLZwT35 z3)Nh5%#VpE3zSjxJQX2eqAi;)JH=B_hdW6`_wzlXOo?71N|{J-o1_8G_?#C(4h3p{S?fhS zT87$(E{W{c%1*3(f%FglM;Dz4%==1;?}Aa3MfAxMC`_p9Jjg`18$FI}n%6!lDjJ3~ z;?Qd!!gLi25VTD#MTwafB=~Q~C;R)})qwgqaZEEjL5TGl zl_VrAne%mu3#<>-a1$bgmFY{;5m^7HJWLbjM8>qzbyBJnHcKR$fO|r^Vp`t^^t|J_ zh7@AM^F;Dr4_Y&w@#=H{8OPoOmOlY%W=8E)SH^ zn%E|!IgDd*p|yEO6kVIX(QZEwMZN0)bFuN_639epcwIH)7V*{r%bzV7hlH)@obp4v#Ln6rFFA!_o__V3&WO_Hbf|v zk9Z*NmvP((v{M?QMZgGT`dDJ}9wb1fzp&R&?c=yg6U5(p*x&?)of=4ryl7Kc-98b) zMOWEwsYZ-pPb-vi;&B;6z>sAY7G%;Fx!CBFx#&MDV z6!(5{)`}!F-5KK4SsTj+Yj0LlUtO#FA$L7$@l*$9)cc9tTSb`AzK5dVlY|nh6+R$T zR721$DE^C5t1VWNT9ZBYz(LtQ?e2Q)a*Pn}Kq&jkN!M|6kr%DlEo5p%3s-=PL* z$IQjOU&X!c+S2FSl$=*^XL0u|1sv!CFzCL13|SwV)(Z@U2LM!5gqS#s{91&~ZLn-H zN$MF|NOoK@`{UI@O8aSX#LB7@|6A~fi?J|^?$+QOj|DHJF8UFp+X(b2L`zKGrsZF^ z!dZ?rIU#7WG_KieK{CZy5+>I*7Hi9?p~%`Q85Sh?Q*JiU72X(R98x-8UM#WW+Sz4n zBm{-w5`Ag0s-}WjWYM{1v>r(I=kTD2G~+qPKxIVuF3vqe6$yJP2bu}JwYlWF%=w5X zpw5MdTR-K-D(nxE1>wwd28Vpk=iL8gBAkkiD6VK8VKUagLD8AIyU7QK6OociC50Gz z+`0NE2yMg|L^6hJxxt(32QG1mmCRl#0V$tm+hMuEtTM_6$U0T$=J(=4$1oqNTY>P9 zPBW4X#taQR1UhS`ZH<#TQkuM4rNpQpLXNvY$YBx-%DOzMrb0?N4u?MV>*MzyiEd*N*@XiX46@b($8=(^ zK>JjX+)fy!jBHZX?~nYu65+p75a2sM7!Z1&O8Jqa_ZfMEEQU3>u&M5WI1xx1Yzo8) z*UC4F#d#Ta?xrfPhVy7LN1pQ@Nw-^x;rD8Jbg@eK7E%u zU5;HKO1PVXT8YIzZ%leogl=h)eX??rk~PmmKTt0%UM_YBZ6eM>sg@jngx}+QZJn=& zWyTNuhcznkpP3_^;PZDZosxJC!%8WhuZhuywO%3$r!IxPP?tUk^eXBshNeV?17Od)X z1*4+(X;k5s>Ve*~ZFDPbb_CmScE9TFcJVykqis0xWMx-sQTL5Vg7r!_8->?~hyX4l z6+3NKZw*u|jg^s8gP+C+CfkDB+GHx%yOoZ37(J(#hJp2ij7~hP;}zft-fiFX5=oSfE6pkj zU+!!!r|#CLFUl1wGwjclKfkC)&HJ>QkM;|aSh3L+v;KPt{~)>l@g!8?SlB@9Gj}FZ*@a7+#Jf$Ueua(`GlFh4c zKl)p`=8D_ym?{rmT`$P3DVs4^{=Q$#jbK(j6WD7P9cQ|QyhBbNLv1m>yxV^pHgtuUMc$GF3?ZNI)$jBlOGknH< zuCC69{}&b0kIJsj<}EWav>zYglXGLRYD+QsvjkR9g;Whgi=_ZNAw!@;hx z1p*&vzz;|&y5aRJos6q+pv<19J+7AN3J@De2Bm_udUTsIJ(WD>g!?* z#c2YH!?4XBRpXscIv(PV2le8RG};*v(cO4cV{{o3{-e@ZH7b(q4Xn(86+Z;{3~+f= zyz}vhFU|K2U0B+xA1n;=;!)Yrai>+E2~L4VfB(I=7^E)2YF_?j#^Tb@Zg`i~>!?7N zuqL!As_xblvo3?!Tif&04Qq0I`t#;#j^pz#Vd1|p@3l-h(nZcMh#6KSZmXpzujqrLzj~i)rhM<6wPwJ&{K%wK>hmR zvHSk;!ZXUF<+>t;TWE+ixEdUExHylQ`$Kw`G;yx`d&h@K zOIApS3B}JQqC6r{!GL{mxzRkB4{gNcP*oATG-28D2mEotKQWaHC>lo9e!d9`U zZ%ygxNC_(`Rw+yy>%5gsQME~2^U0F&TY zCON;L-32}ECn?L}S7h2utf5uY+hj0tZ3Bh#0QMr8ls`<+Y&$$KP&*BrSym1`3kI*R5F ztxkz;`)z$%8V2PvI&5@Zgnjd4zZtjv9~MAP50$2hYBV2)3r3%x$EFM(YTOGc=T&L? zfFF3qyAeO)H~dVbUx4w(yZl+i-gTnWa4>1&$_>I2G~5DCnIqTIRzzLYH)>$%&-HJn zfNJ%uUy6T;-L>wc<;WzQ703jRx3XRws6YAC|HCVYe@DY|`AY0d!n?G)5JETzms5s+{;<+NAO0WGR$++bTN@#@Oy+;2;gV;d`l*Bvrcs?Lf`2~Z ziKw0RtJ%Ag2f*0L`66m3|7!K_W5;!ZUvs>|5{r%q# zP%9vH4?AhuN_v)s|F=U@6*vneBqH^{UhG+#?(?jNhk6ga`d8I_HY#uyI{rWQ*Z+FG z8$1AL(R%&u!@qz4CE?%T0%s90ef$^9A58%4`H}QFVJnOJ??d$&G4NT|`ciTD|JM}# ze~;Xn0szpsSApCF0+%*O?3;E?_Nn&D_to`oA5hUx2f+Il2B7 zkQ2-SAVSu>9X&1n_jmn&{|zDl&U#~F%Jh6ORBCvD`hb=dxt8>N&)Y2++W%f~ckbl; zUk}A+#P|&0;^wl0@c;Xd|L+4p;|AP=^u}Z2(SHS}#AitUeLe4Tsc@yvQQp4P;5_t* zaK}-em{{Z8gHE`4YbeI}zE|;V^gAER!6t+s`100Y+J6?94FO%teT{b6=Bqv?O#44k zeg&{wEkEQpWVkJl^@VmAJ)W^0u6ydw8aE-IoAU17UatYSJ)mLBD2H?;K^)MIJ04pxZvX)ud3Y2PxFAp^>M2!G69ByJzw})$r_YAU z+L#)xrrv0>e)v|TS(NgZi-}1lhC=N7%dECw$xFvtyZIk>soe2GE+2(*FU#tL7mRL+ zZS?>l-w(+E_+Q6=Qt87e1V6P?44&U5ur-xD9+Z6!lNGA5nMrin85wBxy@TJj{9lw- zIX1-j39V>FHewI1k@H2;Nu|8H83T{I*R85KfoB@m$IcHmv+tPfX}Xj%1!eeNtSJ%s8yNI?MgtiPI+XG!PTx+Mu;7$f<%(RHHM z&9+d#AwGS~%P9^$ck<&1?`!~yN zAn}bO0f5sF9r4-9{ZdSQTdnA;dtF}O>&>?J*o`0m%2HW{j3}lEbT%H0#%+B@pyE}L zE4@|0o*{OyLe%=5f0+WhSbHstnf$7(d18@CMK=#6Z7>HMCVJqAMMA^)j^MfkFwixX z=+_LEK(p8XJR2pV1A;^sec3dcAHBB54U{uQSv;0q%F65%0s9W>d-&NR&^PQkmsjH((MWLAUl)pbsV}y#?JBc1uFP6T31CJHJs;d|kFF(#nOvn9e?Iy) zD-c^lo_zN=zjAfZx*yK5AVB?w-iz}a#{BhI3Zs@YH($yF>=c$gwL8FyV#NE5*oZ;U z!|~N`DlfU?)~Z_Eq$XG2PCcT3P#FISWRl-$pV!dotit9%Z}cTA$Q`>;1>Lw(SaNUo z=?3Gw5Ny=u#X3g;Lpz|21aI_}Q=UX3_CmN}lY54~%OAe8!}lsotO#gnb#`&7RUbW< zd*A*u4@4u<;Q0&Px@-(sj6Q9XJ5FI&EpA0HXI08)de{YhYP=tnh*s6B|76ne*l5eB z@Xd;zz?)l`sPv_Q?%&HjGxb%%tDV6lJbV`!v4g?1N*dF{#X2JZyytk<9$5kay<+h2 zI2^|Rl1SAE=+*hPn7g9U@lywf0sTDFpzuGW-@fg4(>-~DZN#ekm~o{kId2csGJYXW z253~?6M;IPzaj)_#~f(qWyC!jyQ<&3a9e8vhoSFlLTYm9v8*$wPxkRY6Gqely{mR# zfFCp~&Cwe29Sq)wVXEfTyD!&!F|u4briD>|+g74Z)E1+La6es+O6az2C6cph;!TA) zVo|)j=JRWxbaH1ofKu#>>8l^i3!QJvyKY-`?FPG7YSte&GDPc4M2+Gt>PwHoxR1NDT9H*{RP_G;^ge7uCe zxM#gIhUZ?=2aD*?1QKq$l=-C`1Cb8S7T|)#9-TJx_10C1EtOHrNhi+{_Uk@cwbjaS zcsDG?H%GJtd$ldN=Fc8e3!#-_ehrQuh?$x-kwS%0?Mlc-a~%`JcCWWhue6k zLL>ruwq4qAyu8Cj2C5z}tIHTl3DQ6@wKoGqZw}BZ~P6&~+5uWb!MnybMg~^YVC*P0dLoyH- z0hr~bS1zhNTw0xR0BKFY7Vs()qyB2~zDkrM6y@kvt?T^u+JF`4D8I^rz9aP1G~b(W zElg>DJ((+=X|G*RaLKW-0;*WnDjQio>zOJfTW70};n!Dqnl(%UB6;dxV!G3M9C1!% znj8CnJbVA=Wzc2#$^V6pT8H@Iz@R@HZujZSjP>r zy?*xg%tMD1=I z^UOy}E51x05Uo*}R<~f{-m0fGJxYs_t47DRJLLmtYNflu>fa@3Mg2eS(f`cd>f`~u^aN%p zpNycy@g>xslta7Q zQ8vShDeXNRNhl1v6%%I{a$8x}_MH`wgM4$R6d{dWa1dTVsPM*p!sFU70okf~!~$VC zR_>^{dGp<90WGa^;b*g>xeBwh7(e;0eiV<^oj7fyWF96iX zY5Y$n#c}*tG1llBo~i{lfwY@Zx8vVgG!9i_RR2g>B;ckpV0O~!9^u{PTmGfIQci1~ zA)>@7N?kvdZV%tzKEz6F{&^Fm)Sr2>Jv=RV`djfK#Xw}r9RSEK@+y*<)^%0Q+5`6u zHY}E(5L)YZLp$jp6J<`4{+g!$ikfrGrS*7&;kvQuvFFDa#KbkLW@4e%|EghUD<$SH zDg%MURCB{rv0mT(w~~o+nFm*M8b1#zs|7{Fz3X_5mNn$bh_G=k%0^KeoR0t1FhC9; zaUx1JD(tM4kE#pLw*Xp*=9>?0$InxKlW;Iv-U@C#gLRzEp_q9(2M(ELHnvn}HxV<5i?J2g9~lOU#D4ng_291=n)oFANCFW+3zF>=jXQl^q&*llxOv0XTl2# zkns#Y$&l5n&h)&cvD&v$t9WG8H+@J>PV-7kvl7)7j%7NN3Bsz2O*4VN{kitpbvOFD zS^>++c_xb)(&C-R*f1}HAWx3GYBxCAkn@mpYeLI*yD~B zd(sHGy;^QiarxNgpg+fY836x;W%G9TY-AV3$PSzRCV+2Q1SG4wF^ z9yhdQ0u`Dc=v{CFzywKzmp9I~2VE?$%2t}Dm$Va%aAS>|f9k3a*8-bZ>@h~>VT%Jj ziDvuoQEeWRPV&hj3$8Iwaj&NpW&s|UKPRPv=nGtJ#9CuYo-}6xK~i;tGHrl}kx_+Q zzj7Tb##Z%viZA``O*f2O{kV%2r(9ZDwlLBysDgmr5~3j5opJ;jZi6CC_fyNVpHmnLXR?KyJ1T8UsKG#0K!r zmL}UQeqSk0m~ObEW%9A-47QuMPRTPm{g}$MRSE_%%(+8!YJ^y4o=NBfipTf*h#9!B z%Deo_X|phu|0{BcO*WbPrRwK9f6QoTF&+4>QQo&)vn8`-4o&1xc`HZz4^$T!f`a!h zsoaow_{Q{nckWge1Sa=fl=Bs~DibNH)EYpDrzB?*rX* zzWkbwOjIPro}FFd@k~7Fdf~9lnLFIqqM&Rx?)vR^*f2Y~lZ7zNyja$FsKqb&?FzI}b zba?1a;+XCnXw@|Mi`Rp812_3dfv|14h_%n4^D2NIe{S8_VXse8g;~%jdo;J}2_WpS z6hevP+If%_CIM)GlDSL4Uo{JUEvj32bsVm694Qctotv5R`aA~Mknn#b^{zigl3fvC z5K{2_QE}=zCboQH>TI`eFoMuj3m`y1CW*s8W)f~;h2oB|i?73YySrq_AoqqWPIS{s zb=cNcc81z_W*&ppr zj(&PS{NQkkf(qNenu)YCG6E4h#p3$SKofqOwqo1h4(M{!<&MU*gg-6& z)-w5e!Wp1ZPvlzI=j6^rwx!@G(ddgvgOOO-4xbsg{Dc1sDd2KGTj!`&iuNR-FQU$Y3VqfLh_JkM; z$ZjPwyM%CG^XvV%?kDEd5;jw9aji*0L&a+^aEtx)RBH^9*jsgr+*QD4<6IrMoTM(t zM%)}ye7Z%M5>I%y&7np69EADz$4{7G1iFVmu zq|c+J5 z7PoH`MNRIhSW}c#EUzbpsUFbf>m)h^qx5XA`S|9w_BO=5lkH5I?3GLw;H&{i$i+%} zf5I8^sk;rtkp8?{FF05pkfk8>F*HP}4}+w2^uW$sclsFrj#8w0Y8WdS_hP6w9H*sL zkU`e2q0(Uc*y|A{M52DCt(KR^`9ucXuvJ^zw)y_$+0cF=TW??-k< z^6Ot~$XP4LHCZ|hXw<1$CvDo5?%RA2y-E7V3*{hunD=Gh7Kx@{Tau0aA>|=Q?Nd-d z@k~VxP`pwXh}UP@8kkHLM6Wgj@sNb#p@ggEZWe~f1SV6;shhEXiI929L;_c^%2u^ zg;V*5CVuyLxVSVx@fISW3nvH!o3^G40m6V}A`x#-8_{>2 zKVkI%VZRkT3Ef^eED{YNKR{%GG4Ws+pzX1ahTa-Xl3%Pbi7ogEkPP;_;ky%XINSkI ztih|NyYvG->-H_`PdP!&EZW{i=??pIL$B#t^k=P_E|h?1%KlbpdFz?E6Wy}Q-Qi@l z7^?JHek?#du39yG+v2c42uz*rT`jK*bFT(zd`dh2<7ndNV@%U0vO+ z88%Q9%hTijKo?+iKCj8WT{9Gi;(JlAi?Ns>H++Q)`e|W%J zO!?mJOL0&loy>Ec@pfFQ1(4`n-aj(#qPaO_Q@!p&46fz7=|;`7qo05x`_(b1JAy|i zJiy8I!}y_8IX@lfRC--<5vFtay$(uyDzc8&!Z~Lv=<8#W=B32l@SoM1t{P#zuPWAd zJDgF*@j1_d?fiDjsemoew~;Hp4Ui1l79%8=DP{*C+w9V*Q=Bjcya>~4FYaCpczR?C z&HWf3$5mbNGzSo87+&1hAAL0oQ+fUVBHRZ;GOcdL4Kdt}`Cz?5UG2lR^6ll9Q7Rey zNj;EkaeRC67NCTLf`w(moqcF?60z^9HuM=2&dOk`gM-5&1GW>%$Mb0u@kYd74SM(F z-e2bl!}Wr(FJKoRFMt3R(e+%?M;n1!CBqvzv14e_$M@A?7QgY)&CjWTiDiIEqX2eT zIgZxjJ>GI!X9M6~*9hs=xsuLI^HI2;PBj3P*ifTnH?WJC3#i&9&T2DqwpIIB4at+o z<*Ko-jfC%Y?+3w4kMF-aDlIgk-PjiMx2zJg{& z{ncuPUH;td&uT}|9|XPs-mS@zJ=4fvk;WzV^e3Zb&ck+IW}kqXjr#Nss{8C_?f5d`umlhp!GjH`Etkr1bo{48u_A_+4n7J zF1==WUcpEr^rjujIx0-HtL1{Z48ymHj@R!V9-O2Lg7NmECapFmb`8IWajCWnQ%wnAB?43v+Ff6*--TmA3&Lm!!<2JKwKB=WzxY<30iO zSbt`YEx~;jr8?ds5>qOfHH}-iP21I%);_FZxkm;pzjsbO#C9|SeSQfeaNLdzc0suq zb;4U)Ykp(9(BxF!TyQ9B59&fH$2^qU{T^CdswQ3>h!?|4*Ji%=Y0J!djK>fSCq6Zx zmh6|Pnkaz*N{~cSzQYY*{=*xLf^+0U1MjtaUTb0jSZ{P?+3YsfO1&AJx+QsOn1D}r zjLuh`@db$h-1n5_mfm~Yf~q=;@R<6I?Z}cPQ`P||JRew91&5bb?QqE^zJOFa6DD3e zJr37&iStb$5+YKt2Uc@|4xd?n*zN6$Xf|m)CT3*KQF?B7??Ck6Xeb+O0UKaPG$JTz zcwrbU!+?ca!;ci;yah+;bApTHS2nBS%C>CndoWR-g-L57sGK1I5G=O)qw){0X~PlX zHkuh@+J`J)a7W3OYvU5yffRJ+EPNgOAcR)%XY3F(Z6vYT;F*(Br&ggws0B>e~*%!56o+o`3gdN*p zyw61G`i~7~OfY{&ZR|Ncdd((W>{#ZbAWw*s-;aT;)b9nmMaE69vI|oJqIf*quHJO3 zYUNzu>%tSqVR7zYJe-9NV3(%q6i6$VecE20c}Khj=t(j(!X3(mEq=D^=tCuUO~I0( z-TM@V=hJ~jVCNpTVdemdvuLfwsXO=tunLjkKmD5d&UptU&FQ8dyp5o+zX#zTRQGW? zUHX|`^Ya+y7w0EWh0gEzlfNaS_8B+V1CFo4ym0Wg&Du1{YzgEJXQb5ji9!#rj@bcK zXJ~GzmJl5mg=&Aoos=np}tM*W^>~nh~G^$l^4#W0*x9(F%0Ku*M zkJk#cG%GUc&(*$JjC8bzy6i~7D3D%1dC{?G!V0Ns@2(L7+*w3zHbUEOXP5DpO>p}* zF@NSY<2S3toM034E;S60sg&R~3|w?CQU^}40t1tR-h6uM34#k@-lc+-9`oc~U*8+y zTgD4WPlZ4|08MuCPhGLD)>9A%n zCl$y~vC)yV+HzkSkj38*J6-pk;xqf_ahA3{W2m}JTEF~?B?8R^O8MUA zlqDqMB!P-p=ma3yK#LAm{c7UW!eWv<9nv0mgR$tUn3UBJREu z139tSd}wIGS$X}<-f%{hmxbGU3wcMBlvKi zVEPqYgHecfrbRV486!N}=MHMmC9qa(u+7t~?(2jOmF292g_2$`+N&^w*ZB+uXelfg zGlU?^z0z?SXSJ0MGCFTsov65qi;(K-FN6A&zB8@TW9*jc5zJ}xrIoce5Z4zed?18c zvE(}~S;s8`Pauujdb-4~xEWC~0CJ<%*#vgHkZ=E)MPl^wr`?##M&k|V%YBdiWdth( z=eL4usij?T4_Mrhg!R4b%|3+O#I+25`VyC0)##@c-V9*4*f;cCSSxL(HesnZv6XN- zIEZvLR&6Uxl;|6K9T9~pzVn^VC*Euyl{*^94 zj`mN;y%#~vC!d=HxCYEycFG`-t59t?Td)S(qpT!g|5P3rl3c?|J+Ui=ZHLwgh&DPo z>M4N1Ru9m#^$cN41^p7mC5fs8;6|-NR}g9D57S%-oriRbQGHwHvyT(?)+a=s zxmH@68eqq863m}_*_tbe=3Kt5ieFQHjMDejP^3Vh6`dpx%KsiqiYXAr^1XhgsT$@(+lDV%6)~1Ui$!W! z{W;B2wOG_x1Ebt-&NE-mUx$+%32+l73eCCA5OG%#Brgn|x7tYFsZc&|1Z+IvE4;8|kP#a_O@4p`^x3&TGSz6q|+oex05 z0_Z5%=`fpb*KFX9&CO2G@XB_L4}BT*ateBxKcpBnYoEkp<;6lgAKYTny-Q(IP;qWJ zVLNx~$s_D`ditSoSbOu>+)myXW}kj;SxBG?U>7`LKj)w3$Mu#1viF!faME1%^#+59 z6R5784T#SUT6E18O6l2bs?dJ#lE0ive)GW-azT6 zTD0Mc3acki%Iw%3#hEBm`Y`BUa_7L1c!K{p!=SWCKb0SziKEmIp0!YM5*y1O9>3Ue z_JQ2eJ}14{BJ|TN1$B!!BrtsnwZkFn zD#^m@f#X@v>3mKx3@N7bmNWQ5jI?-1xP-NT)=|LP)7A=Ttf-4HKR3YK_IE|Hm=0T< zfa>Bk){>mFHg=4F*1F@G5-AWlwM74h<=QFcKlFF#Eb9IlB9$xi)(gMn#oGf57!rzC zY6$1g_Sc?E78QpdD((?MdFcE-ToLpZ-plQ zf^dccC4YXY3-vFbExHLgX&$C~<*~|lhuabQs}uUK(4R^83!advMcmzs=iJ2aKHi}( z{B<#q%Kpe-)T2IwLj$;^HJ{b$ zid~c|nhB6Y%f~S2^~#j{-~1zpP!iR<4Az51K|C6eWk4k-;k2{=fAyUCQ#}BN@urs& z;lh%U@9!@8&#vYFO6q;xJ+7Ep9$-o-M-dSo{-sL!-`wNgg8<)<^ z7Lb-K$~Df!#HcYFqa8@)s?#6(N>e!3|M1)Ke$JP?gW>-}kNQI3UC-+t>o1@NyZo(@ zy4BPw$x_{_i6=ZL627CGM`C{-KIzBl=S~)*Cnqp#Bne_V!UY?;x$>&QCv_9Nz z0g*$>8+#Yae=;O%S!nGI&TbOndKhOEtpd@oSP2$^3evA^(wYNlG);hVSUaRqp0@eG z$*+OWe}`E9^@0Q`F#H4otY4{(XtTpLMJ06E@)gL@Ho@0404*3Ph;0B?Vte0h!{M+O z*PQ~4QpFvD-9Oz<5yhMSEjkwIbJX(tFdzmg{)QL{pWB{ZwK*tNMlM&zoQ{BqNT5>4 zC>n@-;jr!Z7l?}CM}sVP{s30|ZoG3ofg9OnC zZUuwE^!L%`*QxdAcmC^V__*g)obo^R7U6R%6k0<7cmFTY#(#hDIRQ?q?Dt2M~O)l)~etba}i==LLw3+}D3M;;`8e%JR4;RVY)D4QOUjX-#HQ zzD2~0qA-g~82gT}dCM@mvS?ly)-&RL)MR7t+U;(md#Ke*uCV`r#TTUz-o1df6JpLg4Az~o5Mu2C)?#a&f`(1_Yi5I@fqu*Vk#OYI|x<}KN zmvL0i7z#OUDo3^Wq|pfRk4cfihWRR6=Lw+&rVGUh^fAkMa;Fu`GzYEM&xCIIwY@Ob zptG&%{bAWs|2j#S$y&G~I-rU_l>ole@uy;)%cSmQVIn#mTCz}=XgL@9;>DZ>bt;#A zT%~e+H2l*8`6l0^kf&<%yd5dh`Q&<9W66$1o!BadD~`|cT8D2XAnY0(5)uQ152IgU zv!LW$xVP5bw-|;mpc=R{T9zElH^`@X9J$0o`B-mp35HwWo|%;=SJ!VgAmkO-ExT7W zj~C~McyJ60Lkn^^Uh|@H9M&hd`r@$ zTC1xR{IZMWA5(C?KbYF$I|Kvz!4KbdIxS%P-2v?4{W+Ae2BXb>MB2jWQ%kj$q)v0K z@-Ls7^UBygZmaK$&G8Oz{b-0fxLU7L7x{?hH0{EL_D*F*+}RCF0I~KN`y!za!Z3q9 zyM3Pk9jUDbqx6bm7?2v@BxoA!JGAK0F)HM^Y}e`+K+;Dr&HZu#vaeL3FpC2Ou2?H#X(S+{y0Xr7Tv;5!qpU0r(b*>a5@w7z=z- zLdD)q<_txt@|cw)IZu2F?Z>2%ZL|{FIba>wcN4Nlpe*R)$_F)a@g4xvgN^~zjTD?c zt;VL6%^R~>J8SE@%gK@RxuPbhq=7{5bf464OgMOLkgjJLmNJX>V%?~3Lu2I%&^yqoTOSb&HZ9A((Mo4#C|Dali=X>(PUo?!d$-zS% z&v;&j)pD6+%5eAu?TfrWF|-7r!xCG%1Wdq{*MMN8139URR;_u%PiL}B(XCD3Fzvc2&FQZacD%v;tw(fC-g=pzDykc;x7P#j2;4qi;?r6-E z^gXJd47%MV zKPb0I+c;H(_(j^ zXZv&Pc)FNv5V{W_3W_;kV~G~zlN6nG17pC-IuX0L<*B`GR>p<|O)Wh|6Sqkx3@d|5 zvQE)8Bi)<_6gcRe{N^k=NYX$xnvit(Z;FXHhAE>&x*!@C_Q_V3+QQ4Hk#J)VEaZzs z-RccqZ#G;hjHR9J4l17YC~FM>HBGsa#eom7Jv$p4f$@Eu&25Jt@~zHXo? zj|v$;LR-uI{`0;&>gNT3epz-oht#3|h(>4VBzE$6m~y7M(WbCdbl*N7tWyJbzo4FqrjYV~C*6`wioE76AzO%k~u{hF67 zOAXIxHJiJuq(5rTSDRFsFINxPtG9FEfv#o=-gY72@}}^=6IqPXImSLdBJzK2CNe@T z_epU0x!Q*qt&4g&K-JrsTdt*@@R68Aa)RiCj1ZBT{nLXmNg9t)L^FeS1{T=G7>NukOD@@wXYqcN>|84*GAD09`SfhpqG{xVTVPAo;PlO*rMxkj`0~=MS4%A7CONMx9-l!UFjF=Fhf=1QCWdOPj@$0;0)I ze%95BAKMY!Ss$pti!;m`)hYwpKY%17p^?21^skBPKTgPUM9+9pLA24R^0?FQJdKP; z>&MFrm>g$)5G;M-uj)tt$V zDAc7Y6-^3=4ki1L=13gHkk2<6X>U^9z5-WFFeh@bDd3w()G_@ zttNO-Aqcz;4jClKWlkgK_C|IE?~Gm|I9f)fLtCUrIpRLLaG*jWW`-O!(|(#8xv^ZV zR6W}o)!QI`MsNr(Cv$oExXp=IS_-1Q1<<8-0Ee+g)75xC4Kff_#t3H*P#Hue^E3tO z?-*E`LWlE7*T>*wtEI6k(MUjuV3bbi zeturXZckB>J>VhdGkKyL(=_t=8`>zT+$C`sk^7aMk*{A5pgT?hpr|Wnz{yJAQ1Tar z$8RrRw_W)KC)H_ZA_v=81;F7L*7A+l%YtXllkD*=SKTRQ^cuhPE8-7|QL}1L-9+65 zBv`X7YV}=?OHKnB7+>rlRBVi(@{GT?niwVaGg2wIBC5eU+66EjF&EVqEkBN$#b$lK z(f{XBvHk_Pi7-U~h5Jr_8hdoDHWo(}Vm`}2!&m>C3t(=w`Q^UD=km6fOD&Ry zfnvvLbIuiya9!)^d!P}xtH;}9tMH8J!yox09LpYasbrcJEBKl{ZN|;RFzFtKWD`|C z63$ja#75VrPKtV7?}nNM5PF`!%I<^qtFf*FAcccX#H;c)loc}Ej`t$A;h@a~<|8|t z@N^su*Nw!0G>ZI+%5vt+*K5H+V^jVr?;qe0ogW-FS)KqaU7l~2#}ezAZd-z6MQgLb z11_qK12Xn{)fnGZQ0e1Yew+m~pN~qXYLy`iYNQSdul*tc6djyECEpMV?p!ofxjE)w zMfzQN+f6Sq${jVtlH+l3=!ekb`f&dUgC_V>k99HgHYP*g$EHdNtU|S2%W!}7CFgh9 zzL}9Ak?sm%^|fM_;rE=$99W=ao_V3KY!+1KirrM;5~y zpF2Z7S+VUxX&{}ijpHyjUuv*ElJ`;_T*xl}s?JEz`z19RK8Gtazm(;FMoN5!1fL~@b+re^5>!iU z-vh92xh|p2?<=DR^s9d$F}#9`#X#NfN#oWfI~&rhiQZ~B=HRfi&Ob=|nSy4{CI{<; zWh8Vc$mg|l;ao^KA*JLni~hJK;ohv-ggY1W0jOa#=!|u~i@=qu>a_@_MgB|!2aeb* zep(p-15)bk+w#9&CiRRd2B+cmcXHDB8DVR5fXCSCt9VgzKV9?+Ar>fR4KNY5L5=yG+~ON@YW17j0YWNH8u z#l;QIFl=mEl?%yf$$SJc!JVsT>q{GxxGly&Eo9aGa0b2uT`{JK(1##b2g$cO?n<{U zw_o1@sKdg%bliXSRW2R-)>JMY>bt+yv-#z>2sR!O zJNA-C$kFYZg9*Rl7wze`YWuMZIRvD@C1D zB6H$;JpMD{2>?4qg3q$Q$X44W^iL0%A2#CvqlvpHOqAiH*VImC+BFeNji9YSFmNpF&@;{ zH}^z5a7uM#CsplP&tNB1YxG_6byIUO0->8*L$m1NOtPR@MwVw_qS5ekB0^`6PCwaiH;H zKNk>8OdF>f`{CiN(R0i4RK^lp-OwV?7m0Ov8Ut^S0I0?=8cds6YZW1d*zlZSTVBYB zr%F_W5bTtMONYVCn~OxAH!|qpYt9l-L{1OvYmXiu{cxt!OCDS0>h#nW7{psiJMqh? zz@$a^7$<;oP2&#cf+wyiJHF_AZF~LA@r<;CUd$*R zG$zgfUk=9L8s^$ce005w&DJE-Az(Wdu4r(0>kzzwnl1GcBXZe=3aJUG-1{ILiA(Ni zA7JP9Q3LPd@zvROwTY&*)tZ_W&O}>j1Ojvq!2z*)TfRh|Jm- z1+M(gts}9Pkt3w=bDrxEi*3-gp94m?@~ zI{Te&nt940-yjgX>!Gv;4KIYhas*gWhj|OP@tdsySRD;IwYrs`mS2ju2DU$0xSf0Z3y>7d62)%e8_cyJTaGx^`qe^o8@6xG;j5{LaEDdJ^`R zZRws83MHuumaV<-d-es)Kf6Bd45kjDO%xf3Q>qt4g(*yI^-r)f6bUZXk{$Fe9m7ox z{MZQC2Dp~aDdi>781`pHo6E<&>&JSiG3 z)CAR!C0>suUqeI=zTf+T72|%yir+1@sC(0zsW{3XbjK!g+n-*rTQFJ$iyRf=Jq%5}`xM5or;*_O|V^ZF!my!byv2|7SG`!3ShfHGzt(F_n9OK}AF) zHRI50?}3Z-dor?zgCym$OUgjxe5=nvMnHqND9)F*>J%=A<)F&whEUAR>*@fvd9I5u z{2xd>nqW5oG4$nwbXrDV~I~m)hiP+aMLMET&m{K^ao!y+HNI#$LXd!OJdC|2?Us z!WpE>T<6n`+qGTWcW-MO}>-r23Yoa#frH!eYBoItUhQ#7kh%P)MP7y_|m^3l*vE70)XIMhV(i z<9IwKTHvj$X)8&y2-0~QQz*hrmLqOCB=h}a$BkQ+Ju;Q|E{!GRHo&iVNFyF1DY&fS z=j>b}Zp7sBwt0o1c{G)eFUPJ`N|34AYHk+#^NEz7Na50`$>)pqAtZb+g$wT3TH5w4 zOBaWrGZE}JFKo=xfhu383C%g=E_O7o;`%O@?-^@kOv&}_17AwL}D zI-(a~;1;mpja|4v%tQfBNVixR-)A{a{eJ?77HQUX%^pQ zd^o1KapWh!ThoIOmxak|eIH722|>+m5E>}LSi>n7;mnrKZOeJ5?)at?>SV=8ur_F* zMWk%Pk8ZC`d@9Qui&B`!oyVw^OFt6yE^c<-v2xl~cc)3R59aCz$H;9546>?yc2X-R z5w$NRxECidv)6(kels?nH~=~*HkmSr@0D_jgyc7R(@Cj~=6As?;%?N zQX`|D)eR282#?^XJz^&2bmOLm#?Z{uAN#H4zHcALM~Qmc9JAMa#>g#>hsLhv({ETM zO{1Eyo?6BaT{}OKh$p;4Fi34Y{GQDubNhl1x_5)oPG8S;ik@JFh7D8zApniE;x)!& zJLho~y#L~Z$}xQ1^2SKf%4JW6(XP6+&)_n3&4KU3^%>J~AA)_K&l57Q}31~F78BZN9Uqu4!5e@A*3WE%; zhWkLyR2@bZ*eJvl~}(vRiZjZoE{d+JK$RC59@ua z8=`Ab_>$K@d*N$?vh}lye9l>8UX|{4_{qb^U`~_Atv_)h+rb(OLiH=oAl%5^A)6wZ zUa?E1@>TdQHu;DQUT;wYm)JUclJz%|m+`ncA8#_S$OnEx@ZBOph;Q^2VX0o0ou4eL zeF?BRH1b?lY4aLcTJ!jG0R9>a5G~xk+xz*S?e6 zbhqkXWOxIeD`o#DP(d-J}4|IkyGtHv{wa#T#0|D=BR?O3cZ*~%SfB#H20YQ zF)xFxbOM}#dYYYexlHyVSC$Kd-1+0jkNTOek+U@&hn?cIU-rvdKN_KDA2IBq6ANOo zgdgft=@HcPQe{tT2u7ihGN~`gT{JEhR8Fka>=c0-_Xnt)JVvIXgCjn5tL|N`)8GxN zlxQ@K$`&uG@J2CBgzHt?sbzXTX?j&Tk-r=?d!d}o= z#%m1Lf#dT%`dcKm3Oh!6> z9A!sj(`9mzmPXab8fd7X^J&_)TkMXEP!Q|%V(od8VeE$}PN1Jk-$vVnuU4H11Y>2d z?;+1|j`wnd8huII;0l0D%_Cu!rItek2L9jRKpYl|veRAAUaBdyjF)Rf#5F#AWs8W-cu zf^MMe310-=Mi-EpT0*>ni<&WABhP-5?}B$kOkG|zxTOx{68GQLMMl323ggv3w^;ae zHPp9anUTgMgX1@b-LHjzw3+C?~)&`PP?Q>GGwsUTJ?yY;0nAOy4X5_}{u6XQ!duQO{@gVTb z@OsO#um8u0{W5sK*L!|%tRBx35*v*Fc+?G-p2 z+FeI%w?@uy+l(gyZP@Z?=Oq8Nfc$sMc0@=_ic4Se;3m=Ew#i_4*@bAKHqpEb0TAN&l1NEvUz)U2T~bICt%8oR{(b&vm; zGPr+C8O7Ert{JzO_^&%=P2CTf|J@n?x@wIL9A}EnwWgdGi{f$*dOqnlFZKMiJ<_$Q zT=G2!ef7kDXk`vVFJm4WocbRw@0SsWECX!L=Wh9||MzX?QM5DW-=K2I{-1C6i(x>k zgF%HrTs3S*|Gv#P(sup|8ZyVM-@ZRmJzzGkj_ihrvwz!0Tin}6S54wT=(kowVEq!4 z0%3VKUPSn}ZQA33x2{c`5B_c6@vp(s%e<{0qlparZ5wYI;H@nfDo}rKF74>r8SK{S zYIs<`Z3CtTy!DcrB3@PKrFDaSHvt;d}Um z48l^BPa;k1Z!396SEbei;Ig~R63oifhu-k zQPE&%myz=CZJ3t|2_*|fPmq*|TVO+XlZ2Gx!`a!nzSof_B@K$PEmyL%AVafB4;fyq}=`iX=9bN>ND2IE5XLS5^oXdOR5tHS86t zffKQ2rJ^@Gwc3|N?WlP#&6;KT-@R$Z`%2`AV(MZ}=G)gO{pJh?A0% z8ddB(5EF;w|FfqU+J`}iJ*=FSFVdk{JSU0(1F2O2Rc)26gijx z%OCQ^yI~f%Pf}nEOrOsxJ z49Z&(VWE#os!H#cRT~pBFfgFty`d!}B$TYQ&{}}5q#GI>$|)!i)mmw# zGfUSuGGZGzQfT5`*KLy2X>=*(Zt1S})@`X!@D5?JLa&cgB|M+iFO}(T2xx{@r}P-Rp%3z0!l_cy3$!GBL8cfu}AR# z@b#4eaV%N5!AWpQa0?I!!3n`FB#_`XxNC5ChXjIKfZ!I~-7UDg4(>2G3_kFheY?a2^wQ0;uzE5m#wjBBvQg%z+EsGbM}1LN}P0{ zGYn*MrC7md5WPw_0e``^h=^DC@gB0qEq6mf)J$wKe_MJT`5LDg&;~?$BtNJ%#X5Aw6qGDUbBCncK3|w{(b~PrGA}M(U-U46=zeD*$&(4;6SAY^OTKYcb(sBF|-v1 z-a#a9MQnE6Ot+B15LV|8k#*j!_q?By%Q-~jm~>ttAt7xsH(BF8&RruqK+^08GroHM z;>8|?A{W@%yop@<>=3H!F1o){34bF11H0o+XX-6YR8xHUK1tisAF7X4@#e)t{`S&c zgm-_Dj@QZPgxhp3g(tm0gL8asu1suhnxZ!)BQdirA+KQ>It8y(bW98l8a|v8I?+rQ({AHS&1O1W(~QsU)}9({c9t8Yyijk^&j!j!2FgsJ zZ-Wo(6pinW{U`VfQHItNC1oA+rLr4H4f-mwm9-dit7W7np=#JwI<OHeufY>`%OBf@Cye zugXD@+`N`wOFn9P^1ZjNa9Mv3s&&a|NfTJ-@l3j~a1?f4mtOp(rs-G3y{D;l~%DphPWJ`_MfL5qH}Z-&DWZjLiiqBS@TB^6XmjqH^mp4$@fbFVesNlS_$^f zQmv$d($VmjJ$nx9hUZN95}YKZV`F5vMNqubJhq5(T}!YU91a;h-7e#38FtL9dXW$3 zvqK6_46NU_I~~mTK}wr4#R$Wq9wmBwN6mC^R7#>3n)pEobn3j$dyKhhcEM7FLNfQR z159?pu`NF@c1^aVB{KUX1@y0Ma!pgoH^5Cr8xbG9=lk^qoi^CUTRi!it(C#B<8@PZ zgB<$+n~VZ~rL+JGeZ-(Kub`^v!tC=XI&$apc6)#LbM7Qw zZD`WPTyD5)ljz^pth`d;yI!=(Hb+qh={13g!~F7wuP0m*zpqHlq_|MR*d|b4kdT#^ z>{yBKh@6y#Ei7ZwmJoRsS@BgJrK6OHO0QKz_TyX1)Z-ylgwIF5yqK4w`?6}bx4&!VFtOW^x%r@>kmfe+3kt5Em(rtt1M3MJpQa)WMezfStyA_21>lra~V-_SN|ug^$2=1o%!CNHpQ#H5!(Sem5<;U<%lN&9+dU!QqDXk`M$ z{0D8bHh;v>O{3zIyeZ1di<}tdA8^^Zcu^g9P-We6D|4)<;l9}wj)KrN?D);P?t+-e z{qBUEK&RHKdBJHrh5S}^h}3y4$jwgPHmXQX1164{@Y^Is@bhsR$@ssocp(Acoye7uuU&wAk64t^V)Nu1Vssi>Xt=)v@j&1{vJxf?__4CrE1du zaRjwSk4tVrJ}l{LfG>oVUPH8ItcNtK-{e)Vc$yaj9VwTX)=A?a4m~Co7Qvm18LGBM zHR5wb0P31Di(8S{OF_3?r^WTxWKPp^x93*co^R99!zDtL7pO;9L6-Cn&$7@^)iw#S%)6HU0?D4Re7W`P+OUpolDlM`etrf;NWd* zM_Ae?!$85QGtkfx*@#ll??g`7@t&{ub1$mfY)@bD=Z8!*9H&>%%RWjXb?7lQ@ivz>GEd~vCd(B48012W^xguRcW90GQ~07U zA@_HR#zV;&!{}X*#0F^``r)OttlF>v0$!*6^x^&DnTVl>)qPEHjpaFwtpDvQ!Sn^$ z#jtV0jL!1ySV0qldilT;hhmM|>A9)YX`T3XSmw(tL)`~Bx9ZC6VaK8t_u9AOkuC!@ z#kd*wgw^KeumR+R6}%qVQSUMtVs}4}>!F!&=rQKsf~oWpcs7BEv3735h%J`;epAjZ zO55&`?HSZ`qHMZgE@nC3H4<~=;Hmkt;jgw_JC?c{A0b;jmK{(Lzh`UR-JQ?iD-s$x zv`oNW9*Gi~k_u`~TNh)wX+J5Z>x4Xd<%sxgbi;PHo<4XUfX+mFV0E+HyVFxVI7P0S z$-27rLh+2Y=N!vCyI19IEw1XyPH~v}Nx4(og6N7)YK%wbf8rv{nt+6(byTBdM*@lyg%t2qih z97-A9ZK~HYIy5|$+EEqF8npZw&7J2wGSMUMQoljzJP?Seie;@59b+OEpJ)npxgeZ; zg;D;#i&X{q0EB-SA6bSvaBV9p10eF6CdQt(zrKob&BVM3Iny#}^d#llF*FtQPzbvw zB*pdrAXWnb8KgESX~~AjUu58nDU|7Vx9fUC&lAyHgt|^rl}qvXj!chgS75jz&*|R{ z|H`QH!=XV|Q&UU0yWZC4(c3>Ehae@nqU7ti^d@r>Ggltx45i!_KEo`XfQB!--&!W{ zS*I3hH;Y|tZ|#larSLjMvt^0z>U8%adTlRWHmP~WoQH*nkAdfM&5)A7%@1C}$No-R zL?)t-!{xCq@gM+^!Z7L(RrFP~zX4)Z-I zE1rk%D#p`*fB?rB*bG#YOVwVS*`(_NfPxY=ODO zvd5`CqMizSpLu`~w&b#HY46Nqeaa&fL9z$O*jV6upsQh?K05?yhj_}X{H811pXx{W z7Jagemd$UHTO|m?B)ej|GmpbBx$A>~)S0j+E?rWPT5p>*vibQs#%R6A2*x*kuW`ZF zMT+UF&Uron$d$+sSb0td#&m)$E(BJ zJ1U+s$NGMT!=efoogZ5a*kKl1$!et%Ng-)7+1#Nmbxe!ZGVIIsA|^W2y`kxBehuH= zc#SUpj%i42oPo4(9qqbV_HO+KMt-TFLYmEI;X8GJWTo*CX}i8ACY#3%lX`25 z=TyVZ{4T>I_k$R#<9_DN`!h%ZFJ9X=Thn`plil{W3y(;wSzAQ?DsC`O>wN)Ax(2|2 zxW>sY$Vy3#-j>_PLlgSS%2=<#8=}y3Srvp0PwoS}xf)B2lnWtR+K()Ol-_Et2?k^u zHCE5>W-SR3v6$Yyn?8KG|Myhom>zq|H4;b|bnQccR7&VWLtDi?fL zcg^6L=24auwfb=Tn?$W`_p`dHA|;Hk@mB6QhHQ;*n0!?Od0a;pB?8e&X@-D$T|8%A zQ~rG!4!QNx+@{GE%Pm@QC8}1b3wf7%b08Rpg@EOtOSq;ER%%>%VqnpdaXFKtsUHGZ zWsmuGyQP@Jkect@86eLnt2S-pckgiy3VPfs)LYq#g^}Jz)h`^L&SW2#>L`hwz9W+g z+vQO(V&{s#ODp1N3)>_)efO4KEYjAZDtd^4Pc1g#%ZoG`OBPQx*f#)!GMn~@YLGbE|`Z+6Rj6Eo9?aIGZ*!!w{ z3$3FcA8vuAg�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 literal 0 HcmV?d00001 diff --git a/infra/rds/secure-group-outbound.png b/infra/rds/secure-group-outbound.png new file mode 100644 index 0000000000000000000000000000000000000000..ac6d5997ce4895eae55c9fcb0c2028aa560fcc9b GIT binary patch literal 90454 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 YG08g*m}99i67VN2p&(u=`abag08ZQ9n*aa+ literal 0 HcmV?d00001 diff --git a/infra/s3/policy.png b/infra/s3/policy.png new file mode 100644 index 0000000000000000000000000000000000000000..76b6b0e33b90ce3b1380ad6d12b1fbe2e7e25d5c GIT binary patch literal 65097 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.0.0" + } + }, + "node_modules/@ampproject/remapping/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz", + "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.10.tgz", + "integrity": "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.10", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.10", + "@babel/parser": "^7.26.10", + "@babel/template": "^7.26.9", + "@babel/traverse": "^7.26.10", + "@babel/types": "^7.26.10", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/core/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.0.tgz", + "integrity": "sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.27.0", + "@babel/types": "^7.27.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.0.tgz", + "integrity": "sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.26.8", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", + "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.0.tgz", + "integrity": "sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.0", + "@babel/types": "^7.27.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz", + "integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", + "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", + "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz", + "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.0.tgz", + "integrity": "sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/parser": "^7.27.0", + "@babel/types": "^7.27.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.0.tgz", + "integrity": "sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.27.0", + "@babel/parser": "^7.27.0", + "@babel/template": "^7.27.0", + "@babel/types": "^7.27.0", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/traverse/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/types": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz", + "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-get-type": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/reporters/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/source-map/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@mapbox/node-pre-gyp": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", + "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", + "dependencies": { + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + } + }, + "node_modules/@noble/hashes": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@paralleldrive/cuid2": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@paralleldrive/cuid2/-/cuid2-2.2.2.tgz", + "integrity": "sha512-ZOBkgDwEdoYVlSeRbYYXs0S9MejQofiVYoTbKzy/6GQa39/q5tQU2IX46+shYnUkpEl3wc+J6wRlar7r2EK2xA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/hashes": "^1.1.5" + } + }, + "node_modules/@prisma/client": { + "version": "5.16.2", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-5.16.2.tgz", + "integrity": "sha512-+1lmkhR9gHWcTC5oghm2ZKpWljyWdzfazCVlLKUWXVmwHSf52g81aZ8qb6Km5Bs025yBi7puLp3qSLEvktoUtw==", + "hasInstallScript": true, + "engines": { + "node": ">=16.13" + }, + "peerDependencies": { + "prisma": "*" + }, + "peerDependenciesMeta": { + "prisma": { + "optional": true + } + } + }, + "node_modules/@prisma/debug": { + "version": "5.16.2", + "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-5.16.2.tgz", + "integrity": "sha512-ItzB4nR4O8eLzuJiuP3WwUJfoIvewMHqpGCad+64gvThcKEVOtaUza9AEJo2DPqAOa/AWkFyK54oM4WwHeew+A==", + "devOptional": true + }, + "node_modules/@prisma/engines": { + "version": "5.16.2", + "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-5.16.2.tgz", + "integrity": "sha512-qUxwMtrwoG3byd4PbX6T7EjHJ8AUhzTuwniOGkh/hIznBfcE2QQnGakyEq4VnwNuttMqvh/GgPFapHQ3lCuRHg==", + "devOptional": true, + "hasInstallScript": true, + "dependencies": { + "@prisma/debug": "5.16.2", + "@prisma/engines-version": "5.16.0-24.34ace0eb2704183d2c05b60b52fba5c43c13f303", + "@prisma/fetch-engine": "5.16.2", + "@prisma/get-platform": "5.16.2" + } + }, + "node_modules/@prisma/engines-version": { + "version": "5.16.0-24.34ace0eb2704183d2c05b60b52fba5c43c13f303", + "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.16.0-24.34ace0eb2704183d2c05b60b52fba5c43c13f303.tgz", + "integrity": "sha512-HkT2WbfmFZ9WUPyuJHhkiADxazHg8Y4gByrTSVeb3OikP6tjQ7txtSUGu9OBOBH0C13dPKN2qqH12xKtHu/Hiw==", + "devOptional": true + }, + "node_modules/@prisma/fetch-engine": { + "version": "5.16.2", + "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-5.16.2.tgz", + "integrity": "sha512-sq51lfHKfH2jjYSjBtMjP+AznFqOJzXpqmq6B9auWrlTJrMgZ7lPyhWUW7VU7LsQU48/TJ+DZeIz8s9bMYvcHg==", + "devOptional": true, + "dependencies": { + "@prisma/debug": "5.16.2", + "@prisma/engines-version": "5.16.0-24.34ace0eb2704183d2c05b60b52fba5c43c13f303", + "@prisma/get-platform": "5.16.2" + } + }, + "node_modules/@prisma/get-platform": { + "version": "5.16.2", + "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-5.16.2.tgz", + "integrity": "sha512-cXiHPgNLNyj22vLouPVNegklpRL/iX2jxTeap5GRO3DmCoVyIHmJAV1CgUMUJhHlcol9yYy7EHvsnXTDJ/PKEA==", + "devOptional": true, + "dependencies": { + "@prisma/debug": "5.16.2" + } + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@socket.io/component-emitter": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz", + "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==", + "license": "MIT" + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "dev": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz", + "integrity": "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/bcrypt": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@types/bcrypt/-/bcrypt-5.0.2.tgz", + "integrity": "sha512-6atioO8Y75fNcbmj0G7UjI9lXN2pQ/IGJ2FWT4a/btd0Lk9lQalHLKhkgKVZ3r+spnmWUKfbMi1GEe9wyHQfNQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/cookie-parser": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/@types/cookie-parser/-/cookie-parser-1.4.8.tgz", + "integrity": "sha512-l37JqFrOJ9yQfRQkljb41l0xVphc7kg5JTjjr+pLRZ0IyZ49V4BQ8vbF4Ut2C2e+WH4al3xD3ZwYwIUfnbT4NQ==", + "dev": true, + "peerDependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/cookiejar": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.5.tgz", + "integrity": "sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/cors": { + "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": "*" + } + }, + "node_modules/@types/express": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.0.tgz", + "integrity": "sha512-DvZriSMehGHL1ZNLzi6MidnsDhUZM/x2pRdDIKdwbUNqqwHxMlRdkxtn6/EPKyqKpHqTl/4nRZsRNLpZxZRpPQ==", + "dev": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^5.0.0", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.6.tgz", + "integrity": "sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "dev": true + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "29.5.14", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.14.tgz", + "integrity": "sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "node_modules/@types/jsonwebtoken": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.9.tgz", + "integrity": "sha512-uoe+GxEuHbvy12OUQct2X9JenKM3qAscquYymuQN4fMWG9DBQtykrQEFcAbVACF7qaLw9BePSodUL0kquqBJpQ==", + "dev": true, + "dependencies": { + "@types/ms": "*", + "@types/node": "*" + } + }, + "node_modules/@types/methods": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@types/methods/-/methods-1.1.4.tgz", + "integrity": "sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "dev": true + }, + "node_modules/@types/multer": { + "version": "1.4.12", + "resolved": "https://registry.npmjs.org/@types/multer/-/multer-1.4.12.tgz", + "integrity": "sha512-pQ2hoqvXiJt2FP9WQVLPRO+AmiIm/ZYkavPlIQnx282u4ZrVdztx0pkh3jjpQt0Kz+YI0YhSG264y08UJKoUQg==", + "dev": true, + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/node": { + "version": "22.13.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.9.tgz", + "integrity": "sha512-acBjXdRJ3A6Pb3tqnw9HZmyR3Fiol3aGxRCK1x3d+6CDAMjl7I649wpSd+yNURCjbOUGu9tqtLKnTGxmK6CyGw==", + "dependencies": { + "undici-types": "~6.20.0" + } + }, + "node_modules/@types/qs": { + "version": "6.9.18", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.18.tgz", + "integrity": "sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==", + "dev": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true + }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "dev": true, + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/superagent": { + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-8.1.9.tgz", + "integrity": "sha512-pTVjI73witn+9ILmoJdajHGW2jkSaOzhiFYF1Rd3EQ94kymLqB9PjD9ISg7WaALC7+dCHT0FGe9T2LktLq/3GQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/cookiejar": "^2.1.5", + "@types/methods": "^1.1.4", + "@types/node": "*", + "form-data": "^4.0.0" + } + }, + "node_modules/@types/supertest": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-6.0.3.tgz", + "integrity": "sha512-8WzXq62EXFhJ7QsH3Ocb/iKQ/Ty9ZVWnVzoTKc9tyyFRRF3a74Tk2+TLFgaFFw364Ere+npzHKEJ6ga2LzIL7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/methods": "^1.1.4", + "@types/superagent": "^8.1.0" + } + }, + "node_modules/@types/yargs": { + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dev": true, + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agent-base/node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/agent-base/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/append-field": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", + "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==" + }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" + }, + "node_modules/are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "deprecated": "This package is no longer supported.", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/are-we-there-yet/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true, + "license": "MIT" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz", + "integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "license": "MIT", + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, + "node_modules/bcrypt": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-5.1.1.tgz", + "integrity": "sha512-AGBHOG5hPYZ5Xl9KXzU5iKq9516yEmvCKDg3ecP5kX2aB6UqTeXZxk2ELnDgDm6BQSMlLt9rDB4LoSMx0rYwww==", + "hasInstallScript": true, + "dependencies": { + "@mapbox/node-pre-gyp": "^1.0.11", + "node-addon-api": "^5.0.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", + "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001688", + "electron-to-chromium": "^1.5.73", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.1" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001715", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001715.tgz", + "integrity": "sha512-7ptkFGMm2OAOgvZpwgA4yjQ5SQbrNVGdRjzH0pBdy1Fasvcr+KAeECmbCAECzTuDuoX0FCY8KzUxjf9+9kfZEw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", + "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/component-emitter": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", + "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-parser": { + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.7.tgz", + "integrity": "sha512-nGUvgXnotP3BsjiLX2ypbQnWoGUPIIfHQNZkkC668ntrzGWEZVW70HDEB1qnNGMicPje6EttlIgzo51YSwNQGw==", + "dependencies": { + "cookie": "0.7.2", + "cookie-signature": "1.0.6" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/cookie-parser/node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/cookiejar": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", + "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", + "dev": true, + "license": "MIT" + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + }, + "bin": { + "create-jest": "bin/create-jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/dedent": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", + "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-libc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/dezalgo": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", + "dev": true, + "license": "ISC", + "dependencies": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.144", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.144.tgz", + "integrity": "sha512-eJIaMRKeAzxfBSxtjYnoIAw/tdD6VIH6tHBZepZnAbE3Gyqqs5mGN87DvcldPUbVkIljTK8pY0CMcUljP64lfQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/engine.io": { + "version": "6.6.4", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.4.tgz", + "integrity": "sha512-ZCkIjSYNDyGn0R6ewHDtXgns/Zre/NT6Agvq1/WobF7JXgFff4SeDroKiCO3fNJreU9YG429Sc81o4w5ok/W5g==", + "license": "MIT", + "dependencies": { + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.7.2", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.17.1" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/engine.io-parser": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", + "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/engine.io/node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/engine.io/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/engine.io/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/express": { + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.2", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.6.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "dev": true, + "license": "MIT" + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/form-data": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", + "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/formidable": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.4.tgz", + "integrity": "sha512-YikH+7CUTOtP44ZTnUhR7Ic2UASBPOqmaRkRKxRbywPTe5VxF7RRCck4af9wutiZ/QKM5nME9Bie2fFaPz5Gug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@paralleldrive/cuid2": "^2.2.2", + "dezalgo": "^1.0.4", + "once": "^1.4.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "url": "https://ko-fi.com/tunnckoCore/commissions" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "deprecated": "This package is no longer supported.", + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true, + "license": "MIT" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent/node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", + "dev": true + }, + "node_modules/import-local": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.7.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "execa": "^5.0.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-circus": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-cli": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "create-jest": "^29.7.0", + "exit": "^0.1.2", + "import-local": "^3.0.2", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watcher": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jsonwebtoken/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/lru-cache/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "license": "MIT" + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/multer": { + "version": "1.4.5-lts.1", + "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.5-lts.1.tgz", + "integrity": "sha512-ywPWvcDMeH+z9gQq5qYHCCy+ethsk4goepZ45GLD63fOu0YcNecQxi64nDs3qluZB+murG3/D4dJ7+dGctcCQQ==", + "dependencies": { + "append-field": "^1.0.0", + "busboy": "^1.0.0", + "concat-stream": "^1.5.2", + "mkdirp": "^0.5.4", + "object-assign": "^4.1.1", + "type-is": "^1.6.4", + "xtend": "^4.0.0" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/node-addon-api": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==" + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "dev": true, + "license": "MIT" + }, + "node_modules/nodemon": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.9.tgz", + "integrity": "sha512-hdr1oIb2p6ZSxu3PB2JWWYS7ZQ0qvaZsc3hK8DR8f02kRzc8rjYmxAIvdz+aYC+8F2IjNaB7HMcSDg8nQpJxyg==", + "dev": true, + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^4", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^7.5.3", + "simple-update-notifier": "^2.0.0", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/nodemon/node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/nodemon/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "deprecated": "This package is no longer supported.", + "dependencies": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-locate/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/prettier": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz", + "integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/prisma": { + "version": "5.16.2", + "resolved": "https://registry.npmjs.org/prisma/-/prisma-5.16.2.tgz", + "integrity": "sha512-rFV/xoBR2hBGGlu4LPLQd4U8WVA+tSAmYyFWGPRVfj+xg7N4kiZV4lSk38htSpF+/IuHKzlrbh4SFk8Z18cI8A==", + "devOptional": true, + "hasInstallScript": true, + "dependencies": { + "@prisma/engines": "5.16.2" + }, + "bin": { + "prisma": "build/index.js" + }, + "engines": { + "node": ">=16.13" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true + }, + "node_modules/pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT" + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve.exports": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", + "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/simple-update-notifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true, + "license": "MIT" + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/socket.io": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.1.tgz", + "integrity": "sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "cors": "~2.8.5", + "debug": "~4.3.2", + "engine.io": "~6.6.0", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.4" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz", + "integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==", + "license": "MIT", + "dependencies": { + "debug": "~4.3.4", + "ws": "~8.17.1" + } + }, + "node_modules/socket.io-adapter/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socket.io-adapter/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/socket.io-parser": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", + "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", + "license": "MIT", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-parser/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socket.io-parser/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/socket.io/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socket.io/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/superagent": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-9.0.2.tgz", + "integrity": "sha512-xuW7dzkUpcJq7QnhOsnNUgtYp3xRwpt2F7abdRYIpCsAt0hhUqia0EdxyXZQQpNmGtsCzYHryaKSV3q3GJnq7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "component-emitter": "^1.3.0", + "cookiejar": "^2.1.4", + "debug": "^4.3.4", + "fast-safe-stringify": "^2.1.1", + "form-data": "^4.0.0", + "formidable": "^3.5.1", + "methods": "^1.1.2", + "mime": "2.6.0", + "qs": "^6.11.0" + }, + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/superagent/node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/superagent/node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/superagent/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/superstruct": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-2.0.2.tgz", + "integrity": "sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/supertest": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supertest/-/supertest-7.1.0.tgz", + "integrity": "sha512-5QeSO8hSrKghtcWEoPiO036fxH0Ii2wVQfFZSP0oqQhmjk8bOLhDFXr4JrvaFmPuEWUoq4znY3uSi8UzLKxGqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "methods": "^1.1.2", + "superagent": "^9.0.1" + }, + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/touch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.1.tgz", + "integrity": "sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==", + "dev": true, + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" + }, + "node_modules/typescript": { + "version": "5.8.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz", + "integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true + }, + "node_modules/undici-types": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==" + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.0.5.tgz", + "integrity": "sha512-508e6IcKLrhxKdBbcA2b4KQZlLVp2+J5UwQ6F7Drckkc5N9ZJwFa4TgWtsww9UG8fGHbm6gbV19TdM5pQ4GaIA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/esm/bin/uuid" + } + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, + "node_modules/v8-to-istanbul": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/v8-to-istanbul/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, + "dependencies": { + "@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "dependencies": { + "@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + } + } + }, + "@babel/code-frame": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + } + }, + "@babel/compat-data": { + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz", + "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==", + "dev": true + }, + "@babel/core": { + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.10.tgz", + "integrity": "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.10", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.10", + "@babel/parser": "^7.26.10", + "@babel/template": "^7.26.9", + "@babel/traverse": "^7.26.10", + "@babel/types": "^7.26.10", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "dependencies": { + "debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "requires": { + "ms": "^2.1.3" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.0.tgz", + "integrity": "sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==", + "dev": true, + "requires": { + "@babel/parser": "^7.27.0", + "@babel/types": "^7.27.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "dependencies": { + "@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + } + } + }, + "@babel/helper-compilation-targets": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.0.tgz", + "integrity": "sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.26.8", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "@babel/helper-module-imports": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "dev": true, + "requires": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + } + }, + "@babel/helper-module-transforms": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", + "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==", + "dev": true + }, + "@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "dev": true + }, + "@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "dev": true + }, + "@babel/helpers": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.0.tgz", + "integrity": "sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==", + "dev": true, + "requires": { + "@babel/template": "^7.27.0", + "@babel/types": "^7.27.0" + } + }, + "@babel/parser": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz", + "integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==", + "dev": true, + "requires": { + "@babel/types": "^7.27.0" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-import-attributes": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", + "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", + "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-typescript": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz", + "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/template": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.0.tgz", + "integrity": "sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.26.2", + "@babel/parser": "^7.27.0", + "@babel/types": "^7.27.0" + } + }, + "@babel/traverse": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.0.tgz", + "integrity": "sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.27.0", + "@babel/parser": "^7.27.0", + "@babel/template": "^7.27.0", + "@babel/types": "^7.27.0", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "dependencies": { + "debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "requires": { + "ms": "^2.1.3" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, + "@babel/types": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz", + "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + } + }, + "@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "0.3.9" + } + }, + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + } + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true + }, + "@jest/console": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" + } + }, + "@jest/core": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", + "dev": true, + "requires": { + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "dev": true, + "requires": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" + } + }, + "@jest/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "dev": true, + "requires": { + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" + } + }, + "@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "dev": true, + "requires": { + "jest-get-type": "^29.6.3" + } + }, + "@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + } + }, + "@jest/globals": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "dev": true, + "requires": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" + } + }, + "@jest/reporters": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", + "dev": true, + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "dependencies": { + "@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + } + } + }, + "@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "requires": { + "@sinclair/typebox": "^0.27.8" + } + }, + "@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "dependencies": { + "@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + } + } + }, + "@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "dev": true, + "requires": { + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "dev": true, + "requires": { + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" + } + }, + "@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, + "requires": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "dependencies": { + "@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + } + } + }, + "@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "requires": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@jridgewell/gen-mapping": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "dependencies": { + "@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + } + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@mapbox/node-pre-gyp": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", + "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", + "requires": { + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + } + }, + "@noble/hashes": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", + "dev": true + }, + "@paralleldrive/cuid2": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@paralleldrive/cuid2/-/cuid2-2.2.2.tgz", + "integrity": "sha512-ZOBkgDwEdoYVlSeRbYYXs0S9MejQofiVYoTbKzy/6GQa39/q5tQU2IX46+shYnUkpEl3wc+J6wRlar7r2EK2xA==", + "dev": true, + "requires": { + "@noble/hashes": "^1.1.5" + } + }, + "@prisma/client": { + "version": "5.16.2", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-5.16.2.tgz", + "integrity": "sha512-+1lmkhR9gHWcTC5oghm2ZKpWljyWdzfazCVlLKUWXVmwHSf52g81aZ8qb6Km5Bs025yBi7puLp3qSLEvktoUtw==", + "requires": {} + }, + "@prisma/debug": { + "version": "5.16.2", + "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-5.16.2.tgz", + "integrity": "sha512-ItzB4nR4O8eLzuJiuP3WwUJfoIvewMHqpGCad+64gvThcKEVOtaUza9AEJo2DPqAOa/AWkFyK54oM4WwHeew+A==", + "devOptional": true + }, + "@prisma/engines": { + "version": "5.16.2", + "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-5.16.2.tgz", + "integrity": "sha512-qUxwMtrwoG3byd4PbX6T7EjHJ8AUhzTuwniOGkh/hIznBfcE2QQnGakyEq4VnwNuttMqvh/GgPFapHQ3lCuRHg==", + "devOptional": true, + "requires": { + "@prisma/debug": "5.16.2", + "@prisma/engines-version": "5.16.0-24.34ace0eb2704183d2c05b60b52fba5c43c13f303", + "@prisma/fetch-engine": "5.16.2", + "@prisma/get-platform": "5.16.2" + } + }, + "@prisma/engines-version": { + "version": "5.16.0-24.34ace0eb2704183d2c05b60b52fba5c43c13f303", + "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.16.0-24.34ace0eb2704183d2c05b60b52fba5c43c13f303.tgz", + "integrity": "sha512-HkT2WbfmFZ9WUPyuJHhkiADxazHg8Y4gByrTSVeb3OikP6tjQ7txtSUGu9OBOBH0C13dPKN2qqH12xKtHu/Hiw==", + "devOptional": true + }, + "@prisma/fetch-engine": { + "version": "5.16.2", + "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-5.16.2.tgz", + "integrity": "sha512-sq51lfHKfH2jjYSjBtMjP+AznFqOJzXpqmq6B9auWrlTJrMgZ7lPyhWUW7VU7LsQU48/TJ+DZeIz8s9bMYvcHg==", + "devOptional": true, + "requires": { + "@prisma/debug": "5.16.2", + "@prisma/engines-version": "5.16.0-24.34ace0eb2704183d2c05b60b52fba5c43c13f303", + "@prisma/get-platform": "5.16.2" + } + }, + "@prisma/get-platform": { + "version": "5.16.2", + "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-5.16.2.tgz", + "integrity": "sha512-cXiHPgNLNyj22vLouPVNegklpRL/iX2jxTeap5GRO3DmCoVyIHmJAV1CgUMUJhHlcol9yYy7EHvsnXTDJ/PKEA==", + "devOptional": true, + "requires": { + "@prisma/debug": "5.16.2" + } + }, + "@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, + "@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + }, + "@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "requires": { + "@sinonjs/commons": "^3.0.0" + } + }, + "@socket.io/component-emitter": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz", + "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==" + }, + "@tsconfig/node10": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "dev": true + }, + "@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true + }, + "@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true + }, + "@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true + }, + "@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "requires": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz", + "integrity": "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==", + "dev": true, + "requires": { + "@babel/types": "^7.20.7" + } + }, + "@types/bcrypt": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@types/bcrypt/-/bcrypt-5.0.2.tgz", + "integrity": "sha512-6atioO8Y75fNcbmj0G7UjI9lXN2pQ/IGJ2FWT4a/btd0Lk9lQalHLKhkgKVZ3r+spnmWUKfbMi1GEe9wyHQfNQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "dev": true, + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/cookie-parser": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/@types/cookie-parser/-/cookie-parser-1.4.8.tgz", + "integrity": "sha512-l37JqFrOJ9yQfRQkljb41l0xVphc7kg5JTjjr+pLRZ0IyZ49V4BQ8vbF4Ut2C2e+WH4al3xD3ZwYwIUfnbT4NQ==", + "dev": true, + "requires": {} + }, + "@types/cookiejar": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.5.tgz", + "integrity": "sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==", + "dev": true + }, + "@types/cors": { + "version": "2.8.17", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", + "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", + "requires": { + "@types/node": "*" + } + }, + "@types/express": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.0.tgz", + "integrity": "sha512-DvZriSMehGHL1ZNLzi6MidnsDhUZM/x2pRdDIKdwbUNqqwHxMlRdkxtn6/EPKyqKpHqTl/4nRZsRNLpZxZRpPQ==", + "dev": true, + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^5.0.0", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.6.tgz", + "integrity": "sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "dev": true + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true + }, + "@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/jest": { + "version": "29.5.14", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.14.tgz", + "integrity": "sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==", + "dev": true, + "requires": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "@types/jsonwebtoken": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.9.tgz", + "integrity": "sha512-uoe+GxEuHbvy12OUQct2X9JenKM3qAscquYymuQN4fMWG9DBQtykrQEFcAbVACF7qaLw9BePSodUL0kquqBJpQ==", + "dev": true, + "requires": { + "@types/ms": "*", + "@types/node": "*" + } + }, + "@types/methods": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@types/methods/-/methods-1.1.4.tgz", + "integrity": "sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==", + "dev": true + }, + "@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true + }, + "@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "dev": true + }, + "@types/multer": { + "version": "1.4.12", + "resolved": "https://registry.npmjs.org/@types/multer/-/multer-1.4.12.tgz", + "integrity": "sha512-pQ2hoqvXiJt2FP9WQVLPRO+AmiIm/ZYkavPlIQnx282u4ZrVdztx0pkh3jjpQt0Kz+YI0YhSG264y08UJKoUQg==", + "dev": true, + "requires": { + "@types/express": "*" + } + }, + "@types/node": { + "version": "22.13.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.9.tgz", + "integrity": "sha512-acBjXdRJ3A6Pb3tqnw9HZmyR3Fiol3aGxRCK1x3d+6CDAMjl7I649wpSd+yNURCjbOUGu9tqtLKnTGxmK6CyGw==", + "requires": { + "undici-types": "~6.20.0" + } + }, + "@types/qs": { + "version": "6.9.18", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.18.tgz", + "integrity": "sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==", + "dev": true + }, + "@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true + }, + "@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, + "requires": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "@types/serve-static": { + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "dev": true, + "requires": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" + } + }, + "@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true + }, + "@types/superagent": { + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-8.1.9.tgz", + "integrity": "sha512-pTVjI73witn+9ILmoJdajHGW2jkSaOzhiFYF1Rd3EQ94kymLqB9PjD9ISg7WaALC7+dCHT0FGe9T2LktLq/3GQ==", + "dev": true, + "requires": { + "@types/cookiejar": "^2.1.5", + "@types/methods": "^1.1.4", + "@types/node": "*", + "form-data": "^4.0.0" + } + }, + "@types/supertest": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-6.0.3.tgz", + "integrity": "sha512-8WzXq62EXFhJ7QsH3Ocb/iKQ/Ty9ZVWnVzoTKc9tyyFRRF3a74Tk2+TLFgaFFw364Ere+npzHKEJ6ga2LzIL7w==", + "dev": true, + "requires": { + "@types/methods": "^1.1.4", + "@types/superagent": "^8.1.0" + } + }, + "@types/yargs": { + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "acorn": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "dev": true + }, + "acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dev": true, + "requires": { + "acorn": "^8.11.0" + } + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "requires": { + "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "requires": { + "ms": "^2.1.3" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "append-field": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", + "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==" + }, + "aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" + }, + "are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "dev": true, + "requires": { + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + } + }, + "babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "dependencies": { + "istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "requires": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + } + }, + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "dev": true, + "requires": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + } + }, + "babel-preset-current-node-syntax": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz", + "integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==", + "dev": true, + "requires": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5" + } + }, + "babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "dev": true, + "requires": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==" + }, + "bcrypt": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-5.1.1.tgz", + "integrity": "sha512-AGBHOG5hPYZ5Xl9KXzU5iKq9516yEmvCKDg3ecP5kX2aB6UqTeXZxk2ELnDgDm6BQSMlLt9rDB4LoSMx0rYwww==", + "requires": { + "@mapbox/node-pre-gyp": "^1.0.11", + "node-addon-api": "^5.0.0" + } + }, + "binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true + }, + "body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "requires": { + "fill-range": "^7.1.1" + } + }, + "browserslist": { + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", + "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001688", + "electron-to-chromium": "^1.5.73", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.1" + } + }, + "bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "requires": { + "node-int64": "^0.4.0" + } + }, + "buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "requires": { + "streamsearch": "^1.1.0" + } + }, + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" + }, + "call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "requires": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + } + }, + "call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "requires": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001715", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001715.tgz", + "integrity": "sha512-7ptkFGMm2OAOgvZpwgA4yjQ5SQbrNVGdRjzH0pBdy1Fasvcr+KAeECmbCAECzTuDuoX0FCY8KzUxjf9+9kfZEw==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true + }, + "chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" + }, + "ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true + }, + "cjs-module-lexer": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", + "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", + "dev": true + }, + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true + }, + "collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "component-emitter": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", + "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" + }, + "content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "requires": { + "safe-buffer": "5.2.1" + } + }, + "content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==" + }, + "convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==" + }, + "cookie-parser": { + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.7.tgz", + "integrity": "sha512-nGUvgXnotP3BsjiLX2ypbQnWoGUPIIfHQNZkkC668ntrzGWEZVW70HDEB1qnNGMicPje6EttlIgzo51YSwNQGw==", + "requires": { + "cookie": "0.7.2", + "cookie-signature": "1.0.6" + }, + "dependencies": { + "cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==" + } + } + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "cookiejar": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", + "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", + "dev": true + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, + "create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + } + }, + "create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "dedent": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", + "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", + "dev": true, + "requires": {} + }, + "deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true + }, + "define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "requires": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" + }, + "detect-libc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==" + }, + "detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true + }, + "dezalgo": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", + "dev": true, + "requires": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + }, + "diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true + }, + "dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==" + }, + "dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "requires": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + } + }, + "ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "electron-to-chromium": { + "version": "1.5.144", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.144.tgz", + "integrity": "sha512-eJIaMRKeAzxfBSxtjYnoIAw/tdD6VIH6tHBZepZnAbE3Gyqqs5mGN87DvcldPUbVkIljTK8pY0CMcUljP64lfQ==", + "dev": true + }, + "emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" + }, + "engine.io": { + "version": "6.6.4", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.4.tgz", + "integrity": "sha512-ZCkIjSYNDyGn0R6ewHDtXgns/Zre/NT6Agvq1/WobF7JXgFff4SeDroKiCO3fNJreU9YG429Sc81o4w5ok/W5g==", + "requires": { + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.7.2", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.17.1" + }, + "dependencies": { + "cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==" + }, + "debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "requires": { + "ms": "^2.1.3" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, + "engine.io-parser": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", + "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==" + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==" + }, + "es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==" + }, + "es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "requires": { + "es-errors": "^1.3.0" + } + }, + "es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "requires": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + } + }, + "escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true + }, + "expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dev": true, + "requires": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + } + }, + "express": { + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.2", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.6.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "dev": true + }, + "fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "requires": { + "bser": "2.1.1" + } + }, + "fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "form-data": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", + "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "mime-types": "^2.1.12" + } + }, + "formidable": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.4.tgz", + "integrity": "sha512-YikH+7CUTOtP44ZTnUhR7Ic2UASBPOqmaRkRKxRbywPTe5VxF7RRCck4af9wutiZ/QKM5nME9Bie2fFaPz5Gug==", + "dev": true, + "requires": { + "@paralleldrive/cuid2": "^2.2.2", + "dezalgo": "^1.0.4", + "once": "^1.4.0" + } + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" + }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" + }, + "gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "requires": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + } + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "requires": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + } + }, + "get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true + }, + "get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "requires": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + } + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==" + }, + "graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "requires": { + "es-define-property": "^1.0.0" + } + }, + "has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==" + }, + "has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "requires": { + "has-symbols": "^1.0.3" + } + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" + }, + "hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "requires": { + "function-bind": "^1.1.2" + } + }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "requires": { + "agent-base": "6", + "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "requires": { + "ms": "^2.1.3" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", + "dev": true + }, + "import-local": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "dev": true, + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "requires": { + "hasown": "^2.0.2" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "dev": true, + "requires": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + } + }, + "istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "requires": { + "semver": "^7.5.3" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "dependencies": { + "debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "requires": { + "ms": "^2.1.3" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, + "istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, + "jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", + "dev": true, + "requires": { + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.7.0" + } + }, + "jest-changed-files": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", + "dev": true, + "requires": { + "execa": "^5.0.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" + } + }, + "jest-circus": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", + "dev": true, + "requires": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-cli": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", + "dev": true, + "requires": { + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "create-jest": "^29.7.0", + "exit": "^0.1.2", + "import-local": "^3.0.2", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "yargs": "^17.3.1" + } + }, + "jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "dev": true, + "requires": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + } + }, + "jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + } + }, + "jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", + "dev": true, + "requires": { + "detect-newline": "^3.0.0" + } + }, + "jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" + } + }, + "jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "dev": true, + "requires": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + } + }, + "jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true + }, + "jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.3.2", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + } + }, + "jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "dev": true, + "requires": { + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + } + }, + "jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + } + }, + "jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + } + }, + "jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, + "requires": {} + }, + "jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true + }, + "jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + } + }, + "jest-resolve-dependencies": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "dev": true, + "requires": { + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" + } + }, + "jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "dev": true, + "requires": { + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + } + }, + "jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, + "requires": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + } + }, + "jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", + "dev": true, + "requires": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" + } + }, + "jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" + }, + "dependencies": { + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + } + } + }, + "jest-watcher": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", + "dev": true, + "requires": { + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" + } + }, + "jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, + "requires": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true + }, + "jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "requires": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "dependencies": { + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, + "jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "requires": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true + }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true + }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" + }, + "lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" + }, + "lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" + }, + "lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" + }, + "lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + }, + "dependencies": { + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" + } + } + }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "requires": { + "tmpl": "1.0.5" + } + }, + "math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==" + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" + }, + "micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "requires": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "requires": { + "mime-db": "1.52.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" + }, + "minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==" + }, + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "requires": { + "minimist": "^1.2.6" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "multer": { + "version": "1.4.5-lts.1", + "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.5-lts.1.tgz", + "integrity": "sha512-ywPWvcDMeH+z9gQq5qYHCCy+ethsk4goepZ45GLD63fOu0YcNecQxi64nDs3qluZB+murG3/D4dJ7+dGctcCQQ==", + "requires": { + "append-field": "^1.0.0", + "busboy": "^1.0.0", + "concat-stream": "^1.5.2", + "mkdirp": "^0.5.4", + "object-assign": "^4.1.1", + "type-is": "^1.6.4", + "xtend": "^4.0.0" + } + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" + }, + "node-addon-api": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==" + }, + "node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, + "node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "dev": true + }, + "nodemon": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.9.tgz", + "integrity": "sha512-hdr1oIb2p6ZSxu3PB2JWWYS7ZQ0qvaZsc3hK8DR8f02kRzc8rjYmxAIvdz+aYC+8F2IjNaB7HMcSDg8nQpJxyg==", + "dev": true, + "requires": { + "chokidar": "^3.5.2", + "debug": "^4", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^7.5.3", + "simple-update-notifier": "^2.0.0", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "dependencies": { + "debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "requires": { + "ms": "^2.1.3" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, + "nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "requires": { + "abbrev": "1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "requires": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" + }, + "object-inspect": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==" + }, + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "requires": { + "ee-first": "1.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + }, + "dependencies": { + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + } + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "prettier": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz", + "integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==", + "dev": true + }, + "pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "requires": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + } + } + }, + "prisma": { + "version": "5.16.2", + "resolved": "https://registry.npmjs.org/prisma/-/prisma-5.16.2.tgz", + "integrity": "sha512-rFV/xoBR2hBGGlu4LPLQd4U8WVA+tSAmYyFWGPRVfj+xg7N4kiZV4lSk38htSpF+/IuHKzlrbh4SFk8Z18cI8A==", + "devOptional": true, + "requires": { + "@prisma/engines": "5.16.2" + } + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "requires": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + } + }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + } + }, + "pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true + }, + "pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", + "dev": true + }, + "qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "requires": { + "side-channel": "^1.0.4" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true + }, + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true + }, + "resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "dev": true, + "requires": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "resolve.exports": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", + "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==" + }, + "send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "dependencies": { + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, + "serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + }, + "set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "requires": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + } + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "requires": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + } + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "simple-update-notifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", + "dev": true, + "requires": { + "semver": "^7.5.3" + } + }, + "sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "socket.io": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.1.tgz", + "integrity": "sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg==", + "requires": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "cors": "~2.8.5", + "debug": "~4.3.2", + "engine.io": "~6.6.0", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.4" + }, + "dependencies": { + "debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "requires": { + "ms": "^2.1.3" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, + "socket.io-adapter": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz", + "integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==", + "requires": { + "debug": "~4.3.4", + "ws": "~8.17.1" + }, + "dependencies": { + "debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "requires": { + "ms": "^2.1.3" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, + "socket.io-parser": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", + "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", + "requires": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" + }, + "dependencies": { + "debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "requires": { + "ms": "^2.1.3" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "requires": { + "escape-string-regexp": "^2.0.0" + } + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + }, + "streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + }, + "string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "requires": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "superagent": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-9.0.2.tgz", + "integrity": "sha512-xuW7dzkUpcJq7QnhOsnNUgtYp3xRwpt2F7abdRYIpCsAt0hhUqia0EdxyXZQQpNmGtsCzYHryaKSV3q3GJnq7w==", + "dev": true, + "requires": { + "component-emitter": "^1.3.0", + "cookiejar": "^2.1.4", + "debug": "^4.3.4", + "fast-safe-stringify": "^2.1.1", + "form-data": "^4.0.0", + "formidable": "^3.5.1", + "methods": "^1.1.2", + "mime": "2.6.0", + "qs": "^6.11.0" + }, + "dependencies": { + "debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "requires": { + "ms": "^2.1.3" + } + }, + "mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, + "superstruct": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-2.0.2.tgz", + "integrity": "sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==" + }, + "supertest": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supertest/-/supertest-7.1.0.tgz", + "integrity": "sha512-5QeSO8hSrKghtcWEoPiO036fxH0Ii2wVQfFZSP0oqQhmjk8bOLhDFXr4JrvaFmPuEWUoq4znY3uSi8UzLKxGqw==", + "dev": true, + "requires": { + "methods": "^1.1.2", + "superagent": "^9.0.1" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + } + } + }, + "test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + } + }, + "tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" + }, + "touch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.1.tgz", + "integrity": "sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==", + "dev": true + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dev": true, + "requires": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + } + }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + }, + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" + }, + "typescript": { + "version": "5.8.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz", + "integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==", + "dev": true + }, + "undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true + }, + "undici-types": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==" + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" + }, + "update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "dev": true, + "requires": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" + }, + "uuid": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.0.5.tgz", + "integrity": "sha512-508e6IcKLrhxKdBbcA2b4KQZlLVp2+J5UwQ6F7Drckkc5N9ZJwFa4TgWtsww9UG8fGHbm6gbV19TdM5pQ4GaIA==" + }, + "v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, + "v8-to-istanbul": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "dependencies": { + "@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + } + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" + }, + "walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "requires": { + "makeerror": "1.0.12" + } + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "requires": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + } + }, + "ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "requires": {} + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + } + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true + }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 00000000..8241c125 --- /dev/null +++ b/package.json @@ -0,0 +1,41 @@ +{ + "scripts": { + "start": "node ./build/main.js", + "build": "tsc", + "dev": "nodemon ./src/main.ts --watch ./src", + "test": "dotenv -e .env.test -- prisma migrate dev && dotenv -e .env.test -- jest -i --coverage" + }, + "devDependencies": { + "@types/bcrypt": "^5.0.2", + "@types/cookie-parser": "^1.4.8", + "@types/cors": "^2.8.17", + "@types/express": "^5.0.0", + "@types/jest": "^29.5.14", + "@types/jsonwebtoken": "^9.0.9", + "@types/multer": "^1.4.12", + "@types/supertest": "^6.0.3", + "jest": "^29.7.0", + "nodemon": "^3.1.9", + "prettier": "^3.3.2", + "prisma": "^5.16.2", + "supertest": "^7.1.0", + "ts-jest": "^29.3.2", + "ts-node": "^10.9.2", + "typescript": "^5.8.2" + }, + "dependencies": { + "@aws-sdk/client-s3": "^3.799.0", + "@prisma/client": "^5.16.2", + "bcrypt": "^5.1.1", + "cookie-parser": "^1.4.7", + "cors": "^2.8.5", + "dotenv": "^16.4.5", + "dotenv-cli": "^8.0.0", + "express": "^4.19.2", + "jsonwebtoken": "^9.0.2", + "multer": "^1.4.5-lts.1", + "socket.io": "^4.8.1", + "superstruct": "^2.0.2", + "uuid": "^11.1.0" + } +} diff --git a/prisma/migrations/20250111082621_/migration.sql b/prisma/migrations/20250111082621_/migration.sql new file mode 100644 index 00000000..fcdea0ea --- /dev/null +++ b/prisma/migrations/20250111082621_/migration.sql @@ -0,0 +1,43 @@ +-- CreateTable +CREATE TABLE "Article" ( + "id" SERIAL NOT NULL, + "title" TEXT NOT NULL, + "content" TEXT NOT NULL, + "image" TEXT, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "Article_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Product" ( + "id" SERIAL NOT NULL, + "name" TEXT NOT NULL, + "description" TEXT NOT NULL, + "price" INTEGER NOT NULL, + "tags" TEXT[], + "images" TEXT[], + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "Product_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Comment" ( + "id" SERIAL NOT NULL, + "content" TEXT NOT NULL, + "productId" INTEGER, + "articleId" INTEGER, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "Comment_pkey" PRIMARY KEY ("id") +); + +-- AddForeignKey +ALTER TABLE "Comment" ADD CONSTRAINT "Comment_productId_fkey" FOREIGN KEY ("productId") REFERENCES "Product"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Comment" ADD CONSTRAINT "Comment_articleId_fkey" FOREIGN KEY ("articleId") REFERENCES "Article"("id") ON DELETE CASCADE ON UPDATE CASCADE; diff --git a/prisma/migrations/20250304075708_add_user/migration.sql b/prisma/migrations/20250304075708_add_user/migration.sql new file mode 100644 index 00000000..ed2457f7 --- /dev/null +++ b/prisma/migrations/20250304075708_add_user/migration.sql @@ -0,0 +1,15 @@ +-- CreateTable +CREATE TABLE "User" ( + "id" SERIAL NOT NULL, + "email" TEXT NOT NULL, + "nickname" TEXT NOT NULL, + "image" TEXT, + "password" TEXT NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "User_pkey" PRIMARY KEY ("id") +); + +-- CreateIndex +CREATE UNIQUE INDEX "User_email_key" ON "User"("email"); diff --git a/prisma/migrations/20250304082334_authorization/migration.sql b/prisma/migrations/20250304082334_authorization/migration.sql new file mode 100644 index 00000000..9e47895b --- /dev/null +++ b/prisma/migrations/20250304082334_authorization/migration.sql @@ -0,0 +1,31 @@ +/* + Warnings: + + - Added the required column `userId` to the `Article` table without a default value. This is not possible if the table is not empty. + - Added the required column `userId` to the `Comment` table without a default value. This is not possible if the table is not empty. + - Added the required column `userId` to the `Product` table without a default value. This is not possible if the table is not empty. + +*/ + +-- Delete ALL Articles, Comments, Products +DELETE FROM "Article"; +DELETE FROM "Comment"; +DELETE FROM "Product"; + +-- AlterTable +ALTER TABLE "Article" ADD COLUMN "userId" INTEGER NOT NULL; + +-- AlterTable +ALTER TABLE "Comment" ADD COLUMN "userId" INTEGER NOT NULL; + +-- AlterTable +ALTER TABLE "Product" ADD COLUMN "userId" INTEGER NOT NULL; + +-- AddForeignKey +ALTER TABLE "Article" ADD CONSTRAINT "Article_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Product" ADD CONSTRAINT "Product_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Comment" ADD CONSTRAINT "Comment_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE; diff --git a/prisma/migrations/20250304094902_add_favorite_like/migration.sql b/prisma/migrations/20250304094902_add_favorite_like/migration.sql new file mode 100644 index 00000000..918a2e4b --- /dev/null +++ b/prisma/migrations/20250304094902_add_favorite_like/migration.sql @@ -0,0 +1,33 @@ +-- CreateTable +CREATE TABLE "Favorite" ( + "id" SERIAL NOT NULL, + "productId" INTEGER NOT NULL, + "userId" INTEGER NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "Favorite_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Like" ( + "id" SERIAL NOT NULL, + "articleId" INTEGER NOT NULL, + "userId" INTEGER NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "Like_pkey" PRIMARY KEY ("id") +); + +-- AddForeignKey +ALTER TABLE "Favorite" ADD CONSTRAINT "Favorite_productId_fkey" FOREIGN KEY ("productId") REFERENCES "Product"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Favorite" ADD CONSTRAINT "Favorite_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Like" ADD CONSTRAINT "Like_articleId_fkey" FOREIGN KEY ("articleId") REFERENCES "Article"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Like" ADD CONSTRAINT "Like_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE; diff --git a/prisma/migrations/20250429043356_/migration.sql b/prisma/migrations/20250429043356_/migration.sql new file mode 100644 index 00000000..ea1d6546 --- /dev/null +++ b/prisma/migrations/20250429043356_/migration.sql @@ -0,0 +1,15 @@ +-- CreateTable +CREATE TABLE "Notification" ( + "id" SERIAL NOT NULL, + "userId" INTEGER NOT NULL, + "type" TEXT NOT NULL, + "payload" JSONB NOT NULL, + "read" BOOLEAN NOT NULL DEFAULT false, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "Notification_pkey" PRIMARY KEY ("id") +); + +-- AddForeignKey +ALTER TABLE "Notification" ADD CONSTRAINT "Notification_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE; diff --git a/prisma/migrations/20250429061529_/migration.sql b/prisma/migrations/20250429061529_/migration.sql new file mode 100644 index 00000000..ef0d145a --- /dev/null +++ b/prisma/migrations/20250429061529_/migration.sql @@ -0,0 +1,12 @@ +/* + Warnings: + + - Changed the type of `type` on the `Notification` table. No cast exists, the column would be dropped and recreated, which cannot be done if there is data, since the column is required. + +*/ +-- CreateEnum +CREATE TYPE "NotificationType" AS ENUM ('PRICE_CHANGED', 'NEW_COMMENT'); + +-- AlterTable +ALTER TABLE "Notification" DROP COLUMN "type", +ADD COLUMN "type" "NotificationType" NOT NULL; diff --git a/prisma/migrations/migration_lock.toml b/prisma/migrations/migration_lock.toml new file mode 100644 index 00000000..fbffa92c --- /dev/null +++ b/prisma/migrations/migration_lock.toml @@ -0,0 +1,3 @@ +# Please do not edit this file manually +# It should be added in your version-control system (i.e. Git) +provider = "postgresql" \ No newline at end of file diff --git a/prisma/schema.prisma b/prisma/schema.prisma new file mode 100644 index 00000000..f3fab9d3 --- /dev/null +++ b/prisma/schema.prisma @@ -0,0 +1,108 @@ +// This is your Prisma schema file, +// learn more about it in the docs: https://pris.ly/d/prisma-schema + +// Looking for ways to speed up your queries, or scale easily with your serverless or edge functions? +// Try Prisma Accelerate: https://pris.ly/cli/accelerate-init + +generator client { + provider = "prisma-client-js" +} + +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} + +enum NotificationType { + PRICE_CHANGED + NEW_COMMENT +} + +model Article { + id Int @id @default(autoincrement()) + title String + content String + image String? + comments Comment[] + user User @relation(fields: [userId], references: [id]) + userId Int + likes Like[] + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt +} + +model Product { + id Int @id @default(autoincrement()) + name String + description String + price Int + tags String[] + images String[] + comments Comment[] + user User @relation(fields: [userId], references: [id]) + userId Int + favorites Favorite[] + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt +} + +model Comment { + id Int @id @default(autoincrement()) + content String + product Product? @relation(fields: [productId], references: [id], onDelete: Cascade) + productId Int? + article Article? @relation(fields: [articleId], references: [id], onDelete: Cascade) + articleId Int? + user User @relation(fields: [userId], references: [id]) + userId Int + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt +} + +model User { + id Int @id @default(autoincrement()) + email String @unique + nickname String + image String? + password String + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + articles Article[] + products Product[] + comments Comment[] + favorites Favorite[] + likes Like[] + notifications Notification[] +} + +model Favorite { + id Int @id @default(autoincrement()) + product Product @relation(fields: [productId], references: [id]) + productId Int + user User @relation(fields: [userId], references: [id]) + userId Int + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt +} + +model Like { + id Int @id @default(autoincrement()) + article Article @relation(fields: [articleId], references: [id]) + articleId Int + user User @relation(fields: [userId], references: [id]) + userId Int + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt +} + +model Notification { + id Int @id @default(autoincrement()) + user User @relation(fields: [userId], references: [id]) + userId Int + type NotificationType + payload Json + read Boolean @default(false) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt +} + diff --git a/public/.gitkeep b/public/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/public/socket-client-test.html b/public/socket-client-test.html new file mode 100644 index 00000000..2dad3fc0 --- /dev/null +++ b/public/socket-client-test.html @@ -0,0 +1,37 @@ + + + + + + Document + + +

Socket.IO client test

+
+ + +
+ + + + + diff --git a/src/app.ts b/src/app.ts new file mode 100644 index 00000000..d8c95447 --- /dev/null +++ b/src/app.ts @@ -0,0 +1,38 @@ +import express from 'express'; +import cors from 'cors'; +import path from 'path'; +import { createServer } from 'http'; +import cookieParser from 'cookie-parser'; +import { PUBLIC_PATH, STATIC_PATH } from './lib/constants'; +import articlesRouter from './routers/articlesRouter'; +import productsRouter from './routers/productsRouter'; +import commentsRouter from './routers/commentsRouter'; +import imagesRouter from './routers/imagesRouter'; +import authRouter from './routers/authRouter'; +import usersRouter from './routers/usersRouter'; +import { defaultNotFoundHandler, globalErrorHandler } from './controllers/errorController'; +import socketService from './services/socketService'; +import notificationsRouter from './routers/notificationsRouter'; + +const app = express(); + +app.use(cors()); +app.use(express.json()); +app.use(cookieParser()); +app.use(STATIC_PATH, express.static(path.resolve(process.cwd(), PUBLIC_PATH))); + +app.use('/articles', articlesRouter); +app.use('/products', productsRouter); +app.use('/comments', commentsRouter); +app.use('/images', imagesRouter); +app.use('/auth', authRouter); +app.use('/users', usersRouter); +app.use('/notifications', notificationsRouter); + +app.use(defaultNotFoundHandler); +app.use(globalErrorHandler); + +const server = createServer(app); +socketService.initialize(server); + +export default server; diff --git a/src/controllers/articlesController.ts b/src/controllers/articlesController.ts new file mode 100644 index 00000000..84339f2e --- /dev/null +++ b/src/controllers/articlesController.ts @@ -0,0 +1,79 @@ +import { Request, Response } from 'express'; +import { create } from 'superstruct'; +import { IdParamsStruct } from '../structs/commonStructs'; +import { + CreateArticleBodyStruct, + UpdateArticleBodyStruct, + GetArticleListParamsStruct, +} from '../structs/articlesStructs'; +import { CreateCommentBodyStruct, GetCommentListParamsStruct } from '../structs/commentsStruct'; +import * as articlesService from '../services/articlesService'; +import * as commentsService from '../services/commentsService'; +import * as likesService from '../services/likesService'; + +export async function createArticle(req: Request, res: Response) { + const data = create(req.body, CreateArticleBodyStruct); + const article = await articlesService.createArticle({ + ...data, + userId: req.user.id, + }); + res.status(201).send(article); +} + +export async function getArticle(req: Request, res: Response) { + const { id } = create(req.params, IdParamsStruct); + const article = await articlesService.getArticle(id); + res.send(article); +} + +export async function updateArticle(req: Request, res: Response) { + const { id } = create(req.params, IdParamsStruct); + const data = create(req.body, UpdateArticleBodyStruct); + const updatedArticle = await articlesService.updateArticle(id, { + ...data, + userId: req.user.id, + }); + res.send(updatedArticle); +} + +export async function deleteArticle(req: Request, res: Response) { + const { id } = create(req.params, IdParamsStruct); + await articlesService.deleteArticle(id, req.user.id); + res.status(204).send(); +} + +export async function getArticleList(req: Request, res: Response) { + const params = create(req.query, GetArticleListParamsStruct); + const result = await articlesService.getArticleList(params); + res.send(result); +} + +export async function createComment(req: Request, res: Response) { + const { id: articleId } = create(req.params, IdParamsStruct); + const { content } = create(req.body, CreateCommentBodyStruct); + const createdComment = await commentsService.createComment({ + articleId, + content, + userId: req.user.id, + }); + res.status(201).send(createdComment); +} + +export async function getCommentList(req: Request, res: Response) { + const { id: articleId } = create(req.params, IdParamsStruct); + const { cursor, limit } = create(req.query, GetCommentListParamsStruct); + const result = await commentsService.getCommentListByArticleId(articleId, { cursor, limit }); + res.send(result); +} + +export async function createLike(req: Request, res: Response) { + const { id: articleId } = create(req.params, IdParamsStruct); + await likesService.createLike(articleId, req.user.id); + res.status(201).send(); +} + +export async function deleteLike(req: Request, res: Response) { + const { id: articleId } = create(req.params, IdParamsStruct); + await likesService.deleteLike(articleId, req.user.id); + res.status(204).send(); +} diff --git a/src/controllers/authController.ts b/src/controllers/authController.ts new file mode 100644 index 00000000..ed29f511 --- /dev/null +++ b/src/controllers/authController.ts @@ -0,0 +1,50 @@ +import { Request, Response } from 'express'; +import { create } from 'superstruct'; +import { ACCESS_TOKEN_COOKIE_NAME, REFRESH_TOKEN_COOKIE_NAME, NODE_ENV } from '../lib/constants'; +import { LoginBodyStruct, RegisterBodyStruct } from '../structs/authStructs'; +import * as authService from '../services/authService'; +import userResponseDTO from '../dto/userResponseDTO'; + +export async function register(req: Request, res: Response) { + const data = create(req.body, RegisterBodyStruct); + const user = await authService.register(data); + res.status(201).json(userResponseDTO(user)); +} + +export async function login(req: Request, res: Response) { + const data = create(req.body, LoginBodyStruct); + const { accessToken, refreshToken } = await authService.login(data); + setTokenCookies(res, accessToken, refreshToken); + res.status(200).send(); +} + +export async function logout(req: Request, res: Response) { + clearTokenCookies(res); + res.status(200).send(); +} + +export async function refreshToken(req: Request, res: Response) { + const refreshToken = req.cookies[REFRESH_TOKEN_COOKIE_NAME]; + const { accessToken, refreshToken: newRefreshToken } = await authService.refreshToken(refreshToken); + setTokenCookies(res, accessToken, newRefreshToken); + res.status(200).send(); +} + +function setTokenCookies(res: Response, accessToken: string, refreshToken: string) { + res.cookie(ACCESS_TOKEN_COOKIE_NAME, accessToken, { + httpOnly: true, + secure: NODE_ENV === 'production', + maxAge: 1 * 60 * 60 * 1000, // 1 hour + }); + res.cookie(REFRESH_TOKEN_COOKIE_NAME, refreshToken, { + httpOnly: true, + secure: NODE_ENV === 'production', + maxAge: 7 * 24 * 60 * 60 * 1000, // 7 days + path: '/auth/refresh', + }); +} + +function clearTokenCookies(res: Response) { + res.clearCookie(ACCESS_TOKEN_COOKIE_NAME); + res.clearCookie(REFRESH_TOKEN_COOKIE_NAME); +} diff --git a/src/controllers/commentsController.ts b/src/controllers/commentsController.ts new file mode 100644 index 00000000..3551cc97 --- /dev/null +++ b/src/controllers/commentsController.ts @@ -0,0 +1,18 @@ +import { Request, Response } from 'express'; +import { create } from 'superstruct'; +import { UpdateCommentBodyStruct } from '../structs/commentsStruct'; +import { IdParamsStruct } from '../structs/commonStructs'; +import * as commentsService from '../services/commentsService'; + +export async function updateComment(req: Request, res: Response) { + const { id } = create(req.params, IdParamsStruct); + const { content } = create(req.body, UpdateCommentBodyStruct); + const updatedComment = await commentsService.updateComment(id, req.user.id, content); + res.send(updatedComment); +} + +export async function deleteComment(req: Request, res: Response) { + const { id } = create(req.params, IdParamsStruct); + await commentsService.deleteComment(id, req.user.id); + res.status(204).send(); +} diff --git a/src/controllers/errorController.ts b/src/controllers/errorController.ts new file mode 100644 index 00000000..c3a9fd78 --- /dev/null +++ b/src/controllers/errorController.ts @@ -0,0 +1,50 @@ +import { Request, Response, NextFunction } from 'express'; +import { StructError } from 'superstruct'; +import BadRequestError from '../lib/errors/BadRequestError'; +import NotFoundError from '../lib/errors/NotFoundError'; +import UnauthorizedError from '../lib/errors/UnauthorizedError'; +import ForbiddenError from '../lib/errors/ForbiddenError'; + +export function defaultNotFoundHandler(req: Request, res: Response, next: NextFunction) { + res.status(404).send({ message: 'Not found' }); +} + +export function globalErrorHandler(err: Error, req: Request, res: Response, next: NextFunction) { + /** From superstruct or application error */ + if (err instanceof StructError || err instanceof BadRequestError) { + res.status(400).send({ message: err.message }); + return; + } + + /** From express.json middleware */ + if (err instanceof SyntaxError && 'body' in err) { + res.status(400).send({ message: 'Invalid JSON' }); + return; + } + + /** Prisma error codes */ + if ('code' in err) { + console.error(err); + res.status(500).send({ message: 'Failed to process data' }); + return; + } + + /** Application errors */ + if (err instanceof NotFoundError) { + res.status(404).send({ message: err.message }); + return; + } + + if (err instanceof UnauthorizedError) { + res.status(401).send({ message: err.message }); + return; + } + + if (err instanceof ForbiddenError) { + res.status(403).send({ message: err.message }); + return; + } + + console.error(err); + res.status(500).send({ message: 'Internal server error' }); +} diff --git a/src/controllers/imagesController.ts b/src/controllers/imagesController.ts new file mode 100644 index 00000000..38b5a870 --- /dev/null +++ b/src/controllers/imagesController.ts @@ -0,0 +1,9 @@ +import { Request, Response } from 'express'; +import * as imagesService from '../services/imagesService'; + +export const upload = imagesService.upload; + +export async function uploadImage(req: Request, res: Response) { + const url = await imagesService.uploadImage(req.file); + res.send({ url }); +} diff --git a/src/controllers/notificationsController.ts b/src/controllers/notificationsController.ts new file mode 100644 index 00000000..8b3f5feb --- /dev/null +++ b/src/controllers/notificationsController.ts @@ -0,0 +1,10 @@ +import { Request, Response } from 'express'; +import { create } from 'superstruct'; +import { IdParamsStruct } from '../structs/commonStructs'; +import * as notificationsService from '../services/notificationsService'; + +export async function readNotification(req: Request, res: Response) { + const { id } = create(req.params, IdParamsStruct); + await notificationsService.readNotificationById(req.user?.id, id); + res.status(200).send(); +} diff --git a/src/controllers/productsController.ts b/src/controllers/productsController.ts new file mode 100644 index 00000000..a713a6c9 --- /dev/null +++ b/src/controllers/productsController.ts @@ -0,0 +1,79 @@ +import { Request, Response } from 'express'; +import { create } from 'superstruct'; +import { IdParamsStruct } from '../structs/commonStructs'; +import { + CreateProductBodyStruct, + GetProductListParamsStruct, + UpdateProductBodyStruct, +} from '../structs/productsStruct'; +import { CreateCommentBodyStruct, GetCommentListParamsStruct } from '../structs/commentsStruct'; +import * as productsService from '../services/productsService'; +import * as commentsService from '../services/commentsService'; +import * as favoritesService from '../services/favoritesService'; + +export async function createProduct(req: Request, res: Response) { + const data = create(req.body, CreateProductBodyStruct); + const createdProduct = await productsService.createProduct({ + ...data, + userId: req.user.id, + }); + res.status(201).send(createdProduct); +} + +export async function getProduct(req: Request, res: Response) { + const { id } = create(req.params, IdParamsStruct); + const product = await productsService.getProduct(id); + res.send(product); +} + +export async function updateProduct(req: Request, res: Response) { + const { id } = create(req.params, IdParamsStruct); + const data = create(req.body, UpdateProductBodyStruct); + const updatedProduct = await productsService.updateProduct(id, { + ...data, + userId: req.user.id, + }); + res.send(updatedProduct); +} + +export async function deleteProduct(req: Request, res: Response) { + const { id } = create(req.params, IdParamsStruct); + await productsService.deleteProduct(id, req.user.id); + res.status(204).send(); +} + +export async function getProductList(req: Request, res: Response) { + const params = create(req.query, GetProductListParamsStruct); + const result = await productsService.getProductList(params, { + userId: req.user?.id, + }); + res.send(result); +} + +export async function createComment(req: Request, res: Response) { + const data = create(req.body, CreateCommentBodyStruct); + const createdComment = await commentsService.createComment({ + ...data, + userId: req.user.id, + }); + res.status(201).send(createdComment); +} + +export async function getCommentList(req: Request, res: Response) { + const { id: productId } = create(req.params, IdParamsStruct); + const params = create(req.query, GetCommentListParamsStruct); + const result = await commentsService.getCommentListByProductId(productId, params); + res.send(result); +} + +export async function createFavorite(req: Request, res: Response) { + const { id: productId } = create(req.params, IdParamsStruct); + await favoritesService.createFavorite(productId, req.user.id); + res.status(201).send(); +} + +export async function deleteFavorite(req: Request, res: Response) { + const { id: productId } = create(req.params, IdParamsStruct); + await favoritesService.deleteFavorite(productId, req.user.id); + res.status(204).send(); +} diff --git a/src/controllers/usersController.ts b/src/controllers/usersController.ts new file mode 100644 index 00000000..994fa0a6 --- /dev/null +++ b/src/controllers/usersController.ts @@ -0,0 +1,75 @@ +import { Request, Response } from 'express'; +import { create } from 'superstruct'; +import { + UpdateMeBodyStruct, + UpdatePasswordBodyStruct, + GetMyProductListParamsStruct, + GetMyFavoriteListParamsStruct, + GetMyNotificationsParamsStruct, +} from '../structs/usersStructs'; +import * as usersService from '../services/usersService'; +import * as authService from '../services/authService'; +import * as notificationsService from '../services/notificationsService'; +import userResponseDTO from '../dto/userResponseDTO'; + +export async function getMe(req: Request, res: Response) { + const user = await usersService.getUser(req.user.id); + res.send(userResponseDTO(user)); +} + +export async function updateMe(req: Request, res: Response) { + const data = create(req.body, UpdateMeBodyStruct); + const updatedUser = await usersService.updateUser(req.user.id, data); + res.status(200).send(userResponseDTO(updatedUser)); +} + +export async function updateMyPassword(req: Request, res: Response) { + const { password, newPassword } = create(req.body, UpdatePasswordBodyStruct); + await authService.updateMyPassword(req.user.id, password, newPassword); + res.status(200).send(); +} + +export async function getMyProductList(req: Request, res: Response) { + const { page, pageSize, orderBy, keyword } = create(req.query, GetMyProductListParamsStruct); + const { list, totalCount } = await usersService.getMyProductList(req.user.id, { + page, + pageSize, + orderBy, + keyword, + }); + + res.send({ + list, + totalCount, + }); +} + +export async function getMyFavoriteList(req: Request, res: Response) { + const { page, pageSize, orderBy, keyword } = create(req.query, GetMyFavoriteListParamsStruct); + const { list, totalCount } = await usersService.getMyFavoriteList(req.user.id, { + page, + pageSize, + orderBy, + keyword, + }); + + res.send({ + list, + totalCount, + }); +} + +export async function getMyNotifications(req: Request, res: Response) { + const { cursor, limit } = create(req.query, GetMyNotificationsParamsStruct); + const { list, totalCount, unreadCount, nextCursor } = await notificationsService.getMyNotifications(req.user.id, { + cursor, + limit, + }); + + res.send({ + list, + nextCursor, + unreadCount, + totalCount, + }); +} diff --git a/src/dto/userResponseDTO.ts b/src/dto/userResponseDTO.ts new file mode 100644 index 00000000..b5c6f8ad --- /dev/null +++ b/src/dto/userResponseDTO.ts @@ -0,0 +1,8 @@ +import User from '../types/User'; + +const userResponseDTO = (user: User) => { + const { password, ...userWithoutPassword } = user; + return userWithoutPassword; +}; + +export default userResponseDTO; diff --git a/src/lib/constants.ts b/src/lib/constants.ts new file mode 100644 index 00000000..4e0d17e7 --- /dev/null +++ b/src/lib/constants.ts @@ -0,0 +1,26 @@ +import dotenv from 'dotenv'; +dotenv.config(); + +export const ACCESS_TOKEN_COOKIE_NAME = 'access-token'; +export const REFRESH_TOKEN_COOKIE_NAME = 'refresh-token'; +export const DATABASE_URL = process.env.DATABASE_URL || ''; +export const JWT_ACCESS_TOKEN_SECRET = process.env.JWT_ACCESS_TOKEN_SECRET || ''; +export const JWT_REFRESH_TOKEN_SECRET = process.env.JWT_REFRESH_TOKEN_SECRET || ''; +export const NODE_ENV = process.env.NODE_ENV || 'development'; +export const BASE_URL = process.env.BASE_URL || 'http://localhost:3000'; +export const PORT = process.env.PORT || 3000; +export const PUBLIC_PATH = './public'; +export const STATIC_PATH = '/public'; + +export const AWS_REGION = process.env.AWS_REGION || ''; +export const AWS_ACCESS_KEY_ID = process.env.AWS_ACCESS_KEY_ID || ''; +export const AWS_SECRET_ACCESS_KEY = process.env.AWS_SECRET_ACCESS_KEY || ''; +export const AWS_S3_BUCKET_NAME = process.env.AWS_S3_BUCKET_NAME || ''; + +if (NODE_ENV === 'production') { + if (!AWS_REGION || !AWS_ACCESS_KEY_ID || !AWS_SECRET_ACCESS_KEY || !AWS_S3_BUCKET_NAME) { + throw new Error( + 'AWS_REGION, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, and AWS_S3_BUCKET_NAME must be set in production', + ); + } +} diff --git a/src/lib/errors/BadRequestError.ts b/src/lib/errors/BadRequestError.ts new file mode 100644 index 00000000..4bafd09a --- /dev/null +++ b/src/lib/errors/BadRequestError.ts @@ -0,0 +1,8 @@ +class BadRequestError extends Error { + constructor(message: string) { + super(message); + this.name = 'BadRequestError'; + } +} + +export default BadRequestError; diff --git a/src/lib/errors/ForbiddenError.ts b/src/lib/errors/ForbiddenError.ts new file mode 100644 index 00000000..6091711c --- /dev/null +++ b/src/lib/errors/ForbiddenError.ts @@ -0,0 +1,8 @@ +class ForbiddenError extends Error { + constructor(message: string) { + super(message); + this.name = 'ForbiddenError'; + } +} + +export default ForbiddenError; diff --git a/src/lib/errors/NotFoundError.ts b/src/lib/errors/NotFoundError.ts new file mode 100644 index 00000000..cf993d9a --- /dev/null +++ b/src/lib/errors/NotFoundError.ts @@ -0,0 +1,8 @@ +class NotFoundError extends Error { + constructor(modelName: string, id: number) { + super(`${modelName} with id ${id} not found`); + this.name = 'NotFoundError'; + } +} + +export default NotFoundError; diff --git a/src/lib/errors/UnauthorizedError.ts b/src/lib/errors/UnauthorizedError.ts new file mode 100644 index 00000000..980e8be4 --- /dev/null +++ b/src/lib/errors/UnauthorizedError.ts @@ -0,0 +1,8 @@ +class UnauthorizedError extends Error { + constructor(message: string) { + super(message); + this.name = 'UnauthorizedError'; + } +} + +export default UnauthorizedError; diff --git a/src/lib/prismaClient.ts b/src/lib/prismaClient.ts new file mode 100644 index 00000000..5e41d6fe --- /dev/null +++ b/src/lib/prismaClient.ts @@ -0,0 +1,3 @@ +import { PrismaClient } from '@prisma/client'; + +export const prismaClient = new PrismaClient(); diff --git a/src/lib/s3Client.ts b/src/lib/s3Client.ts new file mode 100644 index 00000000..476881c5 --- /dev/null +++ b/src/lib/s3Client.ts @@ -0,0 +1,15 @@ +import { S3Client } from '@aws-sdk/client-s3'; +import { AWS_REGION, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, NODE_ENV } from './constants'; + +const s3Client = + NODE_ENV === 'production' + ? new S3Client({ + region: AWS_REGION, + credentials: { + accessKeyId: AWS_ACCESS_KEY_ID, + secretAccessKey: AWS_SECRET_ACCESS_KEY, + }, + }) + : null; + +export default s3Client; diff --git a/src/lib/testUtils.ts b/src/lib/testUtils.ts new file mode 100644 index 00000000..b846cfc6 --- /dev/null +++ b/src/lib/testUtils.ts @@ -0,0 +1,11 @@ +import { PrismaClient } from '@prisma/client'; + +export async function clearDatabase(prismaClient: PrismaClient) { + await prismaClient.comment.deleteMany(); + await prismaClient.like.deleteMany(); + await prismaClient.article.deleteMany(); + await prismaClient.notification.deleteMany(); + await prismaClient.favorite.deleteMany(); + await prismaClient.product.deleteMany(); + await prismaClient.user.deleteMany(); +} diff --git a/src/lib/token.ts b/src/lib/token.ts new file mode 100644 index 00000000..086aa919 --- /dev/null +++ b/src/lib/token.ts @@ -0,0 +1,28 @@ +import jwt from 'jsonwebtoken'; +import { JWT_ACCESS_TOKEN_SECRET, JWT_REFRESH_TOKEN_SECRET } from './constants'; + +export function generateTokens(userId: number) { + const accessToken = jwt.sign({ id: userId }, JWT_ACCESS_TOKEN_SECRET, { + expiresIn: '1h', + }); + const refreshToken = jwt.sign({ id: userId }, JWT_REFRESH_TOKEN_SECRET, { + expiresIn: '7d', + }); + return { accessToken, refreshToken }; +} + +export function verifyAccessToken(token: string) { + const decoded = jwt.verify(token, JWT_ACCESS_TOKEN_SECRET); + if (typeof decoded === 'string') { + throw new Error('Invalid token'); + } + return { userId: decoded.id }; +} + +export function verifyRefreshToken(token: string) { + const decoded = jwt.verify(token, JWT_REFRESH_TOKEN_SECRET); + if (typeof decoded === 'string') { + throw new Error('Invalid token'); + } + return { userId: decoded.id }; +} diff --git a/src/lib/withAsync.ts b/src/lib/withAsync.ts new file mode 100644 index 00000000..624a25b7 --- /dev/null +++ b/src/lib/withAsync.ts @@ -0,0 +1,11 @@ +import { Request, Response, NextFunction, RequestHandler } from 'express'; + +export function withAsync(handler: RequestHandler) { + return async function (req: Request, res: Response, next: NextFunction) { + try { + await handler(req, res, next); + } catch (e) { + next(e); + } + }; +} diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 00000000..0fd15412 --- /dev/null +++ b/src/main.ts @@ -0,0 +1,6 @@ +import server from './app'; +import { PORT } from './lib/constants'; + +server.listen(PORT, () => { + console.log(`Server started on port ${PORT}`); +}); diff --git a/src/middlewares/authenticate.ts b/src/middlewares/authenticate.ts new file mode 100644 index 00000000..09d81725 --- /dev/null +++ b/src/middlewares/authenticate.ts @@ -0,0 +1,23 @@ +import { Request, Response, NextFunction, RequestHandler } from 'express'; +import { ACCESS_TOKEN_COOKIE_NAME } from '../lib/constants'; +import * as authService from '../services/authService'; + +function authenticate(options = { optional: false }): RequestHandler { + return async (req: Request, res: Response, next: NextFunction) => { + const accessToken = req.cookies[ACCESS_TOKEN_COOKIE_NAME]; + try { + const user = await authService.authenticate(accessToken); + req.user = user; + } catch (error) { + if (options.optional) { + next(); + return; + } + next(error); + return; + } + next(); + }; +} + +export default authenticate; diff --git a/src/repositories/articlesRepository.ts b/src/repositories/articlesRepository.ts new file mode 100644 index 00000000..dccdd493 --- /dev/null +++ b/src/repositories/articlesRepository.ts @@ -0,0 +1,95 @@ +import { Article } from '@prisma/client'; +import { prismaClient } from '../lib/prismaClient'; +import { PagePaginationParams } from '../types/pagination'; + +export async function createArticle(data: Omit) { + const createdArticle = await prismaClient.article.create({ + data, + }); + return createdArticle; +} + +export async function getArticle(id: number) { + const article = await prismaClient.article.findUnique({ where: { id } }); + return article; +} + +export async function getArticleWithLkes(id: number, { userId }: { userId?: number } = {}) { + const article = await prismaClient.article.findUnique({ + where: { id }, + include: { + likes: true, + }, + }); + + if (!article) { + return null; + } + + return { + ...article, + likes: undefined, + likeCount: article.likes.length, + isLiked: userId ? article.likes.some((like) => like.userId === userId) : undefined, + }; +} + +export async function getArticleListWithLikes( + { page, pageSize, orderBy, keyword }: PagePaginationParams, + { + userId, + }: { + userId?: number; + } = {}, +) { + const where = { + title: keyword ? { contains: keyword } : undefined, + }; + + const totalCount = await prismaClient.article.count({ where }); + const articles = await prismaClient.article.findMany({ + skip: (page - 1) * pageSize, + take: pageSize, + orderBy: orderBy === 'recent' ? { createdAt: 'desc' } : { id: 'asc' }, + where, + include: { + likes: true, + }, + }); + + const mappedArticles = articles.map((article) => ({ + ...article, + likes: undefined, + likeCount: article.likes.length, + isLiked: userId ? article.likes.some((like) => like.userId === userId) : undefined, + })); + + return { + list: mappedArticles, + totalCount, + }; +} + +export async function updateArticleWithLikes(id: number, data: Partial
) { + const updatedArticle = await prismaClient.article.update({ + where: { id }, + data, + include: { + likes: true, + }, + }); + return { + ...updatedArticle, + likes: undefined, + likeCount: updatedArticle.likes.length, + isLiked: data.userId + ? updatedArticle.likes.some((like) => like.userId === data.userId) + : undefined, + }; +} + +export async function deleteArticle(id: number) { + return prismaClient.article.delete({ + where: { id }, + }); +} diff --git a/src/repositories/commentsRepository.ts b/src/repositories/commentsRepository.ts new file mode 100644 index 00000000..d2a263b5 --- /dev/null +++ b/src/repositories/commentsRepository.ts @@ -0,0 +1,50 @@ +import { Comment } from '@prisma/client'; +import { prismaClient } from '../lib/prismaClient'; +import { CursorPaginationParams } from '../types/pagination'; + +export async function createComment(data: Omit) { + const createdComment = await prismaClient.comment.create({ + data, + }); + return createdComment; +} + +export async function getComment(id: number) { + const comment = await prismaClient.comment.findUnique({ + where: { id }, + }); + return comment; +} + +export async function getCommentList( + where: { articleId?: number; productId?: number }, + { cursor, limit }: CursorPaginationParams, +) { + const commentsWithCursor = await prismaClient.comment.findMany({ + cursor: cursor ? { id: cursor } : undefined, + take: limit + 1, + where, + orderBy: { createdAt: 'desc' }, + }); + const comments = commentsWithCursor.slice(0, limit); + const cursorComment = commentsWithCursor[commentsWithCursor.length - 1]; + const nextCursor = cursorComment ? cursorComment.id : null; + + return { + list: comments, + nextCursor, + }; +} + +export async function updateComment(id: number, data: Partial) { + return prismaClient.comment.update({ + where: { id }, + data, + }); +} + +export async function deleteComment(id: number) { + return prismaClient.comment.delete({ + where: { id }, + }); +} diff --git a/src/repositories/favoritesRepository.ts b/src/repositories/favoritesRepository.ts new file mode 100644 index 00000000..7ca91965 --- /dev/null +++ b/src/repositories/favoritesRepository.ts @@ -0,0 +1,29 @@ +import { Favorite } from '@prisma/client'; +import { prismaClient } from '../lib/prismaClient'; + +export async function createFavorite(data: Omit) { + const createdFavorite = await prismaClient.favorite.create({ + data, + }); + return createdFavorite; +} + +export async function getFavorite(productId: number, userId: number) { + const favorite = await prismaClient.favorite.findFirst({ + where: { productId, userId }, + }); + return favorite; +} + +export async function deleteFavorite(id: number) { + await prismaClient.favorite.delete({ + where: { id }, + }); +} + +export async function getFavoritesByProductId(productId: number) { + const favorites = await prismaClient.favorite.findMany({ + where: { productId }, + }); + return favorites; +} diff --git a/src/repositories/likesRepository.ts b/src/repositories/likesRepository.ts new file mode 100644 index 00000000..44a883a4 --- /dev/null +++ b/src/repositories/likesRepository.ts @@ -0,0 +1,22 @@ +import { Like } from '@prisma/client'; +import { prismaClient } from '../lib/prismaClient'; + +export async function createLike(data: Omit) { + const createdLike = await prismaClient.like.create({ + data, + }); + return createdLike; +} + +export async function getLike(articleId: number, userId: number) { + const like = await prismaClient.like.findFirst({ + where: { articleId, userId }, + }); + return like; +} + +export async function deleteLike(id: number) { + await prismaClient.like.delete({ + where: { id }, + }); +} diff --git a/src/repositories/notificationsRepository.ts b/src/repositories/notificationsRepository.ts new file mode 100644 index 00000000..a0e51c41 --- /dev/null +++ b/src/repositories/notificationsRepository.ts @@ -0,0 +1,60 @@ +import { prismaClient } from '../lib/prismaClient'; +import { Notification } from '../types/Notification'; +import { CursorPaginationParams } from '../types/pagination'; + +export async function getNotificationsByUserId(userId: number, params: CursorPaginationParams) { + const { cursor, limit } = params; + const where = { + userId, + }; + const notificationsWithCursor = await prismaClient.notification.findMany({ + cursor: cursor ? { id: cursor } : undefined, + take: limit + 1, + where, + orderBy: [{ createdAt: 'desc' }, { id: 'asc' }], + }); + const totalCount = await prismaClient.notification.count({ where }); + const unreadCount = await prismaClient.notification.count({ where: { ...where, read: false } }); + const notifications = notificationsWithCursor.slice(0, limit); + const cursorNotification = notificationsWithCursor[notificationsWithCursor.length - 1]; + const nextCursor = cursorNotification ? cursorNotification.id : null; + return { notifications, totalCount, unreadCount, nextCursor }; +} + +export async function createNotification( + data: Omit, +) { + const notification = await prismaClient.notification.create({ + data, + }); + return notification; +} + +export async function createNotifications( + data: Omit[], +) { + await prismaClient.notification.createMany({ + data, + }); +} + +export async function getNotificationById(id: number) { + const notification = await prismaClient.notification.findUnique({ + where: { id }, + }); + return notification; +} + +export async function updateNotificationById(id: number, data: Partial) { + await prismaClient.notification.update({ + where: { id }, + data, + }); +} + +export async function updateNotificationsByUserId(userId: number, data: Partial) { + await prismaClient.notification.updateMany({ + where: { userId }, + data, + }); +} diff --git a/src/repositories/productsRepository.ts b/src/repositories/productsRepository.ts new file mode 100644 index 00000000..315e820e --- /dev/null +++ b/src/repositories/productsRepository.ts @@ -0,0 +1,154 @@ +import { Product } from '@prisma/client'; +import { prismaClient } from '../lib/prismaClient'; +import { PagePaginationParams } from '../types/pagination'; + +export async function createProduct(data: Omit) { + return prismaClient.product.create({ + data, + }); +} + +export async function getProduct(id: number) { + const product = await prismaClient.product.findUnique({ + where: { id }, + }); + return product; +} + +export async function getProductWithFavorites(id: number, userId?: number) { + const product = await prismaClient.product.findUnique({ + where: { id }, + include: { favorites: true }, + }); + if (!product) { + return null; + } + + const mappedProduct = { + ...product, + favorites: undefined, + favoriteCount: product.favorites.length, + isFavorited: userId + ? product.favorites.some((favorite) => favorite.userId === userId) + : undefined, + }; + return mappedProduct; +} + +export async function getProductListWithFavorites( + { page, pageSize, orderBy, keyword }: PagePaginationParams, + { + userId, + }: { + userId?: number; + } = {}, +) { + const where = keyword + ? { + OR: [{ name: { contains: keyword } }, { description: { contains: keyword } }], + } + : {}; + + const totalCount = await prismaClient.product.count({ + where, + }); + + const products = await prismaClient.product.findMany({ + skip: (page - 1) * pageSize, + take: pageSize, + orderBy: orderBy === 'recent' ? { id: 'desc' } : { id: 'asc' }, + where, + include: { + favorites: true, + }, + }); + + const mappedProducts = products.map((product) => ({ + ...product, + favorites: undefined, + favoriteCount: product.favorites.length, + isFavorited: + userId !== undefined + ? product.favorites.some((favorite) => favorite.userId === userId) + : undefined, + })); + + return { + list: mappedProducts, + totalCount, + }; +} + +export async function getFavoriteProductListByOwnerId( + ownerId: number, + { page, pageSize, orderBy, keyword }: PagePaginationParams, +) { + const where = keyword + ? { + OR: [{ name: { contains: keyword } }, { description: { contains: keyword } }], + } + : {}; + const totalCount = await prismaClient.product.count({ + where: { + ...where, + favorites: { + some: { + userId: ownerId, + }, + }, + }, + }); + const products = await prismaClient.product.findMany({ + skip: (page - 1) * pageSize, + take: pageSize, + orderBy: orderBy === 'recent' ? { id: 'desc' } : { id: 'asc' }, + where: { + ...where, + favorites: { + some: { + userId: ownerId, + }, + }, + }, + include: { + favorites: true, + }, + }); + + const mappedProducts = products.map((product) => ({ + ...product, + favorites: undefined, + favoriteCount: product.favorites.length, + isFavorited: true, + })); + + return { + list: mappedProducts, + totalCount, + }; +} + +export async function updateProductWithFavorites(id: number, data: Partial) { + const product = await prismaClient.product.update({ + where: { id }, + data, + include: { + favorites: true, + }, + }); + const mappedProduct = { + ...product, + favorites: undefined, + favoriteCount: product.favorites.length, + isFavorited: data.userId + ? product.favorites.some((favorite) => favorite.userId === data.userId) + : undefined, + }; + return mappedProduct; +} + +export async function deleteProduct(id: number) { + return prismaClient.product.delete({ + where: { id }, + }); +} diff --git a/src/repositories/usersRepository.ts b/src/repositories/usersRepository.ts new file mode 100644 index 00000000..c8a1cfa4 --- /dev/null +++ b/src/repositories/usersRepository.ts @@ -0,0 +1,37 @@ +import { User } from '@prisma/client'; +import { prismaClient } from '../lib/prismaClient'; + +export async function createUser(data: Omit) { + const createdUser = await prismaClient.user.create({ + data, + }); + return createdUser; +} + +export async function getUser(id: number) { + const user = await prismaClient.user.findUnique({ + where: { id }, + }); + return user; +} + +export async function getUserByEmail(email: string) { + const user = await prismaClient.user.findUnique({ + where: { email }, + }); + return user; +} + +export async function updateUser(id: number, data: Partial) { + const updatedUser = await prismaClient.user.update({ + where: { id }, + data, + }); + return updatedUser; +} + +export async function deleteUser(id: number) { + await prismaClient.user.delete({ + where: { id }, + }); +} diff --git a/src/routers/articlesRouter.test.ts b/src/routers/articlesRouter.test.ts new file mode 100644 index 00000000..68868fff --- /dev/null +++ b/src/routers/articlesRouter.test.ts @@ -0,0 +1,201 @@ +import request from 'supertest'; +import app from '../app'; +import { prismaClient } from '../lib/prismaClient'; +import { clearDatabase } from '../lib/testUtils'; + +describe('게시글 API 테스트', () => { + beforeEach(async () => { + await clearDatabase(prismaClient); + }); + + afterAll(async () => { + await prismaClient.$disconnect(); + }); + + describe('인증이 필요없는 API', () => { + describe('GET /articles', () => { + beforeEach(async () => { + const user = await prismaClient.user.create({ + data: { + email: 'test@example.com', + password: 'hashedpassword', + nickname: 'Test User', + }, + }); + + // 테스트 용 게시글 20개 생성 + for (let i = 0; i < 20; i++) { + await prismaClient.article.create({ + data: { + title: `Test Article ${i}`, + content: 'Test Content', + userId: user.id, + createdAt: new Date(Date.now() + i * 1000), + }, + }); + } + }); + + test('모든 게시글을 조회할 수 있다', async () => { + const response = await request(app).get('/articles'); + expect(response.status).toBe(200); + expect(response.body.list.length).toBe(10); + expect(response.body.totalCount).toBe(20); + expect(response.body.list[0].title).toBe('Test Article 0'); + expect(response.body.list[9].title).toBe('Test Article 9'); + }); + + test('페이지네이션을 적용할 수 있다', async () => { + const response = await request(app).get('/articles?page=2&pageSize=10'); + expect(response.status).toBe(200); + expect(response.body.list.length).toBe(10); + expect(response.body.totalCount).toBe(20); + expect(response.body.list[0].title).toBe('Test Article 10'); + expect(response.body.list[9].title).toBe('Test Article 19'); + }); + + test('키워드를 검색할 수 있다', async () => { + const response = await request(app).get('/articles?keyword=2'); + expect(response.status).toBe(200); + // 2, 12 총 2개의 게시글이 검색되어야 한다. + expect(response.body.list.length).toBe(2); + expect(response.body.totalCount).toBe(2); + expect(response.body.list[0].title).toBe('Test Article 2'); + expect(response.body.list[1].title).toBe('Test Article 12'); + }); + + test('최신순으로 정렬할 수 있다', async () => { + const response = await request(app).get('/articles?orderBy=recent'); + expect(response.status).toBe(200); + expect(response.body.list[0].title).toBe('Test Article 19'); + expect(response.body.list[9].title).toBe('Test Article 10'); + }); + }); + + describe('GET /articles/:id', () => { + test('게시글이 존재할 때 200과 게시글 상세 정보를 반환해야 한다', async () => { + // 테스트용 사용자 생성 + const user = await prismaClient.user.create({ + data: { + email: 'test@example.com', + password: 'hashedpassword', + nickname: 'Test User', + }, + }); + + // 테스트용 게시글 생성 + const article = await prismaClient.article.create({ + data: { + title: 'Test Article', + content: 'Test Content', + userId: user.id, + }, + }); + + const response = await request(app).get(`/articles/${article.id}`); + + expect(response.status).toBe(200); + expect(response.body).toMatchObject({ + id: article.id, + title: 'Test Article', + content: 'Test Content', + userId: user.id, + likeCount: 0, + }); + }); + + test('게시글이 존재하지 않을 때 404를 반환해야 한다', async () => { + const nonExistentId = 9999; + const response = await request(app).get(`/articles/${nonExistentId}`); + + expect(response.status).toBe(404); + expect(response.body).toHaveProperty('message'); + }); + }); + }); + + describe('인증이 필요한 API', () => { + describe('POST /articles', () => { + test('인증되지 않은 사용자가 게시글을 생성할 때 401을 반환해야 한다', async () => { + const response = await request(app).post('/articles'); + expect(response.status).toBe(401); + }); + + test('인증된 사용자가 게시글을 생성할 때 201을 반환해야 한다', async () => { + const agent = request.agent(app); + await agent.post('/auth/register').send({ + email: 'test@example.com', + password: 'password', + nickname: 'Test User', + image: 'test.jpg', + }); + + await agent.post('/auth/login').send({ + email: 'test@example.com', + password: 'password', + }); + + const articlePayload = { + title: 'Test Article', + content: 'Test Content', + image: 'test.jpg', + }; + + const response = await agent.post('/articles').send(articlePayload); + expect(response.status).toBe(201); + expect(response.body).toMatchObject({ + id: expect.any(Number), + title: 'Test Article', + content: 'Test Content', + image: 'test.jpg', + }); + }); + + test('잘못된 payload로 게시글 생성 시 400을 반환해야 한다', async () => { + const agent = request.agent(app); + await agent.post('/auth/register').send({ + email: 'test@example.com', + password: 'password', + nickname: 'Test User', + image: 'test.jpg', + }); + + await agent.post('/auth/login').send({ + email: 'test@example.com', + password: 'password', + }); + + const invalidPayloads = [ + { + // title이 빈 문자열 + title: '', + content: 'Test Content', + image: 'test.jpg', + }, + { + // title이 없음 + content: 'Test Content', + image: 'test.jpg', + }, + { + // content가 없음 + title: 'Test Title', + image: 'test.jpg', + }, + { + // content가 빈 문자열 + title: 'Test Title', + content: '', + image: 'test.jpg', + } + ]; + + for (const payload of invalidPayloads) { + const response = await agent.post('/articles').send(payload); + expect(response.status).toBe(400); + expect(response.body).toHaveProperty('message'); + } + }); + }); + }); +}); diff --git a/src/routers/articlesRouter.ts b/src/routers/articlesRouter.ts new file mode 100644 index 00000000..71c23154 --- /dev/null +++ b/src/routers/articlesRouter.ts @@ -0,0 +1,28 @@ +import express from 'express'; +import { withAsync } from '../lib/withAsync'; +import { + createArticle, + getArticleList, + getArticle, + updateArticle, + deleteArticle, + createComment, + getCommentList, + createLike, + deleteLike, +} from '../controllers/articlesController'; +import authenticate from '../middlewares/authenticate'; + +const articlesRouter = express.Router(); + +articlesRouter.post('/', authenticate(), withAsync(createArticle)); +articlesRouter.get('/', authenticate({ optional: true }), withAsync(getArticleList)); +articlesRouter.get('/:id', authenticate({ optional: true }), withAsync(getArticle)); +articlesRouter.patch('/:id', authenticate(), withAsync(updateArticle)); +articlesRouter.delete('/:id', authenticate(), withAsync(deleteArticle)); +articlesRouter.post('/:id/comments', authenticate(), withAsync(createComment)); +articlesRouter.get('/:id/comments', withAsync(getCommentList)); +articlesRouter.post('/:id/likes', authenticate(), withAsync(createLike)); +articlesRouter.delete('/:id/likes', authenticate(), withAsync(deleteLike)); + +export default articlesRouter; diff --git a/src/routers/authRouter.test.ts b/src/routers/authRouter.test.ts new file mode 100644 index 00000000..17241795 --- /dev/null +++ b/src/routers/authRouter.test.ts @@ -0,0 +1,232 @@ +import request from 'supertest'; +import app from '../app'; +import { prismaClient } from '../lib/prismaClient'; +import { clearDatabase } from '../lib/testUtils'; + +describe('인증 API 테스트', () => { + beforeEach(async () => { + await clearDatabase(prismaClient); + }); + + afterAll(async () => { + await prismaClient.$disconnect(); + }); + + describe('POST /auth/register', () => { + test('새로운 사용자를 등록할 수 있다', async () => { + const userData = { + email: 'test@example.com', + password: 'password123', + nickname: 'Test User', + image: 'test.jpg', + }; + + const response = await request(app) + .post('/auth/register') + .send(userData); + + expect(response.status).toBe(201); + expect(response.body).toMatchObject({ + id: expect.any(Number), + email: userData.email, + nickname: userData.nickname, + image: userData.image, + }); + }); + + test('이미 존재하는 이메일로 회원가입 시 400을 반환해야 한다', async () => { + const userData = { + email: 'test@example.com', + password: 'password123', + nickname: 'Test User', + image: 'test.jpg', + }; + + // 첫 번째 회원가입 + await request(app).post('/auth/register').send(userData); + + // 동일한 이메일로 두 번째 회원가입 시도 + const response = await request(app) + .post('/auth/register') + .send(userData); + + expect(response.status).toBe(400); + expect(response.body).toHaveProperty('message'); + }); + + test('잘못된 payload로 회원가입 시 400을 반환해야 한다', async () => { + const invalidPayloads = [ + { + // email이 없음 + password: 'password123', + nickname: 'Test User', + image: 'test.jpg', + }, + { + // email이 빈 문자열 + email: '', + password: 'password123', + nickname: 'Test User', + image: 'test.jpg', + }, + { + // password가 없음 + email: 'test@example.com', + nickname: 'Test User', + image: 'test.jpg', + }, + { + // password가 빈 문자열 + email: 'test@example.com', + password: '', + nickname: 'Test User', + image: 'test.jpg', + }, + { + // nickname이 없음 + email: 'test@example.com', + password: 'password123', + image: 'test.jpg', + }, + { + // nickname이 빈 문자열 + email: 'test@example.com', + password: 'password123', + nickname: '', + image: 'test.jpg', + }, + ]; + + for (const payload of invalidPayloads) { + const response = await request(app) + .post('/auth/register') + .send(payload); + + expect(response.status).toBe(400); + expect(response.body).toHaveProperty('message'); + } + }); + }); + + describe('POST /auth/login', () => { + beforeEach(async () => { + // 테스트용 사용자 생성 + await request(app).post('/auth/register').send({ + email: 'test@example.com', + password: 'password123', + nickname: 'Test User', + image: 'test.jpg', + }); + }); + + test('올바른 이메일과 비밀번호로 로그인할 수 있다', async () => { + const response = await request(app) + .post('/auth/login') + .send({ + email: 'test@example.com', + password: 'password123', + }); + + expect(response.status).toBe(200); + expect(response.headers['set-cookie']).toEqual( + expect.arrayContaining([ + expect.stringContaining('access-token='), + expect.stringContaining('refresh-token='), + ]) + ); + }); + + test('잘못된 비밀번호로 로그인 시 400을 반환해야 한다', async () => { + const response = await request(app) + .post('/auth/login') + .send({ + email: 'test@example.com', + password: 'wrongpassword', + }); + + expect(response.status).toBe(400); + expect(response.body).toHaveProperty('message'); + }); + + test('존재하지 않는 이메일로 로그인 시 400을 반환해야 한다', async () => { + const response = await request(app) + .post('/auth/login') + .send({ + email: 'nonexistent@example.com', + password: 'password123', + }); + + expect(response.status).toBe(400); + expect(response.body).toHaveProperty('message'); + }); + }); + + describe('POST /auth/logout', () => { + test('로그아웃할 수 있다', async () => { + const agent = request.agent(app); + + // 회원가입 + await agent.post('/auth/register').send({ + email: 'test@example.com', + password: 'password123', + nickname: 'Test User', + image: 'test.jpg', + }); + + // 로그인 + await agent.post('/auth/login').send({ + email: 'test@example.com', + password: 'password123', + }); + + // 로그아웃 + const response = await agent.post('/auth/logout'); + + expect(response.status).toBe(200); + expect(response.headers['set-cookie']).toEqual( + expect.arrayContaining([ + expect.stringContaining('access-token=;'), + expect.stringContaining('refresh-token=;'), + ]) + ); + }); + }); + + describe('POST /auth/refresh', () => { + test('리프레시 토큰으로 새로운 액세스 토큰을 발급받을 수 있다', async () => { + const agent = request.agent(app); + + // 회원가입 + await agent.post('/auth/register').send({ + email: 'test@example.com', + password: 'password123', + nickname: 'Test User', + image: 'test.jpg', + }); + + // 로그인 + await agent.post('/auth/login').send({ + email: 'test@example.com', + password: 'password123', + }); + + // 토큰 갱신 + const response = await agent.post('/auth/refresh'); + + expect(response.status).toBe(200); + expect(response.headers['set-cookie']).toEqual( + expect.arrayContaining([ + expect.stringContaining('access-token='), + expect.stringContaining('refresh-token='), + ]) + ); + }); + + test('리프레시 토큰이 없을 때 400을 반환해야 한다', async () => { + const response = await request(app).post('/auth/refresh'); + + expect(response.status).toBe(400); + expect(response.body).toHaveProperty('message'); + }); + }); +}); diff --git a/src/routers/authRouter.ts b/src/routers/authRouter.ts new file mode 100644 index 00000000..f0650c29 --- /dev/null +++ b/src/routers/authRouter.ts @@ -0,0 +1,12 @@ +import express from 'express'; +import { register, login, logout, refreshToken } from '../controllers/authController'; +import { withAsync } from '../lib/withAsync'; + +const authRouter = express.Router(); + +authRouter.post('/register', withAsync(register)); +authRouter.post('/login', withAsync(login)); +authRouter.post('/logout', withAsync(logout)); +authRouter.post('/refresh', withAsync(refreshToken)); + +export default authRouter; diff --git a/src/routers/commentsRouter.ts b/src/routers/commentsRouter.ts new file mode 100644 index 00000000..f0da623c --- /dev/null +++ b/src/routers/commentsRouter.ts @@ -0,0 +1,11 @@ +import express from 'express'; +import { withAsync } from '../lib/withAsync'; +import { updateComment, deleteComment } from '../controllers/commentsController'; +import authenticate from '../middlewares/authenticate'; + +const commentsRouter = express.Router(); + +commentsRouter.patch('/:id', authenticate(), withAsync(updateComment)); +commentsRouter.delete('/:id', authenticate(), withAsync(deleteComment)); + +export default commentsRouter; diff --git a/src/routers/imagesRouter.ts b/src/routers/imagesRouter.ts new file mode 100644 index 00000000..9cd85944 --- /dev/null +++ b/src/routers/imagesRouter.ts @@ -0,0 +1,9 @@ +import express from 'express'; +import { withAsync } from '../lib/withAsync'; +import { upload, uploadImage } from '../controllers/imagesController'; + +const imagesRouter = express.Router(); + +imagesRouter.post('/upload', upload.single('image'), withAsync(uploadImage)); + +export default imagesRouter; diff --git a/src/routers/notificationsRouter.ts b/src/routers/notificationsRouter.ts new file mode 100644 index 00000000..7a183ba7 --- /dev/null +++ b/src/routers/notificationsRouter.ts @@ -0,0 +1,10 @@ +import express from 'express'; +import { withAsync } from '../lib/withAsync'; +import authenticate from '../middlewares/authenticate'; +import { readNotification } from '../controllers/notificationsController'; + +const notificationsRouter = express.Router(); + +notificationsRouter.patch('/:id/read', authenticate(), withAsync(readNotification)); + +export default notificationsRouter; diff --git a/src/routers/productsRouter.test.ts b/src/routers/productsRouter.test.ts new file mode 100644 index 00000000..95b8a94b --- /dev/null +++ b/src/routers/productsRouter.test.ts @@ -0,0 +1,243 @@ +import request from 'supertest'; +import app from '../app'; +import { prismaClient } from '../lib/prismaClient'; +import { clearDatabase } from '../lib/testUtils'; + +describe('상품 API 테스트', () => { + beforeEach(async () => { + await clearDatabase(prismaClient); + }); + + + afterAll(async () => { + await prismaClient.$disconnect(); + }); + + describe('인증이 필요없는 API', () => { + describe('GET /products', () => { + beforeEach(async () => { + const user = await prismaClient.user.create({ + data: { + email: 'test@example.com', + password: 'hashedpassword', + nickname: 'Test User', + }, + }); + + // 테스트 용 상품 20개 생성 + for (let i = 0; i < 20; i++) { + await prismaClient.product.create({ + data: { + name: `Test Product ${i}`, + description: 'Test Description', + price: 10000, + userId: user.id, + tags: ['test', 'product'], + images: ['test.jpg', 'test2.jpg'], + createdAt: new Date(Date.now() + i * 1000), + }, + }); + } + }); + + test('모든 상품을 조회할 수 있다', async () => { + const response = await request(app).get('/products'); + expect(response.status).toBe(200); + expect(response.body.list.length).toBe(10); + expect(response.body.totalCount).toBe(20); + expect(response.body.list[0].name).toBe('Test Product 0'); + expect(response.body.list[9].name).toBe('Test Product 9'); + }); + + test('페이지네이션을 적용할 수 있다', async () => { + const response = await request(app).get('/products?page=2&pageSize=10'); + expect(response.status).toBe(200); + expect(response.body.list.length).toBe(10); + expect(response.body.totalCount).toBe(20); + expect(response.body.list[0].name).toBe('Test Product 10'); + expect(response.body.list[9].name).toBe('Test Product 19'); + }); + + test('키워드를 검색할 수 있다', async () => { + const response = await request(app).get('/products?keyword=2'); + expect(response.status).toBe(200); + // 2, 12 총 2개의 상품이 검색되어야 한다. + expect(response.body.list.length).toBe(2); + expect(response.body.totalCount).toBe(2); + expect(response.body.list[0].name).toBe('Test Product 2'); + expect(response.body.list[1].name).toBe('Test Product 12'); + }); + + test('최신순으로 정렬할 수 있다', async () => { + const response = await request(app).get('/products?orderBy=recent'); + expect(response.status).toBe(200); + expect(response.body.list[0].name).toBe('Test Product 19'); + expect(response.body.list[9].name).toBe('Test Product 10'); + }); + }); + + describe('GET /products/:id', () => { + test('상품이 존재할 때 200과 상품 상세 정보를 반환해야 한다', async () => { + // 테스트용 사용자 생성 + const user = await prismaClient.user.create({ + data: { + email: 'test@example.com', + password: 'hashedpassword', + nickname: 'Test User', + }, + }); + + // 테스트용 상품 생성 + const product = await prismaClient.product.create({ + data: { + name: 'Test Product', + description: 'Test Description', + price: 10000, + userId: user.id, + tags: ['test', 'product'], + images: ['test.jpg', 'test2.jpg'], + }, + }); + + const response = await request(app).get(`/products/${product.id}`); + + expect(response.status).toBe(200); + expect(response.body).toMatchObject({ + id: product.id, + name: 'Test Product', + description: 'Test Description', + price: 10000, + tags: ['test', 'product'], + images: ['test.jpg', 'test2.jpg'], + userId: user.id, + favoriteCount: 0, + }); + }); + + test('상품이 존재하지 않을 때 404를 반환해야 한다', async () => { + const nonExistentId = 9999; + const response = await request(app).get(`/products/${nonExistentId}`); + + expect(response.status).toBe(404); + expect(response.body).toHaveProperty('message'); + }); + }); + }); + + describe('인증이 필요한 API', () => { + describe('POST /products', () => { + test('인증되지 않은 사용자가 상품을 생성할 때 401을 반환해야 한다', async () => { + const response = await request(app).post('/products'); + expect(response.status).toBe(401); + }); + + test('인증된 사용자가 상품을 생성할 때 201을 반환해야 한다', async () => { + const agent = request.agent(app); + + await agent.post('/auth/register').send({ + email: 'test@example.com', + password: 'password', + nickname: 'Test User', + image: 'test.jpg', + }); + await agent.post('/auth/login').send({ + email: 'test@example.com', + password: 'password', + }); + + const productPayload = { + name: 'Test Product', + description: 'Test Description', + price: 10000, + tags: ['test', 'product'], + images: ['test.jpg', 'test2.jpg'], + }; + + const response = await agent.post('/products').send(productPayload); + expect(response.status).toBe(201); + expect(response.body).toMatchObject({ + id: expect.any(Number), + name: 'Test Product', + description: 'Test Description', + price: 10000, + tags: ['test', 'product'], + images: ['test.jpg', 'test2.jpg'], + }); + }); + + test('잘못된 payload로 상품 생성 시 400을 반환해야 한다', async () => { + const agent = request.agent(app); + await agent.post('/auth/register').send({ + email: 'test@example.com', + password: 'password', + nickname: 'Test User', + image: 'test.jpg', + }); + + await agent.post('/auth/login').send({ + email: 'test@example.com', + password: 'password', + }); + + const invalidPayloads = [ + // name이 빈 문자열 + { + name: '', + description: 'Test Description', + price: 10000, + tags: ['test', 'product'], + images: ['test.jpg', 'test2.jpg'], + }, + // name이 없음 + { + description: 'Test Description', + price: 10000, + tags: ['test', 'product'], + images: ['test.jpg', 'test2.jpg'], + }, + // description이 빈 문자열 + { + name: 'Test Product', + description: '', + price: 10000, + tags: ['test', 'product'], + images: ['test.jpg', 'test2.jpg'], + }, + // description이 없음 + { + name: 'Test Product', + price: 10000, + tags: ['test', 'product'], + images: ['test.jpg', 'test2.jpg'], + }, + // price가 없음 + { + name: 'Test Product', + description: 'Test Description', + tags: ['test', 'product'], + images: ['test.jpg', 'test2.jpg'], + }, + // tags가 없음 + { + name: 'Test Product', + description: 'Test Description', + price: 10000, + images: ['test.jpg', 'test2.jpg'], + }, + // images가 없음 + { + name: 'Test Product', + description: 'Test Description', + price: 10000, + tags: ['test', 'product'], + } + ]; + for (const payload of invalidPayloads) { + const response = await agent.post('/products').send(payload); + expect(response.status).toBe(400); + expect(response.body).toHaveProperty('message'); + } + }); + }); + }); +}); diff --git a/src/routers/productsRouter.ts b/src/routers/productsRouter.ts new file mode 100644 index 00000000..bd16e662 --- /dev/null +++ b/src/routers/productsRouter.ts @@ -0,0 +1,28 @@ +import express from 'express'; +import { withAsync } from '../lib/withAsync'; +import { + createProduct, + getProduct, + updateProduct, + deleteProduct, + getProductList, + createComment, + getCommentList, + createFavorite, + deleteFavorite, +} from '../controllers/productsController'; +import authenticate from '../middlewares/authenticate'; + +const productsRouter = express.Router(); + +productsRouter.post('/', authenticate(), withAsync(createProduct)); +productsRouter.get('/:id', authenticate({ optional: true }), withAsync(getProduct)); +productsRouter.patch('/:id', authenticate(), withAsync(updateProduct)); +productsRouter.delete('/:id', authenticate(), withAsync(deleteProduct)); +productsRouter.get('/', authenticate({ optional: true }), withAsync(getProductList)); +productsRouter.post('/:id/comments', authenticate(), withAsync(createComment)); +productsRouter.get('/:id/comments', withAsync(getCommentList)); +productsRouter.post('/:id/favorites', authenticate(), withAsync(createFavorite)); +productsRouter.delete('/:id/favorites', authenticate(), withAsync(deleteFavorite)); + +export default productsRouter; diff --git a/src/routers/usersRouter.ts b/src/routers/usersRouter.ts new file mode 100644 index 00000000..48e79271 --- /dev/null +++ b/src/routers/usersRouter.ts @@ -0,0 +1,22 @@ +import express from 'express'; +import { withAsync } from '../lib/withAsync'; +import { + getMe, + updateMe, + updateMyPassword, + getMyProductList, + getMyFavoriteList, + getMyNotifications, +} from '../controllers/usersController'; +import authenticate from '../middlewares/authenticate'; + +const usersRouter = express.Router(); + +usersRouter.get('/me', authenticate(), withAsync(getMe)); +usersRouter.patch('/me', authenticate(), withAsync(updateMe)); +usersRouter.patch('/me/password', authenticate(), withAsync(updateMyPassword)); +usersRouter.get('/me/products', authenticate(), withAsync(getMyProductList)); +usersRouter.get('/me/favorites', authenticate(), withAsync(getMyFavoriteList)); +usersRouter.get('/me/notifications', authenticate(), withAsync(getMyNotifications)); + +export default usersRouter; diff --git a/src/services/articlesService.test.ts b/src/services/articlesService.test.ts new file mode 100644 index 00000000..dff971ba --- /dev/null +++ b/src/services/articlesService.test.ts @@ -0,0 +1,158 @@ +import * as articlesRepository from '../repositories/articlesRepository'; +import * as articlesService from './articlesService'; +import NotFoundError from '../lib/errors/NotFoundError'; +import ForbiddenError from '../lib/errors/ForbiddenError'; + +jest.mock('../repositories/articlesRepository'); + +describe('게시글 서비스', () => { + const mockArticle = { + id: 1, + title: 'Test Article', + content: 'Test Content', + image: 'test.jpg', + userId: 1, + createdAt: new Date(), + updatedAt: new Date(), + likeCount: 0, + isLiked: false, + }; + + beforeEach(() => { + jest.clearAllMocks(); + }); + + describe('createArticle', () => { + test('게시글을 생성할 수 있다', async () => { + jest.mocked(articlesRepository.createArticle).mockResolvedValue(mockArticle); + + const result = await articlesService.createArticle({ + title: mockArticle.title, + content: mockArticle.content, + image: mockArticle.image, + userId: mockArticle.userId, + }); + + expect(articlesRepository.createArticle).toHaveBeenCalled(); + expect(result).toMatchObject({ + ...mockArticle, + likeCount: 0, + isLiked: false, + }); + }); + }); + + describe('getArticle', () => { + test('게시글이 존재할 때 게시글 정보를 반환해야 한다', async () => { + jest.mocked(articlesRepository.getArticleWithLkes).mockResolvedValue({ + ...mockArticle, + likes: undefined, + likeCount: 0, + isLiked: false, + }); + + const result = await articlesService.getArticle(1); + + expect(articlesRepository.getArticleWithLkes).toHaveBeenCalledWith(1); + expect(result).toMatchObject({ + ...mockArticle, + likeCount: 0, + isLiked: false, + }); + }); + + test('게시글이 존재하지 않을 때 NotFoundError를 반환해야 한다', async () => { + jest.mocked(articlesRepository.getArticleWithLkes).mockResolvedValue(null); + + await expect(articlesService.getArticle(999)).rejects.toThrow(NotFoundError); + }); + }); + + describe('getArticleList', () => { + test('게시글 목록을 조회할 수 있다', async () => { + const mockList = { list: [mockArticle], totalCount: 1 }; + jest.mocked(articlesRepository.getArticleListWithLikes).mockResolvedValue({ + ...mockList, + list: mockList.list.map((article, i) => ({ + ...article, + likes: undefined, + likeCount: i, + isLiked: false, + })), + }); + + const result = await articlesService.getArticleList({ page: 1, pageSize: 10 }); + + expect(articlesRepository.getArticleListWithLikes).toHaveBeenCalled(); + expect(result).toMatchObject({ + ...mockList, + list: mockList.list.map((article, i) => ({ + ...article, + likes: undefined, + likeCount: i, + isLiked: false, + })), + }); + }); + }); + + describe('updateArticle', () => { + test('게시글을 수정할 수 있다', async () => { + const updatedArticle = { ...mockArticle, title: 'Updated Title' }; + jest.mocked(articlesRepository.getArticle).mockResolvedValue(mockArticle); + jest.mocked(articlesRepository.updateArticleWithLikes).mockResolvedValue({ + ...updatedArticle, + likes: undefined, + likeCount: 0, + isLiked: false, + }); + + const result = await articlesService.updateArticle(1, { userId: 1, title: 'Updated Title' }); + + expect(articlesRepository.getArticle).toHaveBeenCalledWith(1); + expect(articlesRepository.updateArticleWithLikes).toHaveBeenCalled(); + expect(result).toMatchObject({ + ...updatedArticle, + likes: undefined, + likeCount: 0, + isLiked: false, + }); + }); + + test('게시글이 존재하지 않을 때 NotFoundError를 반환해야 한다', async () => { + jest.mocked(articlesRepository.getArticle).mockResolvedValue(null); + + await expect(articlesService.updateArticle(1, { userId: 1 })).rejects.toThrow(NotFoundError); + }); + + test('게시글 소유자가 아닐 때 ForbiddenError를 반환해야 한다', async () => { + jest.mocked(articlesRepository.getArticle).mockResolvedValue({ ...mockArticle, userId: 2 }); + + await expect(articlesService.updateArticle(1, { userId: 1 })).rejects.toThrow(ForbiddenError); + }); + }); + + describe('deleteArticle', () => { + test('게시글 소유자가 게시글을 삭제할 수 있다', async () => { + jest.mocked(articlesRepository.getArticle).mockResolvedValue(mockArticle); + jest.mocked(articlesRepository.deleteArticle).mockResolvedValue(mockArticle); + + await articlesService.deleteArticle(1, 1); + + expect(articlesRepository.getArticle).toHaveBeenCalledWith(1); + expect(articlesRepository.deleteArticle).toHaveBeenCalledWith(1); + }); + + test('게시글이 존재하지 않을 때 NotFoundError를 반환해야 한다', async () => { + jest.mocked(articlesRepository.getArticle).mockResolvedValue(null); + + await expect(articlesService.deleteArticle(1, 1)).rejects.toThrow(NotFoundError); + }); + + test('게시글 소유자가 아닐 때 ForbiddenError를 반환해야 한다', async () => { + jest.mocked(articlesRepository.getArticle).mockResolvedValue({ ...mockArticle, userId: 2 }); + + await expect(articlesService.deleteArticle(1, 1)).rejects.toThrow(ForbiddenError); + }); + }); +}); diff --git a/src/services/articlesService.ts b/src/services/articlesService.ts new file mode 100644 index 00000000..6e963bb7 --- /dev/null +++ b/src/services/articlesService.ts @@ -0,0 +1,59 @@ +import * as articlesRepository from '../repositories/articlesRepository'; +import { PagePaginationParams, PagePaginationResult } from '../types/pagination'; +import ForbiddenError from '../lib/errors/ForbiddenError'; +import NotFoundError from '../lib/errors/NotFoundError'; +import Article from '../types/Article'; + +type CreateArticleData = Omit; +type UpdateArticleData = Partial & { userId: number }; + +export async function createArticle(data: CreateArticleData): Promise
{ + const createdArticle = await articlesRepository.createArticle(data); + return { + ...createdArticle, + likeCount: 0, + isLiked: false, + }; +} + +export async function getArticle(id: number): Promise
{ + const article = await articlesRepository.getArticleWithLkes(id); + if (!article) { + throw new NotFoundError('article', id); + } + return article; +} + +export async function getArticleList( + params: PagePaginationParams, +): Promise> { + const articles = await articlesRepository.getArticleListWithLikes(params); + return articles; +} + +export async function updateArticle(id: number, data: UpdateArticleData): Promise
{ + const existingArticle = await articlesRepository.getArticle(id); + if (!existingArticle) { + throw new NotFoundError('article', id); + } + + if (existingArticle.userId !== data.userId) { + throw new ForbiddenError('Should be the owner of the article'); + } + + const updatedArticle = await articlesRepository.updateArticleWithLikes(id, data); + return updatedArticle; +} + +export async function deleteArticle(id: number, userId: number): Promise { + const existingArticle = await articlesRepository.getArticle(id); + if (!existingArticle) { + throw new NotFoundError('article', id); + } + + if (existingArticle.userId !== userId) { + throw new ForbiddenError('Should be the owner of the article'); + } + + await articlesRepository.deleteArticle(id); +} diff --git a/src/services/authService.ts b/src/services/authService.ts new file mode 100644 index 00000000..4ab4944c --- /dev/null +++ b/src/services/authService.ts @@ -0,0 +1,102 @@ +import bcrypt from 'bcrypt'; +import * as usersRepository from '../repositories/usersRepository'; +import BadRequestError from '../lib/errors/BadRequestError'; +import NotFoundError from '../lib/errors/NotFoundError'; +import { generateTokens, verifyAccessToken, verifyRefreshToken } from '../lib/token'; +import UnauthorizedError from '../lib/errors/UnauthorizedError'; +import User from '../types/User'; + +type RegisterData = Omit; +type LoginData = Pick; + +async function verifyPassword(user: User, password: string) { + return await bcrypt.compare(password, user.password); +} + +async function hashPassword(password: string) { + const salt = await bcrypt.genSalt(10); + return await bcrypt.hash(password, salt); +} + +export async function register(data: RegisterData) { + const existingUser = await usersRepository.getUserByEmail(data.email); + if (existingUser) { + throw new BadRequestError('User already exists'); + } + + const hashedPassword = await hashPassword(data.password); + + const user = await usersRepository.createUser({ + email: data.email, + nickname: data.nickname, + password: hashedPassword, + image: data.image, + }); + + return user; +} + +export async function login(data: LoginData) { + const user = await usersRepository.getUserByEmail(data.email); + if (!user) { + throw new BadRequestError('Invalid credentials'); + } + + const isPasswordValid = await verifyPassword(user, data.password); + if (!isPasswordValid) { + throw new BadRequestError('Invalid credentials'); + } + + const { accessToken, refreshToken } = generateTokens(user.id); + return { + accessToken, + refreshToken, + }; +} + +export async function refreshToken(refreshToken?: string) { + if (!refreshToken) { + throw new BadRequestError('Invalid refresh token'); + } + + const { userId } = verifyRefreshToken(refreshToken); + + const user = await usersRepository.getUser(userId); + if (!user) { + throw new BadRequestError('Invalid refresh token'); + } + + const { accessToken, refreshToken: newRefreshToken } = generateTokens(userId); + return { + accessToken, + refreshToken: newRefreshToken, + }; +} + +export async function updateMyPassword(userId: User['id'], password: string, newPassword: string) { + const user = await usersRepository.getUser(userId); + if (!user) { + throw new NotFoundError('user', userId); + } + + const isPasswordValid = await verifyPassword(user, password); + if (!isPasswordValid) { + throw new BadRequestError('Invalid credentials'); + } + + const hashedPassword = await hashPassword(newPassword); + await usersRepository.updateUser(userId, { password: hashedPassword }); +} + +export async function authenticate(accessToken?: string) { + if (!accessToken) { + throw new UnauthorizedError('Unauthorized'); + } + + const { userId } = verifyAccessToken(accessToken); + const user = await usersRepository.getUser(userId); + if (!user) { + throw new UnauthorizedError('Unauthorized'); + } + return user; +} diff --git a/src/services/commentsService.ts b/src/services/commentsService.ts new file mode 100644 index 00000000..3eea37d8 --- /dev/null +++ b/src/services/commentsService.ts @@ -0,0 +1,122 @@ +import * as articlesRepository from '../repositories/articlesRepository'; +import * as commentsRepository from '../repositories/commentsRepository'; +import * as productsRepository from '../repositories/productsRepository'; +import * as notificationsService from './notificationsService'; +import { CursorPaginationParams, CursorPaginationResult } from '../types/pagination'; +import BadRequestError from '../lib/errors/BadRequestError'; +import ForbiddenError from '../lib/errors/ForbiddenError'; +import NotFoundError from '../lib/errors/NotFoundError'; +import Comment from '../types/Comment'; +import Article from '../types/Article'; +import { NotificationType } from '../types/Notification'; + +type CreateCommentData = Omit< + Comment, + 'id' | 'productId' | 'articleId' | 'createdAt' | 'updatedAt' +> & { + productId?: number; + articleId?: number; +}; + +export async function createComment(data: CreateCommentData): Promise { + if (!data.articleId && !data.productId) { + throw new BadRequestError('Either articleId or productId must be provided'); + } + + if (data.articleId) { + const article = await articlesRepository.getArticle(data.articleId); + if (!article) { + throw new NotFoundError('article', data.articleId); + } + } + + if (data.productId) { + const product = await productsRepository.getProduct(data.productId); + if (!product) { + throw new NotFoundError('product', data.productId); + } + } + + const comment = await commentsRepository.createComment({ + ...data, + articleId: data.articleId ?? null, + productId: data.productId ?? null, + }); + + /** New comment notification */ + if (data.articleId) { + const article = (await articlesRepository.getArticle(data.articleId)) as Article; + const commentWriterId = data.userId; + const articleWriterId = article.userId; + if (articleWriterId !== commentWriterId) { + await notificationsService.createNotification({ + userId: articleWriterId, + type: NotificationType.NEW_COMMENT, + payload: { + articleId: data.articleId, + }, + }); + } + } + return comment; +} + +export async function getComment(id: number): Promise { + const comment = await commentsRepository.getComment(id); + if (!comment) { + throw new NotFoundError('comment', id); + } + return comment; +} + +export async function getCommentListByArticleId( + articleId: number, + params: CursorPaginationParams, +): Promise> { + const article = await articlesRepository.getArticle(articleId); + if (!article) { + throw new NotFoundError('article', articleId); + } + + const result = commentsRepository.getCommentList({ articleId }, params); + return result; +} + +export async function getCommentListByProductId( + productId: number, + params: CursorPaginationParams, +): Promise> { + const product = await productsRepository.getProduct(productId); + if (!product) { + throw new NotFoundError('product', productId); + } + + const result = commentsRepository.getCommentList({ productId }, params); + return result; +} + +export async function updateComment(id: number, userId: number, content: string): Promise { + const comment = await commentsRepository.getComment(id); + if (!comment) { + throw new NotFoundError('comment', id); + } + + if (comment.userId !== userId) { + throw new ForbiddenError('Should be the owner of the comment'); + } + + return commentsRepository.updateComment(id, { content }); +} + +export async function deleteComment(id: number, userId: number): Promise { + const comment = await commentsRepository.getComment(id); + if (!comment) { + throw new NotFoundError('comment', id); + } + + if (comment.userId !== userId) { + throw new ForbiddenError('Should be the owner of the comment'); + } + + await commentsRepository.deleteComment(id); +} diff --git a/src/services/favoritesService.ts b/src/services/favoritesService.ts new file mode 100644 index 00000000..373e21e2 --- /dev/null +++ b/src/services/favoritesService.ts @@ -0,0 +1,32 @@ +import * as favoritesRepository from '../repositories/favoritesRepository'; +import * as productsRepository from '../repositories/productsRepository'; +import NotFoundError from '../lib/errors/NotFoundError'; +import BadRequestError from '../lib/errors/BadRequestError'; + +export async function createFavorite(productId: number, userId: number) { + const existingProduct = await productsRepository.getProduct(productId); + if (!existingProduct) { + throw new NotFoundError('product', productId); + } + + const existingFavorite = await favoritesRepository.getFavorite(productId, userId); + if (existingFavorite) { + throw new BadRequestError('Already favorited'); + } + + await favoritesRepository.createFavorite({ productId, userId }); +} + +export async function deleteFavorite(productId: number, userId: number) { + const existingProduct = await productsRepository.getProduct(productId); + if (!existingProduct) { + throw new NotFoundError('product', productId); + } + + const existingFavorite = await favoritesRepository.getFavorite(productId, userId); + if (!existingFavorite) { + throw new BadRequestError('Not favorited'); + } + + await favoritesRepository.deleteFavorite(existingFavorite.id); +} diff --git a/src/services/imagesService.ts b/src/services/imagesService.ts new file mode 100644 index 00000000..a16581a3 --- /dev/null +++ b/src/services/imagesService.ts @@ -0,0 +1,85 @@ +import path from 'path'; +import multer from 'multer'; +import { v4 as uuidv4 } from 'uuid'; +import { PutObjectCommand } from '@aws-sdk/client-s3'; +import { AWS_S3_BUCKET_NAME, BASE_URL, NODE_ENV, PUBLIC_PATH, STATIC_PATH } from '../lib/constants'; +import BadRequestError from '../lib/errors/BadRequestError'; +import s3Client from '../lib/s3Client'; + +const ALLOWED_MIME_TYPES = ['image/png', 'image/jpeg', 'image/jpg']; +const FILE_SIZE_LIMIT = 5 * 1024 * 1024; + +const generateFilename = (file: Express.Multer.File) => { + const ext = path.extname(file.originalname).toLowerCase(); + return `${uuidv4()}${ext}`; +}; + +export const upload = multer({ + storage: + NODE_ENV === 'production' + ? multer.memoryStorage() + : multer.diskStorage({ + destination(req, file, cb) { + cb(null, PUBLIC_PATH); + }, + filename(req, file, cb) { + cb(null, generateFilename(file)); + }, + }), + limits: { + fileSize: FILE_SIZE_LIMIT, + }, + + fileFilter: function (req, file, cb) { + if (!ALLOWED_MIME_TYPES.includes(file.mimetype)) { + const err = new BadRequestError('Only png, jpeg, and jpg are allowed'); + return cb(err); + } + + cb(null, true); + }, +}); + +export async function uploadImage(file?: Express.Multer.File) { + if (NODE_ENV === 'production') { + return uploadImageToS3(file); + } + return uploadImageLocal(file); +} + +async function uploadImageLocal(file?: Express.Multer.File) { + if (!file) { + throw new BadRequestError('File is required'); + } + const url = `${BASE_URL}${STATIC_PATH}/${file.filename}`; + return url; +} + +async function uploadImageToS3(file?: Express.Multer.File) { + if (!file) { + throw new BadRequestError('File is required'); + } + + if (!s3Client) { + throw new Error('S3 client is not initialized'); + } + + const key = generateFilename(file); + + const command = new PutObjectCommand({ + Bucket: AWS_S3_BUCKET_NAME, + Key: key, + Body: file.buffer, + ContentType: file.mimetype, + }); + + try { + await s3Client.send(command); + } catch (error) { + console.error(error); + throw new Error('Failed to upload image'); + } + + const url = `https://${AWS_S3_BUCKET_NAME}.s3.amazonaws.com/${key}`; + return url; +} diff --git a/src/services/likesService.ts b/src/services/likesService.ts new file mode 100644 index 00000000..b15fdd70 --- /dev/null +++ b/src/services/likesService.ts @@ -0,0 +1,32 @@ +import * as likesRepository from '../repositories/likesRepository'; +import * as articlesRepository from '../repositories/articlesRepository'; +import NotFoundError from '../lib/errors/NotFoundError'; +import BadRequestError from '../lib/errors/BadRequestError'; + +export async function createLike(articleId: number, userId: number) { + const existingArticle = await articlesRepository.getArticle(articleId); + if (!existingArticle) { + throw new NotFoundError('article', articleId); + } + + const existingLike = await likesRepository.getLike(articleId, userId); + if (existingLike) { + throw new BadRequestError('Already liked'); + } + + await likesRepository.createLike({ articleId, userId }); +} + +export async function deleteLike(articleId: number, userId: number) { + const existingArticle = await articlesRepository.getArticle(articleId); + if (!existingArticle) { + throw new NotFoundError('article', articleId); + } + + const existingLike = await likesRepository.getLike(articleId, userId); + if (!existingLike) { + throw new BadRequestError('Not liked'); + } + + await likesRepository.deleteLike(existingLike.id); +} diff --git a/src/services/notificationsService.ts b/src/services/notificationsService.ts new file mode 100644 index 00000000..0fa38e3b --- /dev/null +++ b/src/services/notificationsService.ts @@ -0,0 +1,69 @@ +import UnauthorizedError from '../lib/errors/UnauthorizedError'; +import NotFoundError from '../lib/errors/NotFoundError'; +import ForbiddenError from '../lib/errors/ForbiddenError'; +import { CursorPaginationParams } from '../types/pagination'; +import { Notification } from '../types/Notification'; +import * as notificationsRepository from '../repositories/notificationsRepository'; +import * as usersRepository from '../repositories/usersRepository'; +import socketService from './socketService'; + +export async function createNotification( + data: Omit, +) { + const existingUser = await usersRepository.getUser(data.userId); + if (!existingUser) { + throw new NotFoundError('User', data.userId); + } + + const notification = await notificationsRepository.createNotification({ + ...data, + read: false, + }); + + socketService.sendNotification(notification as Notification); + + return notification; +} + +export async function createNotifications( + notifications: Omit[], +) { + await notificationsRepository.createNotifications( + notifications.map((notification) => ({ + ...notification, + read: false, + })), + ); + + notifications.forEach((notification) => { + socketService.sendNotification(notification as Notification); + }); +} + +export async function readNotificationById(id: number, userId?: number) { + if (!userId) { + throw new UnauthorizedError('Unauthorized'); + } + + const notification = await notificationsRepository.getNotificationById(id); + if (!notification) { + throw new NotFoundError('Notification', id); + } + + if (notification.userId !== userId) { + throw new ForbiddenError("Cannot read other user's notification"); + } + + await notificationsRepository.updateNotificationById(id, { read: true }); +} + +export async function getMyNotifications(userId: number, params: CursorPaginationParams) { + if (!userId) { + throw new UnauthorizedError('Unauthorized'); + } + + const { cursor, limit } = params; + const { notifications, totalCount, unreadCount, nextCursor } = + await notificationsRepository.getNotificationsByUserId(userId, { cursor, limit }); + return { list: notifications, totalCount, unreadCount, nextCursor }; +} diff --git a/src/services/productsService.test.ts b/src/services/productsService.test.ts new file mode 100644 index 00000000..e121f937 --- /dev/null +++ b/src/services/productsService.test.ts @@ -0,0 +1,183 @@ +import * as productsRepository from '../repositories/productsRepository'; +import * as favoritesRepository from '../repositories/favoritesRepository'; +import * as notificationsService from './notificationsService'; +import * as productsService from './productsService'; +import { NotificationType } from '../types/Notification'; +import NotFoundError from '../lib/errors/NotFoundError'; +import ForbiddenError from '../lib/errors/ForbiddenError'; + +jest.mock('../repositories/productsRepository'); +jest.mock('../repositories/favoritesRepository'); +jest.mock('./notificationsService'); + +describe('상품 서비스', () => { + const mockProduct = { + id: 1, + name: 'Test Product', + description: 'desc', + price: 1000, + tags: ['tag'], + images: ['img.jpg'], + userId: 1, + createdAt: new Date(), + updatedAt: new Date(), + favoriteCount: 0, + isFavorited: false, + }; + + beforeEach(() => { + jest.clearAllMocks(); + }); + + describe('createProduct', () => { + test('상품을 생성할 수 있다', async () => { + jest.mocked(productsRepository.createProduct).mockResolvedValue(mockProduct); + + const result = await productsService.createProduct({ + name: mockProduct.name, + description: mockProduct.description, + price: mockProduct.price, + tags: mockProduct.tags, + images: mockProduct.images, + userId: mockProduct.userId, + }); + + expect(productsRepository.createProduct).toHaveBeenCalled(); + expect(result).toMatchObject({ + ...mockProduct, + favoriteCount: 0, + isFavorited: false, + }); + }); + }); + + describe('getProduct', () => { + test('상품이 존재할 때 상품 정보를 반환해야 한다', async () => { + jest.mocked(productsRepository.getProductWithFavorites).mockResolvedValue({ + ...mockProduct, + favorites: undefined, + favoriteCount: 0, + isFavorited: false, + }); + + const result = await productsService.getProduct(1); + + expect(productsRepository.getProductWithFavorites).toHaveBeenCalledWith(1); + expect(result).toMatchObject({ + ...mockProduct, + favoriteCount: 0, + isFavorited: false, + }); + }); + + test('상품이 존재하지 않을 때 NotFoundError를 반환해야 한다', async () => { + jest.mocked(productsRepository.getProductWithFavorites).mockResolvedValue(null); + + await expect(productsService.getProduct(999)).rejects.toThrow(NotFoundError); + }); + }); + + describe('getProductList', () => { + test('상품 목록을 조회할 수 있다', async () => { + const mockList = { list: [mockProduct], totalCount: 1 }; + jest.mocked(productsRepository.getProductListWithFavorites).mockResolvedValue({ + ...mockList, + list: mockList.list.map((product, i) => ({ + ...product, + favorites: undefined, + favoriteCount: i, + isFavorited: false, + })), + }); + + const result = await productsService.getProductList({ page: 1, pageSize: 10 }, { userId: 1 }); + + expect(productsRepository.getProductListWithFavorites).toHaveBeenCalled(); + expect(result).toMatchObject({ + ...mockList, + list: mockList.list.map((product, i) => ({ + ...product, + favorites: undefined, + favoriteCount: i, + isFavorited: false, + })), + }); + }); + }); + + describe('updateProduct', () => { + test('상품 가격이 변경되면 알림을 보내야 한다', async () => { + const oldProduct = { ...mockProduct, price: 1000 }; + const updatedProduct = { ...mockProduct, price: 2000, favorites: [{ userId: 2 }] }; + + jest.mocked(productsRepository.getProduct).mockResolvedValue(oldProduct); + jest.mocked(productsRepository.updateProductWithFavorites).mockResolvedValue({ + ...updatedProduct, + favorites: undefined, + favoriteCount: 1, + isFavorited: false, + }); + jest + .mocked(favoritesRepository.getFavoritesByProductId) + .mockResolvedValue([ + { id: 1, productId: 1, userId: 2, createdAt: new Date(), updatedAt: new Date() }, + ]); + jest.mocked(notificationsService.createNotifications).mockResolvedValue(undefined); + + const result = await productsService.updateProduct(1, { userId: 1, price: 2000 }); + + expect(productsRepository.getProduct).toHaveBeenCalledWith(1); + expect(productsRepository.updateProductWithFavorites).toHaveBeenCalled(); + expect(favoritesRepository.getFavoritesByProductId).toHaveBeenCalledWith(1); + expect(notificationsService.createNotifications).toHaveBeenCalledWith([ + { + userId: 2, + type: NotificationType.PRICE_CHANGED, + payload: { productId: 1, price: 2000 }, + }, + ]); + expect(result).toMatchObject({ + ...updatedProduct, + favorites: undefined, + favoriteCount: 1, + isFavorited: false, + }); + }); + + test('상품이 존재하지 않을 때 NotFoundError를 반환해야 한다', async () => { + jest.mocked(productsRepository.getProduct).mockResolvedValue(null); + + await expect(productsService.updateProduct(1, { userId: 1 })).rejects.toThrow(NotFoundError); + }); + + test('상품 소유자가 아닐 때 ForbiddenError를 반환해야 한다', async () => { + jest.mocked(productsRepository.getProduct).mockResolvedValue({ ...mockProduct, userId: 2 }); + + await expect(productsService.updateProduct(1, { userId: 1 })).rejects.toThrow(ForbiddenError); + }); + }); + + describe('deleteProduct', () => { + test('상품 소유자가 상품을 삭제할 수 있다', async () => { + jest.mocked(productsRepository.getProduct).mockResolvedValue(mockProduct); + jest.mocked(productsRepository.deleteProduct).mockResolvedValue(mockProduct); + + await productsService.deleteProduct(1, 1); + + expect(productsRepository.getProduct).toHaveBeenCalledWith(1); + expect(productsRepository.deleteProduct).toHaveBeenCalledWith(1); + }); + + test('상품이 존재하지 않을 때 NotFoundError를 반환해야 한다', async () => { + jest.mocked(productsRepository.getProduct).mockResolvedValue(null); + + await expect(productsService.deleteProduct(1, 1)).rejects.toThrow(NotFoundError); + }); + + test('상품 소유자가 아닐 때 ForbiddenError를 반환해야 한다', async () => { + jest.mocked(productsRepository.getProduct).mockResolvedValue({ ...mockProduct, userId: 2 }); + + await expect(productsService.deleteProduct(1, 1)).rejects.toThrow(ForbiddenError); + }); + }); +}); diff --git a/src/services/productsService.ts b/src/services/productsService.ts new file mode 100644 index 00000000..bb7587c8 --- /dev/null +++ b/src/services/productsService.ts @@ -0,0 +1,80 @@ +import ForbiddenError from '../lib/errors/ForbiddenError'; +import NotFoundError from '../lib/errors/NotFoundError'; +import * as productsRepository from '../repositories/productsRepository'; +import * as favoritesRepository from '../repositories/favoritesRepository'; +import * as notificationsService from './notificationsService'; +import { PagePaginationParams, PagePaginationResult } from '../types/pagination'; +import Product from '../types/Product'; +import { NotificationType } from '../types/Notification'; + +type CreateProductData = Omit< + Product, + 'id' | 'createdAt' | 'updatedAt' | 'favoriteCount' | 'isFavorited' +>; +type UpdateProductData = Partial & { userId: number }; + +export async function createProduct(data: CreateProductData): Promise { + const createdProduct = await productsRepository.createProduct(data); + return { + ...createdProduct, + favoriteCount: 0, + isFavorited: false, + }; +} + +export async function getProduct(id: number): Promise { + const product = await productsRepository.getProductWithFavorites(id); + if (!product) { + throw new NotFoundError('product', id); + } + return product; +} + +export async function getProductList( + params: PagePaginationParams, + { userId }: { userId?: number } = {}, +): Promise> { + const products = await productsRepository.getProductListWithFavorites(params, { userId }); + return products; +} + +export async function updateProduct(id: number, data: UpdateProductData): Promise { + const existingProduct = await productsRepository.getProduct(id); + if (!existingProduct) { + throw new NotFoundError('product', id); + } + if (existingProduct.userId !== data.userId) { + throw new ForbiddenError('Should be the owner of the product'); + } + const updatedProduct = await productsRepository.updateProductWithFavorites(id, data); + + /** Price change notification */ + const previousPrice = existingProduct.price; + const updatedPrice = updatedProduct.price; + if (previousPrice !== updatedPrice) { + const favorites = await favoritesRepository.getFavoritesByProductId(id); + const likedUserIds = favorites.map((favorite) => favorite.userId); + const notifications = likedUserIds.map((userId) => ({ + userId, + type: NotificationType.PRICE_CHANGED, + payload: { + productId: id, + price: updatedPrice, + }, + })); + await notificationsService.createNotifications(notifications); + } + + return updatedProduct; +} + +export async function deleteProduct(id: number, userId: number): Promise { + const existingProduct = await productsRepository.getProduct(id); + if (!existingProduct) { + throw new NotFoundError('product', id); + } + if (existingProduct.userId !== userId) { + throw new ForbiddenError('Should be the owner of the product'); + } + await productsRepository.deleteProduct(id); +} diff --git a/src/services/socketService.ts b/src/services/socketService.ts new file mode 100644 index 00000000..a21b19e3 --- /dev/null +++ b/src/services/socketService.ts @@ -0,0 +1,39 @@ +import { ExtendedError, Server, Socket } from 'socket.io'; +import http from 'http'; +import * as authService from './authService'; +import { Notification } from '../types/Notification'; +import User from '../types/User'; + +class SocketService { + private io: Server; + + constructor() { + this.io = new Server(); + this.io.use(this.authenticate); + } + + private async authenticate(socket: Socket, next: (err?: ExtendedError) => void) { + let user: User; + try { + const accessToken = socket.handshake.auth.accessToken; + user = await authService.authenticate(accessToken); + } catch (error) { + console.log('error', error); + next(error as ExtendedError); + return; + } + socket.join(user.id.toString()); + next(); + } + + initialize(httpServer: http.Server) { + this.io.attach(httpServer); + } + + sendNotification(notification: Notification) { + const userId = notification.userId; + this.io.to(userId.toString()).emit('notification', notification); + } +} + +export default new SocketService(); diff --git a/src/services/usersService.ts b/src/services/usersService.ts new file mode 100644 index 00000000..4764a315 --- /dev/null +++ b/src/services/usersService.ts @@ -0,0 +1,38 @@ +import { Product } from '@prisma/client'; +import { PagePaginationParams, PagePaginationResult } from '../types/pagination'; +import * as usersRepository from '../repositories/usersRepository'; +import * as productsRepository from '../repositories/productsRepository'; +import NotFoundError from '../lib/errors/NotFoundError'; +import User from '../types/User'; + +type UpdateUserData = Partial>; + +export async function getUser(userId: number): Promise { + const user = await usersRepository.getUser(userId); + if (!user) { + throw new NotFoundError('user', userId); + } + + return user; +} + +export async function updateUser(userId: number, data: Partial): Promise { + const updatedUser = await usersRepository.updateUser(userId, data); + return updatedUser; +} + +export async function getMyProductList( + userId: number, + params: PagePaginationParams, +): Promise> { + const result = await productsRepository.getProductListWithFavorites(params, { userId }); + return result; +} + +export async function getMyFavoriteList( + userId: number, + params: PagePaginationParams, +): Promise> { + const result = await productsRepository.getFavoriteProductListByOwnerId(userId, params); + return result; +} diff --git a/src/structs/articlesStructs.ts b/src/structs/articlesStructs.ts new file mode 100644 index 00000000..3d25131b --- /dev/null +++ b/src/structs/articlesStructs.ts @@ -0,0 +1,12 @@ +import { coerce, nonempty, nullable, object, partial, string } from 'superstruct'; +import { PageParamsStruct } from './commonStructs'; + +export const GetArticleListParamsStruct = PageParamsStruct; + +export const CreateArticleBodyStruct = object({ + title: coerce(nonempty(string()), string(), (value) => value.trim()), + content: nonempty(string()), + image: nullable(string()), +}); + +export const UpdateArticleBodyStruct = partial(CreateArticleBodyStruct); diff --git a/src/structs/authStructs.ts b/src/structs/authStructs.ts new file mode 100644 index 00000000..f8b6bcd6 --- /dev/null +++ b/src/structs/authStructs.ts @@ -0,0 +1,14 @@ +import { nonempty, nullable, object, string } from 'superstruct'; + +export const RegisterBodyStruct = object({ + email: nonempty(string()), + nickname: nonempty(string()), + password: nonempty(string()), + image: nullable(string()), +}); + +export const LoginBodyStruct = object({ + email: nonempty(string()), + password: nonempty(string()), +}); + diff --git a/src/structs/commentsStruct.ts b/src/structs/commentsStruct.ts new file mode 100644 index 00000000..aff08b47 --- /dev/null +++ b/src/structs/commentsStruct.ts @@ -0,0 +1,12 @@ +import { nonempty, number, object, optional, string } from 'superstruct'; +import { CursorParamsStruct } from './commonStructs'; + +export const CreateCommentBodyStruct = object({ + content: nonempty(string()), + productId: optional(number()), + articleId: optional(number()), +}); + +export const GetCommentListParamsStruct = CursorParamsStruct; + +export const UpdateCommentBodyStruct = CreateCommentBodyStruct; diff --git a/src/structs/commonStructs.ts b/src/structs/commonStructs.ts new file mode 100644 index 00000000..605bfa9e --- /dev/null +++ b/src/structs/commonStructs.ts @@ -0,0 +1,22 @@ +import { coerce, integer, object, string, defaulted, optional, enums, nonempty } from 'superstruct'; + +/** Convert string to integer then validate it */ +const integerString = coerce(integer(), string(), (value) => parseInt(value)); + +export const IdParamsStruct = object({ + id: integerString, +}); + +export const PageParamsStruct = object({ + page: defaulted(integerString, 1), + pageSize: defaulted(integerString, 10), + orderBy: optional(enums(['recent'])), + keyword: optional(nonempty(string())), +}); + +export const CursorParamsStruct = object({ + cursor: defaulted(integerString, 0), + limit: defaulted(integerString, 10), + orderBy: optional(enums(['recent'])), + keyword: optional(nonempty(string())), +}); diff --git a/src/structs/productsStruct.ts b/src/structs/productsStruct.ts new file mode 100644 index 00000000..a548f57d --- /dev/null +++ b/src/structs/productsStruct.ts @@ -0,0 +1,14 @@ +import { coerce, partial, object, string, min, nonempty, array, integer } from 'superstruct'; +import { PageParamsStruct } from './commonStructs'; + +export const CreateProductBodyStruct = object({ + name: coerce(nonempty(string()), string(), (value) => value.trim()), + description: nonempty(string()), + price: min(integer(), 0), + tags: array(nonempty(string())), + images: array(nonempty(string())), +}); + +export const GetProductListParamsStruct = PageParamsStruct; + +export const UpdateProductBodyStruct = partial(CreateProductBodyStruct); diff --git a/src/structs/usersStructs.ts b/src/structs/usersStructs.ts new file mode 100644 index 00000000..3ccbd04c --- /dev/null +++ b/src/structs/usersStructs.ts @@ -0,0 +1,21 @@ +import { nullable, object, partial, string } from 'superstruct'; +import { CursorParamsStruct, PageParamsStruct } from './commonStructs'; + +export const UpdateMeBodyStruct = partial( + object({ + email: string(), + nickname: string(), + image: nullable(string()), + }), +); + +export const UpdatePasswordBodyStruct = object({ + password: string(), + newPassword: string(), +}); + +export const GetMyProductListParamsStruct = PageParamsStruct; + +export const GetMyFavoriteListParamsStruct = PageParamsStruct; + +export const GetMyNotificationsParamsStruct = CursorParamsStruct; diff --git a/src/types/Article.ts b/src/types/Article.ts new file mode 100644 index 00000000..815abfcd --- /dev/null +++ b/src/types/Article.ts @@ -0,0 +1,13 @@ +interface Article { + id: number; + title: string; + content: string; + image: string | null; + userId: number; + createdAt: Date; + updatedAt: Date; + likeCount: number; + isLiked?: boolean; +} + +export default Article; diff --git a/src/types/Comment.ts b/src/types/Comment.ts new file mode 100644 index 00000000..d8d65d34 --- /dev/null +++ b/src/types/Comment.ts @@ -0,0 +1,11 @@ +interface Comment { + id: number; + content: string; + userId: number; + articleId: number | null; + productId: number | null; + createdAt: Date; + updatedAt: Date; +} + +export default Comment; diff --git a/src/types/Notification.ts b/src/types/Notification.ts new file mode 100644 index 00000000..50f93d45 --- /dev/null +++ b/src/types/Notification.ts @@ -0,0 +1,29 @@ +export enum NotificationType { + PRICE_CHANGED = 'PRICE_CHANGED', + NEW_COMMENT = 'NEW_COMMENT', +} + +interface BaseNotification { + id: number; + userId: number; + read: boolean; + createdAt: Date; + updatedAt: Date; +} + +interface PriceChangedNotification extends BaseNotification { + type: NotificationType.PRICE_CHANGED; + payload: { + productId: number; + price: number; + }; +} + +interface NewCommentNotification extends BaseNotification { + type: NotificationType.NEW_COMMENT; + payload: { + articleId: number; + }; +} + +export type Notification = PriceChangedNotification | NewCommentNotification; diff --git a/src/types/Product.ts b/src/types/Product.ts new file mode 100644 index 00000000..52c8aa64 --- /dev/null +++ b/src/types/Product.ts @@ -0,0 +1,15 @@ +interface Product { + id: number; + name: string; + description: string; + price: number; + tags: string[]; + images: string[]; + userId: number; + createdAt: Date; + updatedAt: Date; + favoriteCount: number; + isFavorited?: boolean; +} + +export default Product; diff --git a/src/types/User.ts b/src/types/User.ts new file mode 100644 index 00000000..99ebe3a8 --- /dev/null +++ b/src/types/User.ts @@ -0,0 +1,11 @@ +interface User { + id: number; + email: string; + password: string; + nickname: string; + image: string | null; + createdAt: Date; + updatedAt: Date; +} + +export default User; diff --git a/src/types/express.d.ts b/src/types/express.d.ts new file mode 100644 index 00000000..1fc9b1ac --- /dev/null +++ b/src/types/express.d.ts @@ -0,0 +1,9 @@ +import Express from 'express'; + +declare global { + namespace Express { + interface Request { + user: User; + } + } +} diff --git a/src/types/pagination.ts b/src/types/pagination.ts new file mode 100644 index 00000000..05e4b283 --- /dev/null +++ b/src/types/pagination.ts @@ -0,0 +1,21 @@ +export interface PagePaginationParams { + page: number; + pageSize: number; + orderBy?: 'recent' | 'oldest'; + keyword?: string; +} + +export interface PagePaginationResult { + list: T[]; + totalCount: number; +} + +export interface CursorPaginationParams { + cursor: number; + limit: number; +} + +export interface CursorPaginationResult { + list: T[]; + nextCursor: number | null; +} diff --git a/start.sh b/start.sh new file mode 100644 index 00000000..8d8f12aa --- /dev/null +++ b/start.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +npm install +npx prisma generate +npx prisma migrate deploy +npm run build + +pm2 start ecosystem.config.js diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 00000000..10ddb5b8 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,122 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig to read more about this file */ + + /* Projects */ + // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ + // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ + // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ + // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ + // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ + // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ + + /* Language and Environment */ + "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ + // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + // "jsx": "preserve", /* Specify what JSX code is generated. */ + // "libReplacement": true, /* Enable lib replacement. */ + // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ + // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ + // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ + // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ + // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ + // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ + + /* Modules */ + "module": "commonjs", /* Specify what module code is generated. */ + "rootDir": "./src", /* Specify the root folder within your source files. */ + // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ + // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + "typeRoots": [ + "./src/types", + "./node_modules/@types" + ], /* Specify multiple folders that act like './node_modules/@types'. */ + // "types": [], /* Specify type package names to be included without being referenced in a source file. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ + // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ + // "rewriteRelativeImportExtensions": true, /* Rewrite '.ts', '.tsx', '.mts', and '.cts' file extensions in relative import paths to their JavaScript equivalent in output files. */ + // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ + // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ + // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ + // "noUncheckedSideEffectImports": true, /* Check side effect imports. */ + // "resolveJsonModule": true, /* Enable importing .json files. */ + // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ + // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ + + /* JavaScript Support */ + // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ + // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ + + /* Emit */ + // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + // "declarationMap": true, /* Create sourcemaps for d.ts files. */ + // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ + // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ + // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ + // "noEmit": true, /* Disable emitting files from a compilation. */ + // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ + "outDir": "./build", /* Specify an output folder for all emitted files. */ + // "removeComments": true, /* Disable emitting comments. */ + // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ + // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ + // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ + // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ + // "newLine": "crlf", /* Set the newline character for emitting files. */ + // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ + // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ + // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ + // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ + // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ + + /* Interop Constraints */ + // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ + // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ + // "isolatedDeclarations": true, /* Require sufficient annotation on exports so other tools can trivially generate declaration files. */ + // "erasableSyntaxOnly": true, /* Do not allow runtime constructs that are not part of ECMAScript. */ + // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ + // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ + "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ + + /* Type Checking */ + "strict": true, /* Enable all strict type-checking options. */ + // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ + // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ + // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ + // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ + // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + // "strictBuiltinIteratorReturn": true, /* Built-in iterators are instantiated with a 'TReturn' type of 'undefined' instead of 'any'. */ + // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ + // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ + // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ + // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ + // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ + // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ + // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ + // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ + // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ + // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ + // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ + // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ + // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ + + /* Completeness */ + // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ + "skipLibCheck": true /* Skip type checking all .d.ts files. */ + }, + "include": [ + "src/**/*.ts" + ], + "exclude": [ + "src/**/*.test.ts" + ] +}