diff --git a/.dockerignore b/.dockerignore
new file mode 100644
index 0000000..af47c58
--- /dev/null
+++ b/.dockerignore
@@ -0,0 +1,7 @@
+.git
+.gitignore
+LICENSE
+README.md
+deploy/db
+tests
+
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..79aabdb
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1 @@
+deploy/db/data.sql.gz filter=lfs diff=lfs merge=lfs -text
diff --git a/.github/ISSUE_TEMPLATE/bug-report.md b/.github/ISSUE_TEMPLATE/bug-report.md
new file mode 100644
index 0000000..c9c17f7
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug-report.md
@@ -0,0 +1,28 @@
+---
+name: Bug Report
+about: Use this to report a new bug
+
+---
+
+### Expected Behavior
+
+
+### Current Behavior
+
+
+### Possible Solution
+
+
+### Steps to Reproduce
+
+
+1.
+2.
+3.
+4.
+
+### Context (Environment)
+
+
+
+
diff --git a/.github/ISSUE_TEMPLATE/feature-request.md b/.github/ISSUE_TEMPLATE/feature-request.md
new file mode 100644
index 0000000..d82023b
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/feature-request.md
@@ -0,0 +1,14 @@
+---
+name: Feature Request
+about: Suggest an idea for this project
+
+---
+
+### Description
+
+
+### Proposed solution
+
+
+### Definition of Done
+
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
new file mode 100644
index 0000000..ec49d8a
--- /dev/null
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -0,0 +1,47 @@
+
+
+
+### What it is about:
+- [ ] Bug fix
+- [ ] Functional change
+- [ ] New feature
+- [ ] Code cleanup
+- [ ] Build system change
+- [ ] Documentation change
+- [ ] Language translation
+
+
+
+### Pull request long description:
+
+
+### Changes made:
+
+
+
+### Related issues:
+
+
+
+### Additional information:
+
+
+### Release note:
+
+
+
+### Documentation change:
+
+
+
diff --git a/.github/workflows/testsuite.yml b/.github/workflows/testsuite.yml
new file mode 100644
index 0000000..3f133df
--- /dev/null
+++ b/.github/workflows/testsuite.yml
@@ -0,0 +1,58 @@
+name: "Testsuite"
+
+on:
+ pull_request:
+ branches:
+ - master
+ push:
+ branches:
+ - 'tests'
+ - 'tests/*'
+
+jobs:
+ testsuite:
+ strategy:
+ max-parallel: 4
+ matrix:
+ # os: [ubuntu-latest, macOS-latest]
+ os: [ubuntu-latest]
+
+ runs-on: ${{ matrix.os }}
+
+ name: Beacon (v2.x) API tests
+
+ steps:
+ - name: Install required tools
+ run: |
+ git clone https://github.com/bats-core/bats-core.git
+ pushd bats-core
+ git checkout v1.1.0
+ sudo ./install.sh /usr/local
+ popd
+ rm -rf bats-core
+ sudo apt-get install curl jq git-lfs
+ sudo -- bash -c -e "echo '127.0.0.1 idp beacon beacon-permissions' >> /etc/hosts"
+ - uses: actions/checkout@master
+ - name: (re)Build docker images
+ run: |
+ pushd deploy
+ docker-compose build beacon
+ popd
+ - name: Bootstrap a Beacon
+ run: |
+ pushd deploy
+ docker-compose up -d db
+ sleep 30
+ docker-compose up -d
+ docker-compose ps
+ sleep 60
+ popd
+ - name: Running testsuite
+ run: bats tests
+ - name: Cleanup
+ run: |
+ pushd deploy
+ docker-compose down -v
+ popd
+
+
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..19dd967
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,130 @@
+*~
+.#*
+.DS_Store
+tmp/
+.bak
+
+
+# Byte-compiled / optimized / DLL files
+__pycache__/
+*.py[cod]
+*$py.class
+
+# C extensions
+*.so
+
+# Distribution / packaging
+.Python
+build/
+develop-eggs/
+dist/
+downloads/
+eggs/
+.eggs/
+lib/
+lib64/
+parts/
+sdist/
+var/
+wheels/
+*.egg-info/
+.installed.cfg
+*.egg
+MANIFEST
+
+# PyInstaller
+# Usually these files are written by a python script from a template
+# before PyInstaller builds the exe, so as to inject date/other infos into it.
+*.manifest
+*.spec
+
+# Installer logs
+pip-log.txt
+pip-delete-this-directory.txt
+
+# Unit test / coverage reports
+htmlcov/
+.tox/
+.coverage
+.coverage.*
+.cache
+nosetests.xml
+coverage.xml
+*.cover
+.hypothesis/
+.pytest_cache/
+
+# Translations
+*.mo
+*.pot
+
+# Django stuff:
+*.log
+local_settings.py
+db.sqlite3
+
+# Flask stuff:
+instance/
+.webassets-cache
+
+# Scrapy stuff:
+.scrapy
+
+# Sphinx documentation
+docs/_build/
+
+# PyBuilder
+target/
+
+# Jupyter Notebook
+.ipynb_checkpoints
+
+# pyenv
+.python-version
+
+# celery beat schedule file
+celerybeat-schedule
+
+# SageMath parsed files
+*.sage.py
+
+# Environments
+#.env
+.venv
+env/
+venv/
+ENV/
+env.bak/
+venv.bak/
+
+# Spyder project settings
+.spyderproject
+.spyproject
+
+# Rope project settings
+.ropeproject
+
+# mkdocs documentation
+/site
+
+# mypy
+.mypy_cache/
+
+# Grunt
+/ui/grunt
+
+# Tests tmp
+/tests/tmp/
+
+# IntelliJ
+.idea/
+
+# VS Code
+.vscode/
+
+# Custom
+deploy/request.json
+typings/
+deploy/ontologies/*.obo
+deploy/ontologies/*.owl*
+.antlr/
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..0b45d1e
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,62 @@
+##########################
+## Build env
+##########################
+FROM python:3.10-buster AS BUILD
+
+ENV DEBIAN_FRONTEND noninteractive
+
+RUN apt-get update
+#RUN apt-get upgrade -y
+RUN apt-get install -y --no-install-recommends \
+ ca-certificates pkg-config make \
+ libssl-dev libffi-dev libpq-dev
+
+# python packages
+RUN pip install --upgrade pip
+COPY requirements.txt /tmp/requirements.txt
+RUN pip install -r /tmp/requirements.txt
+
+##########################
+## Final image
+##########################
+FROM python:3.10-buster
+
+LABEL maintainer "CRG System Developers"
+LABEL org.label-schema.schema-version="2.0"
+LABEL org.label-schema.vcs-url="https://github.com/EGA-archive/beacon-2.x/"
+
+# Too much ?
+COPY --from=BUILD /usr/local/bin /usr/local/bin
+COPY --from=BUILD /usr/local/lib /usr/local/lib
+
+RUN apt-get update && \
+# apt-get upgrade -y && \
+ apt-get install -y --no-install-recommends \
+ nginx \
+ && \
+ rm -rf /var/lib/apt/lists/* /etc/apt/sources.list.d/nginx.list && \
+ apt-get purge -y --auto-remove
+
+COPY deploy/nginx.conf /beacon/nginx.conf
+COPY deploy/supervisord.conf /beacon/supervisord.conf
+COPY deploy/entrypoint.sh /usr/local/bin/entrypoint.sh
+COPY beacon /beacon/beacon
+COPY ui /beacon/ui
+
+RUN groupadd beacon && \
+ useradd -M -g beacon beacon && \
+# mkdir /beacon && \
+ mkdir /var/run/beacon && \
+ chown -R beacon:beacon /beacon && \
+# chmod 400 /beacon/beacon/conf.py && \
+ chown -R beacon:beacon /var/log/nginx && \
+ chown -R beacon:beacon /var/lib/nginx && \
+ chown -R beacon:beacon /etc/nginx && \
+ chown -R beacon:beacon /var/run/beacon && \
+ mkdir -p /var/log/supervisord && \
+ chown -R beacon:beacon /var/log/supervisord && \
+ chmod +x /usr/local/bin/entrypoint.sh
+
+WORKDIR /beacon
+USER beacon
+ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..261eeb9
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..2363ebe
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,40 @@
+################################################
+##
+## Makefile for Local development
+##
+################################################
+SHELL := /bin/bash
+IMG ?= egarchive/beacon
+TARGET ?= 2.0
+CONTAINER ?= beacon
+
+.PHONY: build run exec down server
+
+all: build run server
+
+build:
+ docker build $(ARGS) -t $(IMG):$(TARGET) .
+
+run: PORTS=-p 5050:5050
+up: PORTS=-p 5050:8080
+run: ENTRYPOINT=--entrypoint "/bin/sleep"
+run: CMD=1000000000000
+up run:
+ docker run -d --rm \
+ --name $(CONTAINER) \
+ $(PORTS) \
+ -v $(shell pwd)/deploy/conf.py:/beacon/beacon/conf.py \
+ -v $(shell pwd)/beacon:/beacon/beacon \
+ -v $(shell pwd)/ui/static:/beacon/static \
+ -v $(shell pwd)/ui/templates:/beacon/templates \
+ $(ENTRYPOINT) $(IMG):$(TARGET) $(CMD)
+
+exec-root: D_USER=--user root
+exec-root exec:
+ docker exec -it $(D_USER) $(CONTAINER) bash
+server:
+ docker exec -it $(CONTAINER) python -m beacon
+
+down:
+ -docker kill $(CONTAINER)
+ -docker rm $(CONTAINER)
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..cedf6ec
--- /dev/null
+++ b/README.md
@@ -0,0 +1,23 @@
+# Beacon v2.x
+
+
+
+This repository is an implementation of the [Beacon v2.0 Model](https://github.com/ga4gh-beacon/beacon-v2-Models) and contains:
+
+* The (Python 3.9+) [source code for beacon](beacon),
+* A MongoDB database with sample data to demo the capabilities of the Beacon API.
+
+> [Local deployment instructions](deploy/README.md)
+
+### Version notes
+
+* Fusions (`mateName`) are not supported.
+
+
+### Acknowlegments
+
+We thank the [CSC Finland](https://www.csc.fi/) team for their
+contribution with a [python implementing of version
+1](https://github.com/CSCfi/beacon-python). They, in turn, got help
+from members of [NBIS](https://nbis.se/) and
+[DDBJ](https://www.ddbj.nig.ac.jp).
diff --git a/beacon/__init__.py b/beacon/__init__.py
new file mode 100644
index 0000000..94dfc87
--- /dev/null
+++ b/beacon/__init__.py
@@ -0,0 +1,33 @@
+"""
+The ``beacon`` package contains code to start a Beacon Rest API.
+"""
+
+__title__ = 'Beacon v2.0'
+__version__ = VERSION = '2.0'
+__author__ = 'CRG developers'
+__license__ = 'Apache 2.0'
+__copyright__ = 'Beacon 2.0 @ CRG, Barcelona'
+
+import sys
+
+if sys.version_info < (3, 7):
+ print("beacon-python requires python 3.7 or higher", file=sys.stderr)
+ sys.exit(1)
+
+# Send warnings using the package warnings to the logging system
+# The warnings are logged to a logger named 'py.warnings' with a severity of WARNING.
+# See: https://docs.python.org/3/library/logging.html#integration-with-the-warnings-module
+import logging
+import warnings
+from logging.config import dictConfig
+from pathlib import Path
+import yaml
+
+logging.captureWarnings(True)
+warnings.simplefilter("default") # do not ignore Deprecation Warnings
+
+
+def load_logger():
+ log_file = Path(__file__).parent / "logger.yml"
+ with open(log_file, 'r') as stream:
+ dictConfig(yaml.safe_load(stream))
diff --git a/beacon/__main__.py b/beacon/__main__.py
new file mode 100644
index 0000000..26c1082
--- /dev/null
+++ b/beacon/__main__.py
@@ -0,0 +1,134 @@
+import base64
+import logging
+import os
+import ssl
+import sys
+from pathlib import Path
+from time import strftime
+from datetime import datetime
+
+import aiohttp_jinja2
+import jinja2
+from aiohttp import web
+import aiohttp_cors
+from aiohttp_session import setup as session_setup
+from aiohttp_session.cookie_storage import EncryptedCookieStorage
+from cryptography import fernet
+
+from beacon import conf, load_logger
+from beacon.request import ontologies
+from beacon.response import middlewares
+from beacon.request.routes import routes
+from beacon.db import client
+
+LOG = logging.getLogger(__name__)
+
+
+async def initialize(app):
+ # Load static
+ app["static_root_url"] = "/static"
+
+ # Configure jinja
+ env = aiohttp_jinja2.get_env(app)
+ env.globals.update(
+ len=len,
+ max=max,
+ enumerate=enumerate,
+ range=range,
+ conf=conf,
+ now=strftime("%Y"),
+ )
+
+ setattr(conf, 'update_datetime', datetime.now().isoformat())
+
+ LOG.info("Initialization done.")
+
+
+async def destroy(app):
+ """Upon server close, close the DB connections."""
+ LOG.info("Shutting down.")
+ client.close()
+
+
+def main(path=None):
+ # Configure the logging
+ load_logger()
+
+ # Configure the beacon
+ beacon = web.Application(
+ middlewares=[web.normalize_path_middleware(), middlewares.error_middleware]
+ )
+ beacon.on_startup.append(initialize)
+ beacon.on_cleanup.append(destroy)
+
+ # Prepare for the UI
+ main_dir = Path(__file__).parent.parent.resolve()
+ # Where the templates are
+ template_loader = jinja2.FileSystemLoader(str(main_dir / "ui" / "templates"))
+ aiohttp_jinja2.setup(beacon, loader=template_loader)
+
+ # Session middleware
+ fernet_key = fernet.Fernet.generate_key()
+ secret_key = base64.urlsafe_b64decode(
+ fernet_key
+ ) # 32 url-safe base64-encoded bytes
+ storage = EncryptedCookieStorage(
+ secret_key, cookie_name=middlewares.SESSION_STORAGE
+ )
+ session_setup(beacon, storage)
+
+ # Configure the endpoints
+ beacon.add_routes(routes)
+
+ cors = aiohttp_cors.setup(beacon, defaults={
+ "*": aiohttp_cors.ResourceOptions(
+ allow_credentials=True,
+ expose_headers="*",
+ allow_headers="*",
+ )
+})
+
+ for route in list(beacon.router.routes()):
+ cors.add(route)
+
+ # Configure HTTPS (or not)
+ ssl_context = None
+ if getattr(conf, "beacon_tls_enabled", False):
+ use_as_client = getattr(conf, "beacon_tls_client", False)
+ sslcontext = ssl.create_default_context(
+ ssl.Purpose.CLIENT_AUTH if use_as_client else ssl.Purpose.SERVER_AUTH
+ )
+ sslcontext.load_cert_chain(conf.beacon_cert, conf.beacon_key) # should exist
+ sslcontext.check_hostname = False
+ # TODO: add the CA chain
+
+ # Load ontologies
+ LOG.info("Loading ontologies... (this might take a while)")
+ ontologies.load_obo()
+ LOG.info("Finished loading the ontologies...")
+
+ # Run beacon
+ if path:
+ if os.path.exists(path):
+ os.unlink(path)
+ # will create the UDS socket and bind to it
+ web.run_app(beacon, path=path, shutdown_timeout=0, ssl_context=ssl_context)
+ else:
+ static_files = Path(__file__).parent.parent.resolve() / "ui" / "static"
+ beacon.add_routes([web.static("/static", str(static_files))])
+ web.run_app(
+ beacon,
+ host=getattr(conf, "beacon_host", "0.0.0.0"),
+ port=getattr(conf, "beacon_port", 5050),
+ shutdown_timeout=0,
+ ssl_context=ssl_context,
+ )
+
+
+if __name__ == "__main__":
+ # Unix socket
+ if len(sys.argv) > 1:
+ main(path=sys.argv[1])
+ # host:port
+ else:
+ main()
diff --git a/beacon/conf.py b/beacon/conf.py
new file mode 100644
index 0000000..36a75d7
--- /dev/null
+++ b/beacon/conf.py
@@ -0,0 +1,129 @@
+"""Beacon Configuration."""
+
+#
+# Beacon general info
+#
+beacon_id = 'org.ega-archive.ga4gh-approval-beacon-test' # ID of the Beacon
+beacon_name = 'GA4GH Approval Beacon Test' # Name of the Beacon service
+api_version = 'v2.0.0' # Version of the Beacon implementation
+uri = 'https://beacon-giab-test.ega-archive.org'
+
+#
+# Beacon granularity
+#
+default_beacon_granularity = "record"
+max_beacon_granularity = "record"
+
+#
+# Organization info
+#
+org_id = 'EGA' # Id of the organization
+org_name = 'European Genome-Phenome Archive (EGA)' # Full name
+org_description = ('The European Genome-phenome Archive (EGA) '
+ 'is a service for permanent archiving and sharing '
+ 'of all types of personally identifiable genetic '
+ 'and phenotypic data resulting from biomedical research projects.')
+org_adress = ('C/ Dr. Aiguader, 88'
+ 'PRBB Building'
+ '08003 Barcelona, Spain')
+org_welcome_url = 'https://ega-archive.org/'
+org_contact_url = 'mailto:beacon.ega@crg.eu'
+org_logo_url = 'https://ega-archive.org/images/logo.png'
+org_info = ''
+
+#
+# Project info
+#
+description = (r"This Beacon "
+ r"is based on the GA4GH Beacon "
+ r"v2.0 ")
+version = 'v2.0'
+welcome_url = 'https://beacon.ega-archive.org/'
+alternative_url = 'https://beacon.ega-archive.org/api'
+create_datetime = '2021-11-29T12:00:00.000000'
+update_datetime = ''
+# update_datetime will be created when initializing the beacon, using the ISO 8601 format
+
+#
+# Service
+#
+service_type = 'org.ga4gh:beacon:1.0.0' # service type
+service_url = 'https://beacon.ega-archive.org/api/services'
+entry_point = False
+is_open = True
+documentation_url = 'https://github.com/EGA-archive/beacon-2.x/' # Documentation of the service
+environment = 'test' # Environment (production, development or testing/staging deployments)
+
+# GA4GH
+ga4gh_service_type_group = 'org.ga4gh'
+ga4gh_service_type_artifact = 'beacon'
+ga4gh_service_type_version = '1.0'
+
+# Beacon handovers
+beacon_handovers = [
+ {
+ 'handoverType': {
+ 'id': 'CUSTOM',
+ 'label': 'Project description'
+ },
+ 'note': 'Project description',
+ 'url': 'https://www.nist.gov/programs-projects/genome-bottle'
+ }
+]
+
+#
+# Database connection
+#
+database_host = '127.0.0.1'
+database_port = 27017
+database_user = 'root'
+database_password = 'example'
+database_name = 'beacon'
+database_auth_source = 'admin'
+# database_schema = 'public' # comma-separated list of schemas
+# database_app_name = 'beacon-appname' # Useful to track connections
+
+#
+# Web server configuration
+# Note: a Unix Socket path is used when behind a server, not host:port
+#
+beacon_host = '0.0.0.0'
+beacon_port = 5050
+beacon_tls_enabled = False
+beacon_tls_client = False
+beacon_cert = '/etc/ega/server.cert'
+beacon_key = '/etc/ega/server.key'
+CA_cert = '/etc/ega/CA.cert'
+
+#
+# Permissions server configuration
+#
+permissions_url = 'http://beacon-permissions'
+
+#
+# IdP endpoints (OpenID Connect/Oauth2)
+#
+# or use Elixir AAI (see https://elixir-europe.org/services/compute/aai)
+#
+idp_client_id = 'beacon'
+idp_client_secret = 'b26ca0f9-1137-4bee-b453-ee51eefbe7ba' # same as in the test IdP
+idp_scope = 'profile openid'
+
+idp_authorize = 'http://idp/auth/realms/Beacon/protocol/openid-connect/auth'
+idp_access_token = 'http://idp/auth/realms/Beacon/protocol/openid-connect/token'
+idp_introspection = 'http://idp/auth/realms/Beacon/protocol/openid-connect/token/introspect'
+idp_user_info = 'http://idp/auth/realms/Beacon/protocol/openid-connect/userinfo'
+idp_logout = 'http://idp/auth/realms/Beacon/protocol/openid-connect/logout'
+
+idp_redirect_uri = 'http://beacon:5050/login'
+
+#
+# UI
+#
+autocomplete_limit = 16
+autocomplete_ellipsis = '...'
+
+#
+# Ontologies
+#
+ontologies_folder = "deploy/ontologies/"
diff --git a/beacon/db/__init__.py b/beacon/db/__init__.py
new file mode 100644
index 0000000..8f2cacd
--- /dev/null
+++ b/beacon/db/__init__.py
@@ -0,0 +1,11 @@
+from pymongo.mongo_client import MongoClient
+from beacon import conf
+
+client = MongoClient("mongodb://{}:{}@{}:{}/{}?authSource={}".format(
+ conf.database_user,
+ conf.database_password,
+ conf.database_host,
+ conf.database_port,
+ conf.database_name,
+ conf.database_auth_source
+))
diff --git a/beacon/db/analyses.py b/beacon/db/analyses.py
new file mode 100644
index 0000000..0676f02
--- /dev/null
+++ b/beacon/db/analyses.py
@@ -0,0 +1,148 @@
+import logging
+from typing import Dict, List, Optional
+from beacon.db.filters import apply_alphanumeric_filter, apply_filters
+from beacon.db.utils import query_id, query_ids, get_count, get_documents, get_cross_query
+from beacon.db import client
+from beacon.request.model import AlphanumericFilter, Operator, RequestParams
+from beacon.db.schemas import DefaultSchemas
+from beacon.db.utils import get_documents, query_id, get_count
+from beacon.request.model import RequestParams
+
+LOG = logging.getLogger(__name__)
+
+ANALYSES_PROPERTY_MAP = {
+ "aligner": "aligner",
+ "analysisDate": "analysisDate",
+ "biosampleId": "biosampleId",
+ "individualId": "individualId",
+ "pipelineName": "pipelineName",
+ "pipelineRef": "pipelineRef",
+ "runId": "runId",
+ "variantCaller": "variantCaller"
+}
+
+def generate_position_filter_start(key: str, value: List[int]) -> List[AlphanumericFilter]:
+ LOG.debug("len value = {}".format(len(value)))
+ filters = []
+ if len(value) == 1:
+ filters.append(AlphanumericFilter(
+ id=ANALYSES_PROPERTY_MAP[key],
+ value=[value[0]],
+ operator=Operator.GREATER_EQUAL
+ ))
+ elif len(value) == 2:
+ filters.append(AlphanumericFilter(
+ id=ANALYSES_PROPERTY_MAP[key],
+ value=[value[0]],
+ operator=Operator.GREATER_EQUAL
+ ))
+ filters.append(AlphanumericFilter(
+ id=ANALYSES_PROPERTY_MAP[key],
+ value=[value[1]],
+ operator=Operator.LESS_EQUAL
+ ))
+ return filters
+
+
+def generate_position_filter_end(key: str, value: List[int]) -> List[AlphanumericFilter]:
+ LOG.debug("len value = {}".format(len(value)))
+ filters = []
+ if len(value) == 1:
+ filters.append(AlphanumericFilter(
+ id=ANALYSES_PROPERTY_MAP[key],
+ value=[value[0]],
+ operator=Operator.LESS_EQUAL
+ ))
+ elif len(value) == 2:
+ filters.append(AlphanumericFilter(
+ id=ANALYSES_PROPERTY_MAP[key],
+ value=[value[0]],
+ operator=Operator.GREATER_EQUAL
+ ))
+ filters.append(AlphanumericFilter(
+ id=ANALYSES_PROPERTY_MAP[key],
+ value=[value[1]],
+ operator=Operator.LESS_EQUAL
+ ))
+ return filters
+
+
+def apply_request_parameters(query: Dict[str, List[dict]], qparams: RequestParams):
+ LOG.debug("Request parameters len = {}".format(len(qparams.query.request_parameters)))
+ if len(qparams.query.request_parameters) > 0 and "$and" not in query:
+ query["$and"] = []
+ for k, v in qparams.query.request_parameters.items():
+ query["$and"].append(apply_alphanumeric_filter({}, AlphanumericFilter(
+ id=ANALYSES_PROPERTY_MAP[k],
+ value=v
+ )))
+ return query
+
+def get_analyses(entry_id: Optional[str], qparams: RequestParams):
+ query = apply_request_parameters({}, qparams)
+ query = apply_filters(query, qparams.query.filters)
+ schema = DefaultSchemas.ANALYSES
+ count = get_count(client.beacon.analyses, query)
+ docs = get_documents(
+ client.beacon.analyses,
+ query,
+ qparams.query.pagination.skip,
+ qparams.query.pagination.limit
+ )
+ return schema, count, docs
+
+
+def get_analysis_with_id(entry_id: Optional[str], qparams: RequestParams):
+ query = apply_request_parameters({}, qparams)
+ query = apply_filters(query, qparams.query.filters)
+ query = query_id(query, entry_id)
+ schema = DefaultSchemas.ANALYSES
+ count = get_count(client.beacon.analyses, query)
+ docs = get_documents(
+ client.beacon.analyses,
+ query,
+ qparams.query.pagination.skip,
+ qparams.query.pagination.limit
+ )
+ return schema, count, docs
+
+
+def get_variants_of_analysis(entry_id: Optional[str], qparams: RequestParams):
+ query = {"$and": [{"id": entry_id}]}
+ query = apply_request_parameters(query, qparams)
+ query = apply_filters(query, qparams.query.filters)
+ count = get_count(client.beacon.analyses, query)
+ analysis_ids = client.beacon.analyses \
+ .find_one(query, {"biosampleId": 1, "_id": 0})
+ LOG.debug(analysis_ids)
+ analysis_ids=get_cross_query(analysis_ids,'single','biosampleId')
+ LOG.debug(analysis_ids)
+ query = apply_filters(analysis_ids, qparams.query.filters)
+
+ schema = DefaultSchemas.GENOMICVARIATIONS
+ count = get_count(client.beacon.genomicVariations, query)
+ docs = get_documents(
+ client.beacon.genomicVariations,
+ query,
+ qparams.query.pagination.skip,
+ qparams.query.pagination.limit
+ )
+ return schema, count, docs
+
+
+
+
+'''
+ query = { "$and": [ { "biosampleId": entry_id } ] }
+ query = apply_request_parameters(query, qparams)
+ query = apply_filters(query, qparams.query.filters)
+ schema = DefaultSchemas.GENOMICVARIATIONS
+ count = get_count(client.beacon.genomicVariations, query)
+ docs = get_documents(
+ client.beacon.genomicVariations,
+ query,
+ qparams.query.pagination.skip,
+ qparams.query.pagination.limit
+ )
+ return schema, count, docs
+ '''
diff --git a/beacon/db/biosamples.py b/beacon/db/biosamples.py
new file mode 100644
index 0000000..599493d
--- /dev/null
+++ b/beacon/db/biosamples.py
@@ -0,0 +1,152 @@
+import logging
+from typing import Dict, List, Optional
+from beacon.db.filters import apply_alphanumeric_filter, apply_filters
+from beacon.db.utils import query_id, query_ids, get_count, get_documents
+from beacon.db import client
+from beacon.request.model import AlphanumericFilter, Operator, RequestParams
+from beacon.db.filters import *
+from beacon.db.schemas import DefaultSchemas
+from beacon.db.utils import *
+from beacon.request.model import RequestParams
+
+LOG = logging.getLogger(__name__)
+
+BIOSAMPLES_PROPERTY_MAP = {
+ "biosampleStatusId": "biosampleStatus.id",
+ "biosampleStatusLabel": "biosampleStatus.label",
+ "collectionDate": "collectionDate",
+ "collectionMoment": "collectionMoment",
+ "sampleOriginTypeId": "sampleOriginType.id",
+ "sampleOriginTypeLabel": "sampleOriginType.label"
+}
+
+def generate_position_filter_start(key: str, value: List[int]) -> List[AlphanumericFilter]:
+ LOG.debug("len value = {}".format(len(value)))
+ filters = []
+ if len(value) == 1:
+ filters.append(AlphanumericFilter(
+ id=BIOSAMPLES_PROPERTY_MAP[key],
+ value=[value[0]],
+ operator=Operator.GREATER_EQUAL
+ ))
+ elif len(value) == 2:
+ filters.append(AlphanumericFilter(
+ id=BIOSAMPLES_PROPERTY_MAP[key],
+ value=[value[0]],
+ operator=Operator.GREATER_EQUAL
+ ))
+ filters.append(AlphanumericFilter(
+ id=BIOSAMPLES_PROPERTY_MAP[key],
+ value=[value[1]],
+ operator=Operator.LESS_EQUAL
+ ))
+ return filters
+
+
+def generate_position_filter_end(key: str, value: List[int]) -> List[AlphanumericFilter]:
+ LOG.debug("len value = {}".format(len(value)))
+ filters = []
+ if len(value) == 1:
+ filters.append(AlphanumericFilter(
+ id=BIOSAMPLES_PROPERTY_MAP[key],
+ value=[value[0]],
+ operator=Operator.LESS_EQUAL
+ ))
+ elif len(value) == 2:
+ filters.append(AlphanumericFilter(
+ id=BIOSAMPLES_PROPERTY_MAP[key],
+ value=[value[0]],
+ operator=Operator.GREATER_EQUAL
+ ))
+ filters.append(AlphanumericFilter(
+ id=BIOSAMPLES_PROPERTY_MAP[key],
+ value=[value[1]],
+ operator=Operator.LESS_EQUAL
+ ))
+ return filters
+
+
+def apply_request_parameters(query: Dict[str, List[dict]], qparams: RequestParams):
+ LOG.debug("Request parameters len = {}".format(len(qparams.query.request_parameters)))
+ if len(qparams.query.request_parameters) > 0 and "$and" not in query:
+ query["$and"] = []
+ for k, v in qparams.query.request_parameters.items():
+ query["$and"].append(apply_alphanumeric_filter({}, AlphanumericFilter(
+ id=BIOSAMPLES_PROPERTY_MAP[k],
+ value=v
+ )))
+ return query
+
+
+def get_biosamples(entry_id: Optional[str], qparams: RequestParams):
+ query = apply_request_parameters({}, qparams)
+ query = apply_filters(query, qparams.query.filters)
+ schema = DefaultSchemas.BIOSAMPLES
+ count = get_count(client.beacon.biosamples, query)
+ docs = get_documents(
+ client.beacon.biosamples,
+ query,
+ qparams.query.pagination.skip,
+ qparams.query.pagination.limit
+ )
+ return schema, count, docs
+
+
+def get_biosample_with_id(entry_id: Optional[str], qparams: RequestParams):
+ query = apply_request_parameters({}, qparams)
+ query = apply_filters(query, qparams.query.filters)
+ query = query_id(query, entry_id)
+ schema = DefaultSchemas.BIOSAMPLES
+ count = get_count(client.beacon.biosamples, query)
+ docs = get_documents(
+ client.beacon.biosamples,
+ query,
+ qparams.query.pagination.skip,
+ qparams.query.pagination.limit
+ )
+ return schema, count, docs
+
+
+def get_variants_of_biosample(entry_id: Optional[str], qparams: RequestParams):
+ query = {"caseLevelData.biosampleId": entry_id}
+ query = apply_request_parameters(query, qparams)
+ query = apply_filters(query, qparams.query.filters)
+ schema = DefaultSchemas.GENOMICVARIATIONS
+ count = get_count(client.beacon.genomicVariations, query)
+ docs = get_documents(
+ client.beacon.genomicVariations,
+ query,
+ qparams.query.pagination.skip,
+ qparams.query.pagination.limit
+ )
+ return schema, count, docs
+
+
+def get_analyses_of_biosample(entry_id: Optional[str], qparams: RequestParams):
+ query = {"biosampleId": entry_id}
+ query = apply_request_parameters(query, qparams)
+ query = apply_filters(query, qparams.query.filters)
+ schema = DefaultSchemas.ANALYSES
+ count = get_count(client.beacon.analyses, query)
+ docs = get_documents(
+ client.beacon.analyses,
+ query,
+ qparams.query.pagination.skip,
+ qparams.query.pagination.limit
+ )
+ return schema, count, docs
+
+
+def get_runs_of_biosample(entry_id: Optional[str], qparams: RequestParams):
+ query = {"biosampleId": entry_id}
+ query = apply_request_parameters(query, qparams)
+ query = apply_filters(query, qparams.query.filters)
+ schema = DefaultSchemas.RUNS
+ count = get_count(client.beacon.runs, query)
+ docs = get_documents(
+ client.beacon.runs,
+ query,
+ qparams.query.pagination.skip,
+ qparams.query.pagination.limit
+ )
+ return schema, count, docs
diff --git a/beacon/db/cohorts.py b/beacon/db/cohorts.py
new file mode 100644
index 0000000..e3065df
--- /dev/null
+++ b/beacon/db/cohorts.py
@@ -0,0 +1,43 @@
+from typing import Optional
+from beacon.db.filters import apply_filters
+from beacon.db.schemas import DefaultSchemas
+from beacon.db.utils import query_id, get_count, get_documents
+from beacon.request.model import RequestParams
+from beacon.db import client
+
+
+def get_cohorts(entry_id: Optional[str], qparams: RequestParams):
+ query = apply_filters({}, qparams.query.filters)
+ schema = DefaultSchemas.COHORTS
+ count = get_count(client.beacon.cohorts, query)
+ docs = get_documents(
+ client.beacon.cohorts,
+ query,
+ qparams.query.pagination.skip,
+ qparams.query.pagination.limit
+ )
+ return schema, count, docs
+
+
+def get_cohort_with_id(entry_id: Optional[str], qparams: RequestParams):
+ query = apply_filters({}, qparams.query.filters)
+ query = query_id(query, entry_id)
+ schema = DefaultSchemas.COHORTS
+ count = get_count(client.beacon.cohorts, query)
+ docs = get_documents(
+ client.beacon.cohorts,
+ query,
+ qparams.query.pagination.skip,
+ qparams.query.pagination.limit
+ )
+ return schema, count, docs
+
+
+def get_individuals_of_cohort(entry_id: Optional[str], qparams: RequestParams):
+ # TODO
+ pass
+
+
+def get_filtering_terms_of_cohort(entry_id: Optional[str], qparams: RequestParams):
+ # TODO
+ pass
diff --git a/beacon/db/datasets.py b/beacon/db/datasets.py
new file mode 100644
index 0000000..4422af8
--- /dev/null
+++ b/beacon/db/datasets.py
@@ -0,0 +1,100 @@
+from typing import Optional
+from beacon.db.filters import apply_filters
+from beacon.db.schemas import DefaultSchemas
+from beacon.db.utils import query_id, get_count, get_documents
+from beacon.request.model import RequestParams
+from beacon.db import client
+
+import logging
+
+LOG = logging.getLogger(__name__)
+
+
+def get_datasets(entry_id: Optional[str], qparams: RequestParams):
+ query = apply_filters({}, qparams.query.filters)
+ schema = DefaultSchemas.DATASETS
+ count = get_count(client.beacon.datasets, query)
+ docs = get_documents(
+ client.beacon.datasets,
+ query,
+ qparams.query.pagination.skip,
+ qparams.query.pagination.limit
+ )
+ return schema, count, docs
+
+
+def get_dataset_with_id(entry_id: Optional[str], qparams: RequestParams):
+ query = apply_filters({}, qparams.query.filters)
+ query = query_id(query, entry_id)
+ schema = DefaultSchemas.DATASETS
+ count = get_count(client.beacon.datasets, query)
+ docs = get_documents(
+ client.beacon.datasets,
+ query,
+ qparams.query.pagination.skip,
+ qparams.query.pagination.limit
+ )
+ return schema, count, docs
+
+
+def get_variants_of_dataset(entry_id: Optional[str], qparams: RequestParams):
+ query = {"datasetId": entry_id}
+ query = apply_filters(query, qparams.query.filters)
+ schema = DefaultSchemas.GENOMICVARIATIONS
+ count = get_count(client.beacon.genomicVariations, query)
+ docs = get_documents(
+ client.beacon.genomicVariations,
+ query,
+ qparams.query.pagination.skip,
+ qparams.query.pagination.limit
+ )
+ return schema, count, docs
+
+
+def get_biosamples_of_dataset(entry_id: Optional[str], qparams: RequestParams):
+ query = {"datasetId": entry_id}
+ query = apply_filters(query, qparams.query.filters)
+ schema = DefaultSchemas.BIOSAMPLES
+ count = get_count(client.beacon.biosamples, query)
+ docs = get_documents(
+ client.beacon.biosamples,
+ query,
+ qparams.query.pagination.skip,
+ qparams.query.pagination.limit
+ )
+ return schema, count, docs
+
+
+def get_individuals_of_dataset(entry_id: Optional[str], qparams: RequestParams):
+ query = {"datasetId": entry_id}
+ query = apply_filters(query, qparams.query.filters)
+ schema = DefaultSchemas.INDIVIDUALS
+ count = get_count(client.beacon.individuals, query)
+ docs = get_documents(
+ client.beacon.individuals,
+ query,
+ qparams.query.pagination.skip,
+ qparams.query.pagination.limit
+ )
+ return schema, count, docs
+
+
+def filter_public_datasets(requested_datasets_ids):
+ query = {"dataUseConditions.duoDataUse.modifiers.id": "DUO:0000004"}
+ return client.beacon.datasets \
+ .find(query)
+
+
+def get_filtering_terms_of_dataset(entry_id: Optional[str], qparams: RequestParams):
+ # TODO
+ pass
+
+
+def get_runs_of_dataset(entry_id: Optional[str], qparams: RequestParams):
+ # TODO: To be fixed in the model
+ pass
+
+
+def get_analyses_of_dataset(entry_id: Optional[str], qparams: RequestParams):
+ # TODO: To be fixed in the model
+ pass
diff --git a/beacon/db/filtering_terms.py b/beacon/db/filtering_terms.py
new file mode 100644
index 0000000..8af27b0
--- /dev/null
+++ b/beacon/db/filtering_terms.py
@@ -0,0 +1,32 @@
+from typing import Optional
+from beacon.db import client
+from beacon.db.filters import apply_filters
+from beacon.db.utils import query_id, get_documents, get_count
+from beacon.request.model import RequestParams
+
+
+def get_filtering_terms(entry_id: Optional[str], qparams: RequestParams):
+ query = apply_filters({}, qparams.query.filters)
+ schema = None
+ count = get_count(client.beacon.filtering_terms, query)
+ docs = get_documents(
+ client.beacon.filtering_terms,
+ query,
+ qparams.query.pagination.skip,
+ qparams.query.pagination.limit
+ )
+ return schema, count, docs
+
+
+def get_filtering_term_with_id(entry_id: Optional[str], qparams: RequestParams):
+ query = apply_filters({}, qparams.query.filters)
+ query = query_id(query, entry_id)
+ schema = None
+ count = get_count(client.beacon.filtering_terms, query)
+ docs = get_documents(
+ client.beacon.filtering_terms,
+ query,
+ qparams.query.pagination.skip,
+ qparams.query.pagination.limit
+ )
+ return schema, count, docs
diff --git a/beacon/db/filters.py b/beacon/db/filters.py
new file mode 100644
index 0000000..e34c399
--- /dev/null
+++ b/beacon/db/filters.py
@@ -0,0 +1,111 @@
+from collections import defaultdict
+from typing import List, Union
+import re
+import dataclasses
+from copy import deepcopy
+
+from beacon.request import ontologies
+from beacon.request.model import AlphanumericFilter, CustomFilter, OntologyFilter, Operator, Similarity
+
+import logging
+
+LOG = logging.getLogger(__name__)
+
+CURIE_REGEX = r'^([a-zA-Z0-9]*):\/?[a-zA-Z0-9]*$'
+
+
+def apply_filters(query: dict, filters: List[dict]) -> dict:
+ LOG.debug("Filters len = {}".format(len(filters)))
+ if len(filters) > 0:
+ query["$and"] = []
+ for filter in filters:
+ partial_query = {}
+ if "value" in filter:
+ filter = AlphanumericFilter(**filter)
+ LOG.debug("Alphanumeric filter: %s %s %s", filter.id, filter.operator, filter.value)
+ partial_query = apply_alphanumeric_filter(partial_query, filter)
+ elif "similarity" in filter or "includeDescendantTerms" in filter or re.match(CURIE_REGEX, filter["id"]):
+ filter = OntologyFilter(**filter)
+ LOG.debug("Ontology filter: %s", filter.id)
+ partial_query = {"$text": defaultdict(str) }
+ partial_query = apply_ontology_filter(partial_query, filter)
+ else:
+ filter = CustomFilter(**filter)
+ LOG.debug("Custom filter: %s", filter.id)
+ partial_query = apply_custom_filter(partial_query, filter)
+ query["$and"].append(partial_query)
+ return query
+
+
+def apply_ontology_filter(query: dict, filter: OntologyFilter) -> dict:
+
+ is_filter_id_required = True
+
+ # Search similar
+ if filter.similarity != Similarity.EXACT:
+ is_filter_id_required = False
+ similar_terms = ontologies.get_similar_ontology_terms(filter.id, filter.similarity)
+ LOG.debug("Similar: {}".format(similar_terms))
+ for term in similar_terms:
+ if query["$text"]["$search"]:
+ query["$text"]["$search"] += " "
+ query["$text"]["$search"] += term
+
+ # Apply descendant terms
+ if filter.include_descendant_terms:
+ is_filter_id_required = False
+ descendants = ontologies.get_descendants(filter.id)
+ LOG.debug("Descendants: {}".format(descendants))
+ for descendant in descendants:
+ if query["$text"]["$search"]:
+ query["$text"]["$search"] += " "
+ query["$text"]["$search"] += descendant
+
+ if is_filter_id_required:
+ if query["$text"]["$search"]:
+ query["$text"]["$search"] += " "
+ query["$text"]["$search"] += '\"' + filter.id + '\"'
+
+ LOG.debug("QUERY: %s", query)
+ return query
+
+def format_value(value: Union[str, List[int]]) -> Union[List[int], str, int, float]:
+ if isinstance(value, list):
+ return value
+ elif value.isnumeric():
+ if float(value).is_integer():
+ return int(value)
+ else:
+ return float(value)
+ else:
+ return value
+
+def format_operator(operator: Operator) -> str:
+ if operator == Operator.EQUAL:
+ return "$eq"
+ elif operator == Operator.NOT:
+ return "$ne"
+ elif operator == Operator.GREATER:
+ return "$gt"
+ elif operator == Operator.GREATER_EQUAL:
+ return "$gte"
+ elif operator == Operator.LESS:
+ return "$lt"
+ else:
+ # operator == Operator.LESS_EQUAL
+ return "$lte"
+
+def apply_alphanumeric_filter(query: dict, filter: AlphanumericFilter) -> dict:
+ formatted_value = format_value(filter.value)
+ formatted_operator = format_operator(filter.operator)
+ query[filter.id] = { formatted_operator: formatted_value }
+ LOG.debug("QUERY: %s", query)
+ return query
+
+
+def apply_custom_filter(query: dict, filter: CustomFilter) -> dict:
+ if query["$text"]["$search"]:
+ query["$text"]["$search"] += " "
+ query["$text"]["$search"] += filter.id
+ LOG.debug("QUERY: %s", query)
+ return query
diff --git a/beacon/db/g_variants.py b/beacon/db/g_variants.py
new file mode 100644
index 0000000..6b07476
--- /dev/null
+++ b/beacon/db/g_variants.py
@@ -0,0 +1,217 @@
+import logging
+from typing import Dict, List, Optional
+from beacon.db.filters import apply_alphanumeric_filter, apply_filters
+from beacon.db.schemas import DefaultSchemas
+from beacon.db.utils import query_id, query_ids, get_count, get_documents, get_cross_query
+from beacon.request.model import AlphanumericFilter, Operator, RequestParams
+from beacon.db import client
+import json
+from bson import json_util
+
+LOG = logging.getLogger(__name__)
+
+VARIANTS_PROPERTY_MAP = {
+ "assemblyId": "_position.assemblyId",
+ "referenceName": "_position.refseqId",
+ "start": "_position.start",
+ "end": "_position.end",
+ "referenceBases": "variation.referenceBases",
+ "alternateBases": "variation.alternateBases",
+ "variantType": "variation.variantType",
+ "variantMinLength": None,
+ "variantMaxLength": None,
+ "mateName": None,
+ "gene": "molecularAttributes.geneIds",
+ "aachange": "molecularAttributes.aminoacidChanges"
+}
+
+def generate_position_filter_start(key: str, value: List[int]) -> List[AlphanumericFilter]:
+ LOG.debug("len value = {}".format(len(value)))
+ filters = []
+ if len(value) == 1:
+ filters.append(AlphanumericFilter(
+ id=VARIANTS_PROPERTY_MAP[key],
+ value=[value[0]],
+ operator=Operator.GREATER_EQUAL
+ ))
+ elif len(value) == 2:
+ filters.append(AlphanumericFilter(
+ id=VARIANTS_PROPERTY_MAP[key],
+ value=[value[0]],
+ operator=Operator.GREATER_EQUAL
+ ))
+ filters.append(AlphanumericFilter(
+ id=VARIANTS_PROPERTY_MAP[key],
+ value=[value[1]],
+ operator=Operator.LESS_EQUAL
+ ))
+ return filters
+
+
+def generate_position_filter_end(key: str, value: List[int]) -> List[AlphanumericFilter]:
+ LOG.debug("len value = {}".format(len(value)))
+ filters = []
+ if len(value) == 1:
+ filters.append(AlphanumericFilter(
+ id=VARIANTS_PROPERTY_MAP[key],
+ value=[value[0]],
+ operator=Operator.LESS_EQUAL
+ ))
+ elif len(value) == 2:
+ filters.append(AlphanumericFilter(
+ id=VARIANTS_PROPERTY_MAP[key],
+ value=[value[0]],
+ operator=Operator.GREATER_EQUAL
+ ))
+ filters.append(AlphanumericFilter(
+ id=VARIANTS_PROPERTY_MAP[key],
+ value=[value[1]],
+ operator=Operator.LESS_EQUAL
+ ))
+ return filters
+
+
+def apply_request_parameters(query: Dict[str, List[dict]], qparams: RequestParams):
+ LOG.debug("Request parameters len = {}".format(len(qparams.query.request_parameters)))
+ if len(qparams.query.request_parameters) > 0 and "$and" not in query:
+ query["$and"] = []
+ for k, v in qparams.query.request_parameters.items():
+ if k == "start":
+ if isinstance(v, str):
+ v = v.split(',')
+ filters = generate_position_filter_start(k, v)
+ for filter in filters:
+ query["$and"].append(apply_alphanumeric_filter({}, filter))
+ elif k == "end":
+ if isinstance(v, str):
+ v = v.split(',')
+ filters = generate_position_filter_end(k, v)
+ for filter in filters:
+ query["$and"].append(apply_alphanumeric_filter({}, filter))
+ elif k == "variantMinLength" or k == "variantMaxLength" or k == "mateName":
+ continue
+ else:
+ query["$and"].append(apply_alphanumeric_filter({}, AlphanumericFilter(
+ id=VARIANTS_PROPERTY_MAP[k],
+ value=v
+ )))
+ return query
+
+
+def get_variants(entry_id: Optional[str], qparams: RequestParams):
+ query = apply_request_parameters({}, qparams)
+ query = apply_filters(query, qparams.query.filters)
+ schema = DefaultSchemas.GENOMICVARIATIONS
+ count = get_count(client.beacon.genomicVariations, query)
+ docs = get_documents(
+ client.beacon.genomicVariations,
+ query,
+ qparams.query.pagination.skip,
+ qparams.query.pagination.limit
+ )
+ return schema, count, docs
+
+
+def get_variant_with_id(entry_id: Optional[str], qparams: RequestParams):
+ query = {"$and": [{"variantInternalId": entry_id}]}
+ query = apply_request_parameters(query, qparams)
+ query = apply_filters(query, qparams.query.filters)
+ schema = DefaultSchemas.GENOMICVARIATIONS
+ count = get_count(client.beacon.genomicVariations, query)
+ docs = get_documents(
+ client.beacon.genomicVariations,
+ query,
+ qparams.query.pagination.skip,
+ qparams.query.pagination.limit
+ )
+ return schema, count, docs
+
+
+def get_biosamples_of_variant(entry_id: Optional[str], qparams: RequestParams):
+ query = {"$and": [{"variantInternalId": entry_id}]}
+ query = apply_request_parameters(query, qparams)
+ query = apply_filters(query, qparams.query.filters)
+ count = get_count(client.beacon.genomicVariations, query)
+ biosample_ids = client.beacon.genomicVariations \
+ .find_one(query, {"caseLevelData.biosampleId": 1, "_id": 0})
+
+ biosample_ids=get_cross_query(biosample_ids,'biosampleId','id')
+ query = apply_filters(biosample_ids, qparams.query.filters)
+
+ schema = DefaultSchemas.BIOSAMPLES
+ count = get_count(client.beacon.biosamples, query)
+ docs = get_documents(
+ client.beacon.biosamples,
+ query,
+ qparams.query.pagination.skip,
+ qparams.query.pagination.limit
+ )
+ return schema, count, docs
+
+
+def get_individuals_of_variant(entry_id: Optional[str], qparams: RequestParams):
+ query = {"$and": [{"variantInternalId": entry_id}]}
+ query = apply_request_parameters(query, qparams)
+ query = apply_filters(query, qparams.query.filters)
+ count = get_count(client.beacon.genomicVariations, query)
+ individual_ids = client.beacon.genomicVariations \
+ .find_one(query, {"caseLevelData.biosampleId": 1, "_id": 0})
+
+ individual_ids = get_cross_query(individual_ids,'biosampleId','id')
+ query = apply_filters(individual_ids, qparams.query.filters)
+
+ schema = DefaultSchemas.INDIVIDUALS
+ count = get_count(client.beacon.individuals, query)
+ docs = get_documents(
+ client.beacon.individuals,
+ query,
+ qparams.query.pagination.skip,
+ qparams.query.pagination.limit
+ )
+ return schema, count, docs
+
+
+def get_runs_of_variant(entry_id: Optional[str], qparams: RequestParams):
+ query = {"$and": [{"variantInternalId": entry_id}]}
+ query = apply_request_parameters(query, qparams)
+ query = apply_filters(query, qparams.query.filters)
+ count = get_count(client.beacon.genomicVariations, query)
+ run_ids = client.beacon.genomicVariations \
+ .find_one(query, {"caseLevelData.biosampleId": 1, "_id": 0})
+
+ run_ids=get_cross_query(run_ids,'biosampleId','biosampleId')
+ query = apply_filters(run_ids, qparams.query.filters)
+
+ schema = DefaultSchemas.RUNS
+ count = get_count(client.beacon.runs, query)
+ docs = get_documents(
+ client.beacon.runs,
+ query,
+ qparams.query.pagination.skip,
+ qparams.query.pagination.limit
+ )
+ return schema, count, docs
+
+
+def get_analyses_of_variant(entry_id: Optional[str], qparams: RequestParams):
+ query = {"$and": [{"variantInternalId": entry_id}]}
+ query = apply_request_parameters(query, qparams)
+ query = apply_filters(query, qparams.query.filters)
+ count = get_count(client.beacon.genomicVariations, query)
+ analysis_ids = client.beacon.genomicVariations \
+ .find_one(query, {"caseLevelData.biosampleId": 1, "_id": 0})
+ LOG.debug(analysis_ids)
+
+ analysis_ids=get_cross_query(analysis_ids,'biosampleId','biosampleId')
+ LOG.debug(analysis_ids)
+ query = apply_filters(analysis_ids, qparams.query.filters)
+
+ schema = DefaultSchemas.ANALYSES
+ count = get_count(client.beacon.analyses, query)
+ docs = get_documents(
+ client.beacon.analyses,
+ query,
+ qparams.query.pagination.skip,
+ qparams.query.pagination.limit
+ )
+ return schema, count, docs
diff --git a/beacon/db/individuals.py b/beacon/db/individuals.py
new file mode 100644
index 0000000..932532c
--- /dev/null
+++ b/beacon/db/individuals.py
@@ -0,0 +1,195 @@
+import logging
+from typing import Dict, List, Optional
+from beacon.db.filters import apply_alphanumeric_filter, apply_filters
+from beacon.db.utils import query_id, query_ids, get_count, get_documents
+from beacon.db import client
+from beacon.request.model import AlphanumericFilter, Operator, RequestParams
+from beacon.db.schemas import DefaultSchemas
+from beacon.db.utils import query_id, get_count, get_documents
+from beacon.request.model import RequestParams
+import json
+from bson import json_util
+
+LOG = logging.getLogger(__name__)
+
+INDIVIDUALS_PROPERTY_MAP = {
+ "diseaseId": "diseases.diseaseCode.id",
+ "diseaseLabel": "diseases.diseaseCode.label",
+ "ethnicityId": "ethnicity.id",
+ "ethnicityLabel": "ethnicity.label",
+ "geographicOriginId": "geographicOrigin.id",
+ "geographicOriginLabel": "geographicOrigin.label",
+ "assayCodeId": "measures.assayCode.id",
+ "assayCodeLabel": "measures.assayCode.label",
+ "date": "measures.date",
+ "measurementValueId": "measures.measurementValue.quantity.unit.id",
+ "measurementValueLabel": "measures.measurementValue.quantity.unit.label",
+ "measurementValue": "measures.measurementValue.quantity.value",
+ "sexId": "sex.id",
+ "sexLabel": "sex.label"
+}
+
+def generate_position_filter_start(key: str, value: List[int]) -> List[AlphanumericFilter]:
+ LOG.debug("len value = {}".format(len(value)))
+ filters = []
+ if len(value) == 1:
+ filters.append(AlphanumericFilter(
+ id=INDIVIDUALS_PROPERTY_MAP[key],
+ value=[value[0]],
+ operator=Operator.GREATER_EQUAL
+ ))
+ elif len(value) == 2:
+ filters.append(AlphanumericFilter(
+ id=INDIVIDUALS_PROPERTY_MAP[key],
+ value=[value[0]],
+ operator=Operator.GREATER_EQUAL
+ ))
+ filters.append(AlphanumericFilter(
+ id=INDIVIDUALS_PROPERTY_MAP[key],
+ value=[value[1]],
+ operator=Operator.LESS_EQUAL
+ ))
+ return filters
+
+
+def generate_position_filter_end(key: str, value: List[int]) -> List[AlphanumericFilter]:
+ LOG.debug("len value = {}".format(len(value)))
+ filters = []
+ if len(value) == 1:
+ filters.append(AlphanumericFilter(
+ id=INDIVIDUALS_PROPERTY_MAP[key],
+ value=[value[0]],
+ operator=Operator.LESS_EQUAL
+ ))
+ elif len(value) == 2:
+ filters.append(AlphanumericFilter(
+ id=INDIVIDUALS_PROPERTY_MAP[key],
+ value=[value[0]],
+ operator=Operator.GREATER_EQUAL
+ ))
+ filters.append(AlphanumericFilter(
+ id=INDIVIDUALS_PROPERTY_MAP[key],
+ value=[value[1]],
+ operator=Operator.LESS_EQUAL
+ ))
+ return filters
+
+
+def apply_request_parameters(query: Dict[str, List[dict]], qparams: RequestParams):
+ LOG.debug("Request parameters len = {}".format(len(qparams.query.request_parameters)))
+ if len(qparams.query.request_parameters) > 0 and "$and" not in query:
+ query["$and"] = []
+ for k, v in qparams.query.request_parameters.items():
+ query["$and"].append(apply_alphanumeric_filter({}, AlphanumericFilter(
+ id=INDIVIDUALS_PROPERTY_MAP[k],
+ value=v
+ )))
+ return query
+
+def get_individuals(entry_id: Optional[str], qparams: RequestParams):
+ query = apply_request_parameters({}, qparams)
+ query = apply_filters(query, qparams.query.filters)
+ print(query)
+ schema = DefaultSchemas.INDIVIDUALS
+ count = get_count(client.beacon.individuals, query)
+ docs = get_documents(
+ client.beacon.individuals,
+ query,
+ qparams.query.pagination.skip,
+ qparams.query.pagination.limit
+ )
+ return schema, count, docs
+
+
+def get_individual_with_id(entry_id: Optional[str], qparams: RequestParams):
+ query = apply_request_parameters({}, qparams)
+ query = apply_filters(query, qparams.query.filters)
+ query = query_id(query, entry_id)
+ schema = DefaultSchemas.INDIVIDUALS
+ count = get_count(client.beacon.individuals, query)
+ docs = get_documents(
+ client.beacon.individuals,
+ query,
+ qparams.query.pagination.skip,
+ qparams.query.pagination.limit
+ )
+ return schema, count, docs
+
+
+def get_variants_of_individual(entry_id: Optional[str], qparams: RequestParams):
+ query = {"individualId": entry_id}
+ query = apply_request_parameters(query, qparams)
+ query = apply_filters(query, qparams.query.filters)
+ schema = DefaultSchemas.GENOMICVARIATIONS
+ count = get_count(client.beacon.genomicVariations, query)
+ docs = get_documents(
+ client.beacon.genomicVariations,
+ query,
+ qparams.query.pagination.skip,
+ qparams.query.pagination.limit
+ )
+ return schema, count, docs
+
+
+def get_biosamples_of_individual(entry_id: Optional[str], qparams: RequestParams):
+ query = {"individualId": entry_id}
+ query = apply_request_parameters(query, qparams)
+ query = apply_filters(query, qparams.query.filters)
+ schema = DefaultSchemas.BIOSAMPLES
+ count = get_count(client.beacon.biosamples, query)
+ docs = get_documents(
+ client.beacon.biosamples,
+ query,
+ qparams.query.pagination.skip,
+ qparams.query.pagination.limit
+ )
+ return schema, count, docs
+
+
+def get_filtering_terms_of_individual(entry_id: Optional[str], qparams: RequestParams):
+ # TODO
+ pass
+
+
+def get_runs_of_individual(entry_id: Optional[str], qparams: RequestParams):
+ query = {"individualId": entry_id}
+ query = apply_request_parameters(query, qparams)
+ query = apply_filters(query, qparams.query.filters)
+ run_ids = client.beacon.genomicVariations.find_one(query, {"caseLevelData.runId": 1, "_id": 0})
+ run_ids = [r for r in run_ids] if run_ids else []
+
+ query = apply_request_parameters(query, qparams)
+ query = query_ids(query, run_ids)
+ query = apply_filters(query, qparams.query.filters)
+
+ schema = DefaultSchemas.RUNS
+ count = get_count(client.beacon.runs, query)
+ docs = get_documents(
+ client.beacon.runs,
+ query,
+ qparams.query.pagination.skip,
+ qparams.query.pagination.limit
+ )
+ return schema, count, docs
+
+
+def get_analyses_of_individual(entry_id: Optional[str], qparams: RequestParams):
+ query = {"caseLevelData.individualId": entry_id}
+ query = apply_request_parameters(query, qparams)
+ query = apply_filters(query, qparams.query.filters)
+ analysis_ids = client.beacon.genomicVariations.find_one(query, {"caseLevelData.analysisId": 1, "_id": 0})
+ analysis_ids = [r for r in analysis_ids] if analysis_ids else []
+
+ query = apply_request_parameters({}, qparams)
+ query = query_ids(query, analysis_ids)
+ query = apply_filters(query, qparams.query.filters)
+
+ schema = DefaultSchemas.ANALYSES
+ count = get_count(client.beacon.analyses, query)
+ docs = get_documents(
+ client.beacon.analyses,
+ query,
+ qparams.query.pagination.skip,
+ qparams.query.pagination.limit
+ )
+ return schema, count, docs
diff --git a/beacon/db/runs.py b/beacon/db/runs.py
new file mode 100644
index 0000000..caa76e0
--- /dev/null
+++ b/beacon/db/runs.py
@@ -0,0 +1,140 @@
+import logging
+from typing import Dict, List, Optional
+from beacon.db.filters import apply_alphanumeric_filter, apply_filters
+from beacon.db.utils import query_id, query_ids, get_count, get_documents
+from beacon.db import client
+from beacon.request.model import AlphanumericFilter, Operator, RequestParams
+from beacon.db.schemas import DefaultSchemas
+from beacon.db.utils import query_id, get_count, get_documents
+from beacon.request.model import RequestParams
+
+LOG = logging.getLogger(__name__)
+
+RUNS_PROPERTY_MAP = {
+ "biosampleId": "biosampleId",
+ "individualId": "individualId",
+ "libraryLayout": "libraryLayout",
+ "librarySelection": "librarySelection",
+ "librarySourceId": "librarySource.id",
+ "librarySourceLabel": "librarySource.label",
+ "libraryStrategy": "libraryStrategy",
+ "platform": "platform",
+ "platformModelId": "platformModel.id",
+ "platformModelLabel": "platformModel.label",
+ "runDate": "runDate"
+}
+
+def generate_position_filter_start(key: str, value: List[int]) -> List[AlphanumericFilter]:
+ LOG.debug("len value = {}".format(len(value)))
+ filters = []
+ if len(value) == 1:
+ filters.append(AlphanumericFilter(
+ id=RUNS_PROPERTY_MAP[key],
+ value=[value[0]],
+ operator=Operator.GREATER_EQUAL
+ ))
+ elif len(value) == 2:
+ filters.append(AlphanumericFilter(
+ id=RUNS_PROPERTY_MAP[key],
+ value=[value[0]],
+ operator=Operator.GREATER_EQUAL
+ ))
+ filters.append(AlphanumericFilter(
+ id=RUNS_PROPERTY_MAP[key],
+ value=[value[1]],
+ operator=Operator.LESS_EQUAL
+ ))
+ return filters
+
+
+def generate_position_filter_end(key: str, value: List[int]) -> List[AlphanumericFilter]:
+ LOG.debug("len value = {}".format(len(value)))
+ filters = []
+ if len(value) == 1:
+ filters.append(AlphanumericFilter(
+ id=RUNS_PROPERTY_MAP[key],
+ value=[value[0]],
+ operator=Operator.LESS_EQUAL
+ ))
+ elif len(value) == 2:
+ filters.append(AlphanumericFilter(
+ id=RUNS_PROPERTY_MAP[key],
+ value=[value[0]],
+ operator=Operator.GREATER_EQUAL
+ ))
+ filters.append(AlphanumericFilter(
+ id=RUNS_PROPERTY_MAP[key],
+ value=[value[1]],
+ operator=Operator.LESS_EQUAL
+ ))
+ return filters
+
+
+def apply_request_parameters(query: Dict[str, List[dict]], qparams: RequestParams):
+ LOG.debug("Request parameters len = {}".format(len(qparams.query.request_parameters)))
+ if len(qparams.query.request_parameters) > 0 and "$and" not in query:
+ query["$and"] = []
+ for k, v in qparams.query.request_parameters.items():
+ query["$and"].append(apply_alphanumeric_filter({}, AlphanumericFilter(
+ id=RUNS_PROPERTY_MAP[k],
+ value=v
+ )))
+ return query
+
+def get_runs(entry_id: Optional[str], qparams: RequestParams):
+ query = apply_request_parameters({}, qparams)
+ query = apply_filters(query, qparams.query.filters)
+ schema = DefaultSchemas.RUNS
+ count = get_count(client.beacon.runs, query)
+ docs = get_documents(
+ client.beacon.runs,
+ query,
+ qparams.query.pagination.skip,
+ qparams.query.pagination.limit
+ )
+ return schema, count, docs
+
+
+def get_run_with_id(entry_id: Optional[str], qparams: RequestParams):
+ query = apply_request_parameters({}, qparams)
+ query = apply_filters(query, qparams.query.filters)
+ query = query_id(query, entry_id)
+ schema = DefaultSchemas.RUNS
+ count = get_count(client.beacon.runs, query)
+ docs = get_documents(
+ client.beacon.runs,
+ query,
+ qparams.query.pagination.skip,
+ qparams.query.pagination.limit
+ )
+ return schema, count, docs
+
+
+def get_variants_of_run(entry_id: Optional[str], qparams: RequestParams):
+ query = {"caseLevelData.runId": entry_id}
+ query = apply_request_parameters(query, qparams)
+ query = apply_filters(query, qparams.query.filters)
+ schema = DefaultSchemas.GENOMICVARIATIONS
+ count = get_count(client.beacon.genomicVariations, query)
+ docs = get_documents(
+ client.beacon.runs,
+ query,
+ qparams.query.pagination.skip,
+ qparams.query.pagination.limit
+ )
+ return schema, count, docs
+
+
+def get_analyses_of_run(entry_id: Optional[str], qparams: RequestParams):
+ query = {"runId": entry_id}
+ query = apply_request_parameters(query, qparams)
+ query = apply_filters(query, qparams.query.filters)
+ schema = DefaultSchemas.ANALYSES
+ count = get_count(client.beacon.analyses, query)
+ docs = get_documents(
+ client.beacon.analyses,
+ query,
+ qparams.query.pagination.skip,
+ qparams.query.pagination.limit
+ )
+ return schema, count, docs
diff --git a/beacon/db/schemas.py b/beacon/db/schemas.py
new file mode 100644
index 0000000..b0bdc86
--- /dev/null
+++ b/beacon/db/schemas.py
@@ -0,0 +1,11 @@
+from enum import Enum
+
+
+class DefaultSchemas(Enum):
+ ANALYSES = {"entityType": "analysis", "schema": "beacon-analysis-v2.0.0"}
+ BIOSAMPLES = {"entityType": "biosample", "schema": "beacon-dataset-v2.0.0"}
+ COHORTS = {"entityType": "cohort", "schema": "beacon-cohort-v2.0.0"}
+ DATASETS = {"entityType": "dataset", "schema": "beacon-dataset-v2.0.0"}
+ GENOMICVARIATIONS = {"entityType": "genomicVariation", "schema": "beacon-g_variant-v2.0.0"}
+ INDIVIDUALS = {"entityType": "individual", "schema": "beacon-individual-v2.0.0"}
+ RUNS = {"entityType": "run", "schema": "beacon-run-v2.0.0"}
diff --git a/beacon/db/utils.py b/beacon/db/utils.py
new file mode 100644
index 0000000..5b38744
--- /dev/null
+++ b/beacon/db/utils.py
@@ -0,0 +1,60 @@
+from typing import Dict, Optional
+
+from pymongo.cursor import Cursor
+from pymongo.collection import Collection
+from beacon.db import client
+from beacon.request.model import RequestParams
+import logging
+
+LOG = logging.getLogger(__name__)
+
+
+def query_id(query: dict, document_id) -> dict:
+ query["id"] = document_id
+ return query
+
+
+def query_ids(query: dict, ids) -> dict:
+ query["id"] = ids
+ return query
+
+
+def query_property(query: dict, property_id: str, value: str, property_map: Dict[str, str]) -> dict:
+ query[property_map[property_id]] = value
+ return query
+
+
+def get_count(collection: Collection, query: dict) -> int:
+ if not query:
+ LOG.debug("Returning estimated count")
+ return collection.estimated_document_count()
+ else:
+ LOG.debug("FINAL QUERY (COUNT): {}".format(query))
+ LOG.debug("Returning count")
+ return collection.count_documents(query)
+
+
+def get_documents(collection: Collection, query: dict, skip: int, limit: int) -> Cursor:
+ LOG.debug("FINAL QUERY: {}".format(query))
+ return collection.find(query).skip(skip).limit(limit).max_time_ms(10 * 1000)
+
+def get_cross_query(ids: dict, cross_type: str, collection_id: str):
+ id_list=[]
+ dict_in={}
+ id_dict={}
+ if cross_type != 'single':
+ for k, v in ids.items():
+ for item in v:
+ id_list.append(item[cross_type])
+ dict_in["$in"]=id_list
+
+ else:
+ list_item=ids[collection_id]
+ LOG.debug(str(list_item))
+ id_list.append(str(list_item))
+ dict_in["$in"]=id_list
+ LOG.debug(id_list)
+ id_dict[collection_id]=dict_in
+ query = id_dict
+ LOG.debug(query)
+ return query
diff --git a/beacon/logger.yml b/beacon/logger.yml
new file mode 100644
index 0000000..fc735f0
--- /dev/null
+++ b/beacon/logger.yml
@@ -0,0 +1,32 @@
+---
+version: 1
+#disable_existing_loggers: True
+root:
+ level: NOTSET
+ handlers: [ noHandler ]
+
+loggers:
+ __main__:
+ level: DEBUG
+ handlers: [ console ]
+ beacon:
+ level: DEBUG
+ handlers: [ console ]
+ propagate: True
+ aiohttp:
+ level: INFO
+ handlers: [ console ]
+
+handlers:
+ noHandler:
+ class: logging.NullHandler
+ level: NOTSET
+ console:
+ class: logging.StreamHandler
+ formatter: simple
+ stream: ext://sys.stderr
+
+formatters:
+ simple:
+ format: "[{name:^10}][{levelname:^6}] (L{lineno}) {message}"
+ style: "{"
diff --git a/beacon/request/__init__.py b/beacon/request/__init__.py
new file mode 100644
index 0000000..c1c66c5
--- /dev/null
+++ b/beacon/request/__init__.py
@@ -0,0 +1,4 @@
+from aiohttp.web_request import Request
+from beacon.request.model import IncludeResultsetResponses, RequestParams
+
+import logging
diff --git a/beacon/request/handlers.py b/beacon/request/handlers.py
new file mode 100644
index 0000000..47bc1d3
--- /dev/null
+++ b/beacon/request/handlers.py
@@ -0,0 +1,91 @@
+import json
+import logging
+from aiohttp import web
+from aiohttp.web_request import Request
+from bson import json_util
+from beacon import conf
+
+from beacon.request import ontologies
+from beacon.request.model import Granularity, RequestParams
+from beacon.response.build_response import (
+ build_beacon_resultset_response,
+ build_beacon_collection_response,
+ build_beacon_boolean_response,
+ build_beacon_count_response,
+ build_filtering_terms_response,
+)
+from beacon.utils.stream import json_stream
+
+LOG = logging.getLogger(__name__)
+
+
+def collection_handler(db_fn, request=None):
+ async def wrapper(request: Request):
+ # Get params
+ json_body = await request.json() if request.method == "POST" and request.has_body and request.can_read_body else {}
+ qparams = RequestParams(**json_body).from_request(request)
+ entry_id = request.match_info["id"] if "id" in request.match_info else None
+
+ # Get response
+ entity_schema, count, records = db_fn(entry_id, qparams)
+ response_converted = (
+ [r for r in records] if records else []
+ )
+ response = build_beacon_collection_response(
+ response_converted, count, qparams, lambda x, y: x, entity_schema
+ )
+ return await json_stream(request, response)
+
+ return wrapper
+
+
+def generic_handler(db_fn, request=None):
+ async def wrapper(request: Request):
+ # Get params
+ json_body = await request.json() if request.method == "POST" and request.has_body and request.can_read_body else {}
+ qparams = RequestParams(**json_body).from_request(request)
+ entry_id = request.match_info.get('id', None)
+
+ # Get response
+ entity_schema, count, records = db_fn(entry_id, qparams)
+ response_converted = records
+
+ response = None
+
+ if qparams.query.requested_granularity == Granularity.BOOLEAN:
+ response = build_beacon_boolean_response(response_converted, count, qparams, lambda x, y: x, entity_schema)
+
+ elif qparams.query.requested_granularity == Granularity.COUNT:
+ if conf.max_beacon_granularity == Granularity.BOOLEAN:
+ response = build_beacon_boolean_response(response_converted, count, qparams, lambda x, y: x, entity_schema)
+ else:
+ response = build_beacon_count_response(response_converted, count, qparams, lambda x, y: x, entity_schema)
+
+ # qparams.query.requested_granularity == Granularity.RECORD:
+ else:
+
+ if conf.max_beacon_granularity == Granularity.BOOLEAN:
+ response = build_beacon_boolean_response(response_converted, count, qparams, lambda x, y: x, entity_schema)
+ elif conf.max_beacon_granularity == Granularity.COUNT:
+ response = build_beacon_count_response(response_converted, count, qparams, lambda x, y: x, entity_schema)
+ else:
+ response = build_beacon_resultset_response(response_converted, count, qparams, lambda x, y: x, entity_schema)
+
+ return await json_stream(request, response)
+
+ return wrapper
+
+def filtering_terms_handler(db_fn, request=None):
+ async def wrapper(request: Request):
+ # Get params
+ json_body = await request.json() if request.method == "POST" and request.has_body and request.can_read_body else {}
+ qparams = RequestParams(**json_body).from_request(request)
+ entry_id = request.match_info.get('id', None)
+
+ # Get response
+ _, _, records = db_fn(entry_id, qparams)
+ resources = ontologies.get_resources()
+ response = build_filtering_terms_response(records, resources, qparams)
+ return await json_stream(request, response)
+
+ return wrapper
diff --git a/beacon/request/model.py b/beacon/request/model.py
new file mode 100644
index 0000000..f34d9cc
--- /dev/null
+++ b/beacon/request/model.py
@@ -0,0 +1,113 @@
+import logging
+from typing_extensions import Self
+from pydantic import BaseModel
+from strenum import StrEnum
+from typing import List, Optional, Union
+from beacon import conf
+from humps.main import camelize
+from aiohttp.web_request import Request
+
+LOG = logging.getLogger(__name__)
+
+
+class CamelModel(BaseModel):
+ class Config:
+ alias_generator = camelize
+ allow_population_by_field_name = True
+
+
+class IncludeResultsetResponses(StrEnum):
+ ALL = "ALL",
+ HIT = "HIT",
+ MISS = "MISS",
+ NONE = "NONE"
+
+
+class Similarity(StrEnum):
+ EXACT = "exact",
+ HIGH = "high",
+ MEDIUM = "medium",
+ LOW = "low"
+
+
+class Operator(StrEnum):
+ EQUAL = "=",
+ LESS = "<",
+ GREATER = ">",
+ NOT = "!",
+ LESS_EQUAL = "<=",
+ GREATER_EQUAL = ">="
+
+class Granularity(StrEnum):
+ BOOLEAN = "boolean",
+ COUNT = "count",
+ RECORD = "record"
+
+class OntologyFilter(CamelModel):
+ id: str
+ scope: Optional[str] = None
+ include_descendant_terms: bool = False
+ similarity: Similarity = Similarity.EXACT
+
+
+class AlphanumericFilter(CamelModel):
+ id: str
+ value: Union[str, List[int]]
+ scope: Optional[str] = None
+ operator: Operator = Operator.EQUAL
+
+
+class CustomFilter(CamelModel):
+ id: str
+ scope: Optional[str] = None
+
+
+class Pagination(CamelModel):
+ skip: int = 0
+ limit: int = 10
+
+
+class RequestMeta(CamelModel):
+ requested_schemas: List[str] = []
+ api_version: str = conf.api_version
+
+
+class RequestQuery(CamelModel):
+ filters: List[dict] = []
+ include_resultset_responses: IncludeResultsetResponses = IncludeResultsetResponses.HIT
+ pagination: Pagination = Pagination()
+ request_parameters: dict = {}
+ test_mode: bool = False
+ requested_granularity: Granularity = Granularity(conf.default_beacon_granularity)
+
+
+class RequestParams(CamelModel):
+ meta: RequestMeta = RequestMeta()
+ query: RequestQuery = RequestQuery()
+
+ def from_request(self, request: Request) -> Self:
+ if request.method != "POST" or not request.has_body or not request.can_read_body:
+ for k, v in request.query.items():
+ if k == "requestedSchema":
+ self.meta.requested_schemas = [v]
+ elif k == "skip":
+ self.query.pagination.skip = int(v)
+ elif k == "limit":
+ self.query.pagination.limit = int(v)
+ elif k == "includeResultsetResponses":
+ self.query.include_resultset_responses = IncludeResultsetResponses(v)
+ else:
+ self.query.request_parameters[k] = v
+ return self
+
+ def summary(self):
+ return {
+ "apiVersion": self.meta.api_version,
+ "requestedSchemas": self.meta.requested_schemas,
+ "filters": self.query.filters,
+ "requestParameters": self.query.request_parameters,
+ "includeResultsetResponses": self.query.include_resultset_responses,
+ "pagination": self.query.pagination.dict(),
+ "requestedGranularity": self.query.requested_granularity,
+ "testMode": self.query.test_mode
+ }
diff --git a/beacon/request/ontologies.py b/beacon/request/ontologies.py
new file mode 100644
index 0000000..37be84e
--- /dev/null
+++ b/beacon/request/ontologies.py
@@ -0,0 +1,189 @@
+import re
+import fastobo
+import networkx
+import requests
+from beacon.request.model import Similarity
+from pronto.ontology import Ontology
+from os import scandir, listdir
+from pathlib import Path
+
+from owlready2 import OwlReadyOntologyParsingError
+from tqdm import tqdm
+from typing import Dict, Optional, Set, List
+from beacon.db import client
+from beacon import conf
+import owlready2
+import logging
+
+LOG = logging.getLogger(__name__)
+
+ONTOLOGIES = {}
+ONTOLOGY_REGEX = re.compile(r"([_A-Za-z]+):(\w+)")
+
+def find_all_ontologies_used() -> Set[str]:
+ ontologies = set()
+ for c_name in ["analyses", "biosamples", "cohorts", "genomicVariations", "datasets", "individuals", "runs"]:
+ ontologies_aux = find_ontologies_used(c_name)
+ ontologies = ontologies.union(ontologies_aux)
+ return ontologies
+
+
+def find_all_ontology_terms_used() -> Set[str]:
+ ontologies = set()
+ for c_name in ["analyses", "biosamples", "cohorts", "genomicVariations", "datasets", "individuals", "runs"]:
+ ontologies_aux = find_ontology_terms_used(c_name)
+ ontologies = ontologies.union(ontologies_aux)
+ return ontologies
+
+
+def find_ontologies_used(collection_name: str) -> Set[str]:
+ ontologies = set()
+ count = client.beacon.get_collection(collection_name).estimated_document_count()
+ xs = client.beacon.get_collection(collection_name).find()
+ for r in tqdm(xs, total=count):
+ matches = ONTOLOGY_REGEX.findall(str(r))
+ for match0, _ in matches:
+ ontologies.add(match0)
+ return ontologies
+
+
+def find_ontology_terms_used(collection_name: str) -> Set[str]:
+ terms = set()
+ count = client.beacon.get_collection(collection_name).estimated_document_count()
+ xs = client.beacon.get_collection(collection_name).find()
+ for r in tqdm(xs, total=count):
+ matches = ONTOLOGY_REGEX.findall(str(r))
+ for match in matches:
+ terms.add(match)
+ return terms
+
+
+def load():
+ ontology_directory = conf.ontologies_folder
+ owlready2.onto_path.append(ontology_directory)
+ count = len(listdir(ontology_directory))
+ for i, filename in enumerate(tqdm(scandir(ontology_directory), total=count)):
+ if filename.is_file() and filename.name.lower().endswith(".owl"):
+ try:
+ LOG.debug("Loading ontology {} of {}".format(i, count))
+ ONTOLOGIES[filename.name[:-4]] = owlready2.get_ontology(filename.path).load()
+ except OwlReadyOntologyParsingError:
+ # TODO: Add error
+ continue
+
+def try_convert_owl_to_obo():
+ ontology_directory = conf.ontologies_folder
+ count = len(listdir(ontology_directory))
+ for i, filename in enumerate(tqdm(scandir(ontology_directory), total=count)):
+ new_filename = Path(filename.path).with_suffix(".obo")
+ if filename.is_file() and filename.name.lower().endswith(".owl") and not new_filename.exists():
+ LOG.debug("Transforming {} to {}".format(filename.path, new_filename))
+ owl_onto: Ontology = Ontology(filename.path)
+ with open(new_filename, "wb") as f:
+ owl_onto.dump(f, format="obo")
+
+
+def load_obo():
+ try_convert_owl_to_obo()
+ ontology_directory = conf.ontologies_folder
+ count = len(listdir(ontology_directory))
+ for i, filename in enumerate(tqdm(scandir(ontology_directory), total=count)):
+ if filename.is_file() and filename.name.lower().endswith(".obo"):
+ try:
+ LOG.debug("Loading ontology {} of {} ({})".format(i, count, filename.name[:-4]))
+ ONTOLOGIES[filename.name[:-4]] = fastobo.load(filename.path)
+ LOG.debug(ONTOLOGIES[filename.name[:-4]] is None)
+ except:
+ LOG.error("Loading ontology {} failed".format(filename))
+
+
+def get_descendants(term: str) -> List[str]:
+
+ ontology_id, term_id = term.split(':')
+
+ # Create ontology graph
+ # TODO: Cache should be the graph
+ knowledge_graph = networkx.DiGraph()
+ for frame in ONTOLOGIES[ontology_id]:
+ if isinstance(frame, fastobo.term.TermFrame):
+ knowledge_graph.add_node(str(frame.id))
+ for clause in frame:
+ if isinstance(clause, fastobo.term.IsAClause):
+ knowledge_graph.add_edge(str(frame.id), str(clause.term))
+ print(networkx.is_directed_acyclic_graph(knowledge_graph))
+
+ return list(networkx.descendants(knowledge_graph, term))
+
+
+def get_ontology_neighbours(term: str, depth: int) -> List[str]:
+ ontology_id, term_id = term.split(':')
+
+ # Create ontology graph
+ # TODO: Cache should be the graph
+ knowledge_graph = networkx.DiGraph()
+ for frame in ONTOLOGIES[ontology_id]:
+ if isinstance(frame, fastobo.term.TermFrame):
+ knowledge_graph.add_node(str(frame.id))
+ for clause in frame:
+ if isinstance(clause, fastobo.term.IsAClause):
+ knowledge_graph.add_edge(str(frame.id), str(clause.term))
+ print(networkx.is_directed_acyclic_graph(knowledge_graph))
+
+ # Get predecessors
+ first_predecessors = set(knowledge_graph.predecessors(term))
+
+ # Get siblings
+ siblings = set()
+ for parent in first_predecessors:
+ siblings = siblings.union(set(knowledge_graph.successors(parent)))
+
+ # Get successors and predecessors with depth
+ predecessors = set(knowledge_graph.predecessors(term))
+ successors = set(knowledge_graph.successors(term))
+ for _ in range(1, depth):
+ for predecessor in predecessors:
+ predecessors = predecessors.union(set(knowledge_graph.predecessors(predecessor)))
+ for successor in successors:
+ successors = successors.union(set(knowledge_graph.successors(successor)))
+
+ # Combine results
+ terms = set()
+ terms.add(term)
+ terms = terms.union(predecessors)
+ terms = terms.union(siblings)
+ terms = terms.union(successors)
+
+ return list(terms)
+
+def get_similar_ontology_terms(term: str, similarity: Similarity) -> List[str]:
+ if similarity == Similarity.EXACT:
+ return [term]
+ elif similarity == Similarity.HIGH:
+ return get_ontology_neighbours(term, depth=1)
+ elif similarity == Similarity.MEDIUM:
+ return get_ontology_neighbours(term, depth=2)
+ else:
+ # similarity == Similarity.LOW
+ return get_ontology_neighbours(term, depth=3)
+
+
+def get_ontology_config(ontology: owlready2.Ontology) -> Optional[Dict]:
+ ontology_url = "https://www.ebi.ac.uk/ols/api/ontologies/{}".format(ontology.name)
+ try:
+ return requests.get(ontology_url).json()["config"]
+ except:
+ return None
+
+def get_resources() -> List[Dict]:
+ resources = []
+ for onto in ONTOLOGIES.values():
+ ontology_config = get_ontology_config(onto)
+ resources.append({
+ "id": onto.name,
+ "name": ontology_config["title"] if ontology_config else onto.name,
+ "url": ontology_config["id"] if ontology_config else onto.base_iri,
+ "version": ontology_config["version"] if ontology_config else None,
+ "nameSpacePrefix": ontology_config["namespace"].upper() if ontology_config else None,
+ "iriPrefix": ontology_config["baseUris"][0] if ontology_config else None,
+ })
+ return resources
\ No newline at end of file
diff --git a/beacon/request/routes.py b/beacon/request/routes.py
new file mode 100644
index 0000000..1c1963f
--- /dev/null
+++ b/beacon/request/routes.py
@@ -0,0 +1,117 @@
+from aiohttp import web
+
+from beacon.db import analyses, biosamples, cohorts, datasets, g_variants, individuals, runs, filtering_terms
+from beacon.request.handlers import collection_handler, generic_handler, filtering_terms_handler
+from beacon.response import framework, info, service_info
+
+routes = [
+
+ ########################################
+ # CONFIG
+ ########################################
+
+ web.get('/api/', info.handler),
+ web.get('/api/info/', info.handler, name="info"), # Name added to redirect / -> /info
+ web.get('/api/service-info/', service_info.handler),
+ web.get('/api/filtering_terms/', filtering_terms_handler(db_fn=filtering_terms.get_filtering_terms)),
+
+ web.get('/api/configuration/', framework.configuration),
+ web.get('/api/entry_types/', framework.entry_types),
+ web.get('/api/map/', framework.beacon_map),
+
+ ########################################
+ # GET
+ ########################################
+
+ web.get('/api/analyses/', generic_handler(db_fn=analyses.get_analyses)),
+ web.get('/api/analyses/{id}/', generic_handler(db_fn=analyses.get_analysis_with_id)),
+ web.get('/api/analyses/{id}/g_variants/', generic_handler(db_fn=analyses.get_variants_of_analysis)),
+
+ web.get('/api/biosamples/', generic_handler(db_fn=biosamples.get_biosamples)),
+ web.get('/api/biosamples/{id}/', generic_handler(db_fn=biosamples.get_biosample_with_id)),
+ web.get('/api/biosamples/{id}/g_variants/', generic_handler(db_fn=biosamples.get_variants_of_biosample)),
+ web.get('/api/biosamples/{id}/analyses/', generic_handler(db_fn=biosamples.get_analyses_of_biosample)),
+ web.get('/api/biosamples/{id}/runs/', generic_handler(db_fn=biosamples.get_runs_of_biosample)),
+
+ web.get('/api/cohorts/', collection_handler(db_fn=cohorts.get_cohorts)),
+ web.get('/api/cohorts/{id}/', collection_handler(db_fn=cohorts.get_cohort_with_id)),
+ web.get('/api/cohorts/{id}/individuals/', generic_handler(db_fn=cohorts.get_individuals_of_cohort)),
+ web.get('/api/cohorts/{id}/filtering_terms/', generic_handler(db_fn=cohorts.get_filtering_terms_of_cohort)),
+
+ web.get('/api/datasets/', collection_handler(db_fn=datasets.get_datasets)),
+ web.get('/api/datasets/{id}/', collection_handler(db_fn=datasets.get_dataset_with_id)),
+ web.get('/api/datasets/{id}/g_variants/', generic_handler(db_fn=datasets.get_variants_of_dataset)),
+ web.get('/api/datasets/{id}/biosamples/', generic_handler(db_fn=datasets.get_biosamples_of_dataset)),
+ web.get('/api/datasets/{id}/individuals/', generic_handler(db_fn=datasets.get_individuals_of_dataset)),
+ web.get('/api/datasets/{id}/filtering_terms/', generic_handler(db_fn=datasets.get_filtering_terms_of_dataset)),
+ web.get('/api/datasets/{id}/runs/', generic_handler(db_fn=datasets.get_runs_of_dataset)),
+ web.get('/api/datasets/{id}/analyses/', generic_handler(db_fn=datasets.get_analyses_of_dataset)),
+
+ web.get('/api/g_variants/', generic_handler(db_fn=g_variants.get_variants)),
+ web.get('/api/g_variants/{id}/', generic_handler(db_fn=g_variants.get_variant_with_id)),
+ web.get('/api/g_variants/{id}/biosamples/', generic_handler(db_fn=g_variants.get_biosamples_of_variant)),
+ web.get('/api/g_variants/{id}/individuals/', generic_handler(db_fn=g_variants.get_individuals_of_variant)),
+ web.get('/api/g_variants/{id}/runs/', generic_handler(db_fn=g_variants.get_runs_of_variant)),
+ web.get('/api/g_variants/{id}/analyses/', generic_handler(db_fn=g_variants.get_analyses_of_variant)),
+
+ web.get('/api/individuals/', generic_handler(db_fn=individuals.get_individuals)),
+ web.get('/api/individuals/{id}/', generic_handler(db_fn=individuals.get_individual_with_id)),
+ web.get('/api/individuals/{id}/g_variants/', generic_handler(db_fn=individuals.get_variants_of_individual)),
+ web.get('/api/individuals/{id}/biosamples/', generic_handler(db_fn=individuals.get_biosamples_of_individual)),
+ web.get('/api/individuals/{id}/filtering_terms/', generic_handler(db_fn=individuals.get_filtering_terms_of_individual)),
+ web.get('/api/individuals/{id}/runs/', generic_handler(db_fn=individuals.get_runs_of_individual)),
+ web.get('/api/individuals/{id}/analyses/', generic_handler(db_fn=individuals.get_analyses_of_individual)),
+
+ web.get('/api/runs/', generic_handler(db_fn=runs.get_runs)),
+ web.get('/api/runs/{id}/', generic_handler(db_fn=runs.get_run_with_id)),
+ web.get('/api/runs/{id}/g_variants/', generic_handler(db_fn=runs.get_variants_of_run)),
+ web.get('/api/runs/{id}/analyses/', generic_handler(db_fn=runs.get_analyses_of_run)),
+
+ ########################################
+ # POST
+ ########################################
+
+ web.post('/api/analyses/', generic_handler(db_fn=analyses.get_analyses)),
+ web.post('/api/analyses/{id}/', generic_handler(db_fn=analyses.get_analysis_with_id)),
+ web.post('/api/analyses/{id}/g_variants/', generic_handler(db_fn=analyses.get_variants_of_analysis)),
+
+ web.post('/api/biosamples/', generic_handler(db_fn=biosamples.get_biosamples)),
+ web.post('/api/biosamples/{id}/', generic_handler(db_fn=biosamples.get_biosample_with_id)),
+ web.post('/api/biosamples/{id}/g_variants/', generic_handler(db_fn=biosamples.get_variants_of_biosample)),
+ web.post('/api/biosamples/{id}/analyses/', generic_handler(db_fn=biosamples.get_analyses_of_biosample)),
+ web.post('/api/biosamples/{id}/runs/', generic_handler(db_fn=biosamples.get_runs_of_biosample)),
+
+ web.post('/api/cohorts/', collection_handler(db_fn=cohorts.get_cohorts)),
+ web.post('/api/cohorts/{id}/', collection_handler(db_fn=cohorts.get_cohort_with_id)),
+ web.post('/api/cohorts/{id}/individuals/', generic_handler(db_fn=cohorts.get_individuals_of_cohort)),
+ web.post('/api/cohorts/{id}/filtering_terms/', generic_handler(db_fn=cohorts.get_filtering_terms_of_cohort)),
+
+ web.post('/api/datasets/', collection_handler(db_fn=datasets.get_datasets)),
+ web.post('/api/datasets/{id}/', collection_handler(db_fn=datasets.get_dataset_with_id)),
+ web.post('/api/datasets/{id}/g_variants/', generic_handler(db_fn=datasets.get_variants_of_dataset)),
+ web.post('/api/datasets/{id}/biosamples/', generic_handler(db_fn=datasets.get_biosamples_of_dataset)),
+ web.post('/api/datasets/{id}/individuals/', generic_handler(db_fn=datasets.get_individuals_of_dataset)),
+ web.post('/api/datasets/{id}/filtering_terms/', generic_handler(db_fn=datasets.get_filtering_terms_of_dataset)),
+ web.post('/api/datasets/{id}/runs/', generic_handler(db_fn=datasets.get_runs_of_dataset)),
+ web.post('/api/datasets/{id}/analyses/', generic_handler(db_fn=datasets.get_analyses_of_dataset)),
+
+ web.post('/api/g_variants/', generic_handler(db_fn=g_variants.get_variants)),
+ web.post('/api/g_variants/{id}/', generic_handler(db_fn=g_variants.get_variant_with_id)),
+ web.post('/api/g_variants/{id}/biosamples/', generic_handler(db_fn=g_variants.get_biosamples_of_variant)),
+ web.post('/api/g_variants/{id}/individuals/', generic_handler(db_fn=g_variants.get_individuals_of_variant)),
+ web.post('/api/g_variants/{id}/runs/', generic_handler(db_fn=g_variants.get_runs_of_variant)),
+ web.post('/api/g_variants/{id}/analyses/', generic_handler(db_fn=g_variants.get_analyses_of_variant)),
+
+ web.post('/api/individuals/', generic_handler(db_fn=individuals.get_individuals)),
+ web.post('/api/individuals/{id}/', generic_handler(db_fn=individuals.get_individual_with_id)),
+ web.post('/api/individuals/{id}/g_variants/', generic_handler(db_fn=individuals.get_variants_of_individual)),
+ web.post('/api/individuals/{id}/biosamples/', generic_handler(db_fn=individuals.get_biosamples_of_individual)),
+ web.post('/api/individuals/{id}/filtering_terms/', generic_handler(db_fn=individuals.get_filtering_terms_of_individual)),
+ web.post('/api/individuals/{id}/runs/', generic_handler(db_fn=individuals.get_runs_of_individual)),
+ web.post('/api/individuals/{id}/analyses/', generic_handler(db_fn=individuals.get_analyses_of_individual)),
+
+ web.post('/api/runs/', generic_handler(db_fn=runs.get_runs)),
+ web.post('/api/runs/{id}/', generic_handler(db_fn=runs.get_run_with_id)),
+ web.post('/api/runs/{id}/g_variants/', generic_handler(db_fn=runs.get_variants_of_run)),
+ web.post('/api/runs/{id}/analyses/', generic_handler(db_fn=runs.get_analyses_of_run)),
+]
diff --git a/beacon/response/__init__.py b/beacon/response/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/beacon/response/build_response.py b/beacon/response/build_response.py
new file mode 100644
index 0000000..882716a
--- /dev/null
+++ b/beacon/response/build_response.py
@@ -0,0 +1,210 @@
+from typing import Optional
+
+from beacon import conf
+from beacon.db.schemas import DefaultSchemas
+from beacon.request import RequestParams
+from beacon.request.model import Granularity
+
+
+def build_meta(qparams: RequestParams, entity_schema: Optional[DefaultSchemas], returned_granularity: Granularity):
+ """"Builds the `meta` part of the response
+
+ We assume that receivedRequest is the evaluated request (qparams) sent by the user.
+ """
+
+ meta = {
+ 'beaconId': conf.beacon_id,
+ 'apiVersion': conf.api_version,
+ 'returnedGranularity': returned_granularity,
+ 'receivedRequestSummary': qparams.summary(),
+ 'returnedSchemas': [entity_schema.value] if entity_schema is not None else []
+ }
+ return meta
+
+
+def build_response_summary(exists, num_total_results):
+ if num_total_results is None:
+ return {
+ 'exists': exists
+ }
+ else:
+ return {
+ 'exists': exists,
+ 'numTotalResults': num_total_results
+ }
+
+
+def build_response(data, num_total_results, qparams, func):
+ """"Fills the `response` part with the correct format in `results`"""
+
+ response = {
+ 'id': '', # TODO: Set the name of the dataset/cohort
+ 'setType': '', # TODO: Set the type of collection
+ 'exists': num_total_results > 0,
+ 'resultsCount': num_total_results,
+ 'results': data,
+ # 'info': None,
+ 'resultsHandover': None, # build_results_handover
+ }
+
+ return response
+
+
+########################################
+# Resultset Response
+########################################
+
+def build_beacon_resultset_response(data,
+ num_total_results,
+ qparams: RequestParams,
+ func_response_type,
+ entity_schema: DefaultSchemas):
+ """"
+ Transform data into the Beacon response format.
+ """
+
+ beacon_response = {
+ 'meta': build_meta(qparams, entity_schema, Granularity.RECORD),
+ 'responseSummary': build_response_summary(num_total_results > 0, num_total_results),
+ # TODO: 'extendedInfo': build_extended_info(),
+ 'response': {
+ 'resultSets': [build_response(data, num_total_results, qparams, func_response_type)]
+ },
+ 'beaconHandovers': conf.beacon_handovers,
+ }
+ return beacon_response
+
+########################################
+# Count Response
+########################################
+
+def build_beacon_count_response(data,
+ num_total_results,
+ qparams: RequestParams,
+ func_response_type,
+ entity_schema: DefaultSchemas):
+ """"
+ Transform data into the Beacon response format.
+ """
+
+ beacon_response = {
+ 'meta': build_meta(qparams, entity_schema, Granularity.COUNT),
+ 'responseSummary': build_response_summary(num_total_results > 0, num_total_results),
+ # TODO: 'extendedInfo': build_extended_info(),
+ 'beaconHandovers': conf.beacon_handovers,
+ }
+ return beacon_response
+
+########################################
+# Boolean Response
+########################################
+
+def build_beacon_boolean_response(data,
+ num_total_results,
+ qparams: RequestParams,
+ func_response_type,
+ entity_schema: DefaultSchemas):
+ """"
+ Transform data into the Beacon response format.
+ """
+
+ beacon_response = {
+ 'meta': build_meta(qparams, entity_schema, Granularity.BOOLEAN),
+ 'responseSummary': build_response_summary(num_total_results > 0, None),
+ # TODO: 'extendedInfo': build_extended_info(),
+ 'beaconHandovers': conf.beacon_handovers,
+ }
+ return beacon_response
+
+########################################
+# Collection Response
+########################################
+
+def build_beacon_collection_response(data, num_total_results, qparams: RequestParams, func_response_type, entity_schema: DefaultSchemas):
+ beacon_response = {
+ 'meta': build_meta(qparams, entity_schema, Granularity.RECORD),
+ 'responseSummary': build_response_summary(num_total_results > 0, num_total_results),
+ # TODO: 'info': build_extended_info(),
+ 'beaconHandovers': conf.beacon_handovers,
+ 'response': {
+ 'collections': func_response_type(data, qparams)
+ }
+ }
+ return beacon_response
+
+########################################
+# Info Response
+########################################
+
+def build_beacon_info_response(data, qparams, func_response_type, authorized_datasets=None):
+ if authorized_datasets is None:
+ authorized_datasets = []
+
+ beacon_response = {
+ 'meta': build_meta(qparams, None, Granularity.RECORD),
+ 'response': {
+ 'id': conf.beacon_id,
+ 'name': conf.beacon_name,
+ 'apiVersion': conf.api_version,
+ 'environment': conf.environment,
+ 'organization': {
+ 'id': conf.org_id,
+ 'name': conf.org_name,
+ 'description': conf.org_description,
+ 'address': conf.org_adress,
+ 'welcomeUrl': conf.org_welcome_url,
+ 'contactUrl': conf.org_contact_url,
+ 'logoUrl': conf.org_logo_url,
+ },
+ 'description': conf.description,
+ 'version': conf.version,
+ 'welcomeUrl': conf.welcome_url,
+ 'alternativeUrl': conf.alternative_url,
+ 'createDateTime': conf.create_datetime,
+ 'updateDateTime': conf.update_datetime,
+ 'datasets': func_response_type(data, qparams, authorized_datasets),
+ }
+ }
+
+ return beacon_response
+
+########################################
+# Service Info Response
+########################################
+
+def build_beacon_service_info_response():
+ beacon_response = {
+ 'id': conf.beacon_id,
+ 'name': conf.beacon_name,
+ 'type': {
+ 'group': conf.ga4gh_service_type_group,
+ 'artifact': conf.ga4gh_service_type_artifact,
+ 'version': conf.ga4gh_service_type_version
+ },
+ 'description': conf.description,
+ 'organization': {
+ 'name': conf.org_name,
+ 'url': conf.org_welcome_url
+ },
+ 'contactUrl': conf.org_contact_url,
+ 'documentationUrl': conf.documentation_url,
+ 'createdAt': conf.create_datetime,
+ 'updatedAt': conf.update_datetime,
+ 'environment': conf.environment,
+ 'version': conf.version,
+ }
+
+ return beacon_response
+
+########################################
+# Filtering terms Response
+########################################
+
+def build_filtering_terms_response(filtering_terms, resources, qparams: RequestParams):
+ return {
+ "meta": build_meta(qparams, None, Granularity.RECORD),
+ "response": {
+ "resources": resources,
+ "filteringTerms": filtering_terms
+ }
+ }
diff --git a/beacon/response/filtering_terms.py b/beacon/response/filtering_terms.py
new file mode 100644
index 0000000..46dd9ca
--- /dev/null
+++ b/beacon/response/filtering_terms.py
@@ -0,0 +1,30 @@
+"""
+Filtering terms Endpoint.
+
+Querying the filtering terms endpoint reveals information about existing ontology filters in this beacon.
+These are stored in the DB inside the table named 'ontology_terms'.
+
+"""
+
+from beacon import conf
+from beacon.db.filtering_terms import get_filtering_terms
+from beacon.db.schemas import DefaultSchemas
+from beacon.request import RequestParams
+from beacon.utils.stream import json_stream
+
+
+async def handler(request, qparams: RequestParams, entity_schema: DefaultSchemas):
+ _, _, docs = get_filtering_terms(entry_id=None, qparams=qparams)
+ ontology_terms = [
+ {
+ 'id': record['ontology'] + ':' + record['term'],
+ 'label': record['label']
+ }
+ async for record in docs
+ ]
+ response = {
+ 'meta': conf.beacon_id,
+ 'apiVersion': conf.api_version,
+ 'filteringTerms': ontology_terms,
+ }
+ return await json_stream(request, response)
diff --git a/beacon/response/framework.py b/beacon/response/framework.py
new file mode 100644
index 0000000..82a054f
--- /dev/null
+++ b/beacon/response/framework.py
@@ -0,0 +1,356 @@
+"""
+Beacon Framework Configuration Endpoints.
+"""
+
+# import logging
+
+from beacon import conf
+
+# LOG = logging.getLogger(__name__)
+from beacon.db.schemas import DefaultSchemas
+
+from beacon.utils.stream import json_stream
+
+
+def get_entry_types():
+ return {
+ "analysis": {
+ "id": "analysis",
+ "name": "Bioinformatics analysis",
+ "ontologyTermForThisType": {
+ "id": "edam:operation_2945",
+ "label": "Analysis"
+ },
+ "partOfSpecification": "Beacon v2.0.0",
+ "description": "Apply analytical methods to existing data of a specific type.",
+ "defaultSchema": {
+ "id": DefaultSchemas.ANALYSES.value['schema'],
+ "name": "Default schema for a bioinformatics analysis",
+ "referenceToSchemaDefinition": "https://raw.githubusercontent.com/ga4gh-beacon/beacon-v2-Models/main/BEACON-V2-Model/analyses/defaultSchema.json",
+ "schemaVersion": "v2.0.0"
+ },
+ "additionallySupportedSchemas": []
+ },
+ "biosample": {
+ "id": "biosample",
+ "name": "Biological Sample",
+ "ontologyTermForThisType": {
+ "id": "NCIT:C70699",
+ "label": "Biospecimen"
+ },
+ "partOfSpecification": "Beacon v2.0.0",
+ "description": "Any material sample taken from a biological entity for testing, diagnostic, propagation, treatment or research purposes, including a sample obtained from a living organism or taken from the biological object after halting of all its life functions. Biospecimen can contain one or more components including but not limited to cellular molecules, cells, tissues, organs, body fluids, embryos, and body excretory products. [ NCI ]",
+ "defaultSchema": {
+ "id": DefaultSchemas.BIOSAMPLES.value['schema'],
+ "name": "Default schema for a biological sample",
+ "referenceToSchemaDefinition": "https://raw.githubusercontent.com/ga4gh-beacon/beacon-v2-Models/main/BEACON-V2-Model/biosamples/defaultSchema.json",
+ "schemaVersion": "v2.0.0"
+ },
+ "additionallySupportedSchemas": []
+ },
+ "cohort": {
+ "id": "cohort",
+ "name": "Cohort",
+ "ontologyTermForThisType": {
+ "id": "NCIT:C61512",
+ "label": "Cohort"
+ },
+ "partOfSpecification": "Beacon v2.0.0",
+ "description": "A group of individuals, identified by a common characteristic. [ NCI ]",
+ "defaultSchema": {
+ "id": DefaultSchemas.COHORTS.value['schema'],
+ "name": "Default schema for cohorts",
+ "referenceToSchemaDefinition": "https://raw.githubusercontent.com/ga4gh-beacon/beacon-v2-Models/main/BEACON-V2-Model/cohorts/defaultSchema.json",
+ "schemaVersion": "v2.0.0"
+ },
+ "aCollectionOf": [{"id": "individual", "name": "Individuals"}],
+ "additionalSupportedSchemas": []
+ },
+ "dataset": {
+ "id": "dataset",
+ "name": "Dataset",
+ "ontologyTermForThisType": {
+ "id": "NCIT:C47824",
+ "label": "Data set"
+ },
+ "partOfSpecification": "Beacon v2.0.0",
+ "description": "A Dataset is a collection of records, like rows in a database or cards in a cardholder.",
+ "defaultSchema": {
+ "id": DefaultSchemas.DATASETS.value['schema'],
+ "name": "Default schema for datasets",
+ "referenceToSchemaDefinition": "https://raw.githubusercontent.com/ga4gh-beacon/beacon-v2-Models/main/BEACON-V2-Model/datasets/defaultSchema.json",
+ "schemaVersion": "v2.0.0"
+ },
+ "aCollectionOf": [{"id": "genomicVariation", "name": "Genomic Variants"}],
+ "additionalSupportedSchemas": []
+ },
+ "genomicVariation": {
+ "id": "genomicVariation",
+ "name": "Genomic Variants",
+ "ontologyTermForThisType": {
+ "id": "SO:0000735",
+ "label": "sequence_location"
+ },
+ "partOfSpecification": "Beacon v2.0.0",
+ "description": "The location of a sequence.",
+ "defaultSchema": {
+ "id": DefaultSchemas.GENOMICVARIATIONS.value['schema'],
+ "name": "Default schema for a genomic variation",
+ "referenceToSchemaDefinition": "https://raw.githubusercontent.com/ga4gh-beacon/beacon-v2-Models/main/BEACON-V2-Model/genomicVariations/defaultSchema.json",
+ "schemaVersion": "v2.0.0"
+ },
+ "additionallySupportedSchemas": []
+ },
+ "individual": {
+ "id": "individual",
+ "name": "Individual",
+ "ontologyTermForThisType": {
+ "id": "NCIT:C25190",
+ "label": "Person"
+ },
+ "partOfSpecification": "Beacon v2.0.0",
+ "description": "A human being. It could be a Patient, a Tissue Donor, a Participant, a Human Study Subject, etc.",
+ "defaultSchema": {
+ "id": DefaultSchemas.INDIVIDUALS.value['schema'],
+ "name": "Default schema for an individual",
+ "referenceToSchemaDefinition": "https://raw.githubusercontent.com/ga4gh-beacon/beacon-v2-Models/main/BEACON-V2-Model/individuals/defaultSchema.json",
+ "schemaVersion": "v2.0.0"
+ },
+ "additionallySupportedSchemas": []
+ },
+ "run": {
+ "id": "run",
+ "name": "Sequencing run",
+ "ontologyTermForThisType": {
+ "id": "NCIT:C148088",
+ "label": "Sequencing run"
+ },
+ "partOfSpecification": "Beacon v2.0.0",
+ "description": "The valid and completed operation of a high-throughput sequencing instrument for a single sequencing process. [ NCI ]",
+ "defaultSchema": {
+ "id": DefaultSchemas.RUNS.value['schema'],
+ "name": "Default schema for a sequencing run",
+ "referenceToSchemaDefinition": "https://raw.githubusercontent.com/ga4gh-beacon/beacon-v2-Models/main/BEACON-V2-Model/runs/defaultSchema.json",
+ "schemaVersion": "v2.0.0"
+ },
+ "additionallySupportedSchemas": []
+ },
+
+ }
+
+
+async def configuration(request):
+ meta = {
+ '$schema': 'https://raw.githubusercontent.com/ga4gh-beacon/beacon-framework-v2/main/responses/sections/beaconInformationalResponseMeta.json',
+ 'beaconId': conf.beacon_id,
+ 'apiVersion': conf.api_version,
+ 'returnedSchemas': []
+ }
+
+ response = {
+ '$schema': 'https://raw.githubusercontent.com/ga4gh-beacon/beacon-framework-v2/main/configuration/beaconConfigurationSchema.json',
+ 'maturityAttributes': {
+ 'productionStatus': 'DEV'
+ },
+ 'securityAttributes': {
+ 'defaultGranularity': 'record',
+ 'securityLevels': ['PUBLIC', 'REGISTERED', 'CONTROLLED']
+ },
+ 'entryTypes': get_entry_types()
+ }
+
+ configuration_json = {
+ '$schema': 'https://raw.githubusercontent.com/ga4gh-beacon/beacon-framework-v2/main/responses/beaconConfigurationResponse.json',
+ 'meta': meta,
+ 'response': response
+ }
+
+ return await json_stream(request, configuration_json)
+
+
+async def entry_types(request):
+ meta = {
+ 'beaconId': conf.beacon_id,
+ 'apiVersion': conf.api_version,
+ 'returnedSchemas': []
+ }
+
+ response = {
+ "entryTypes": get_entry_types()
+ }
+
+ entry_types_json = {
+ 'meta': meta,
+ 'response': response
+ }
+
+ return await json_stream(request, entry_types_json)
+
+
+async def beacon_map(request):
+ meta = {
+ '$schema': 'https://raw.githubusercontent.com/ga4gh-beacon/beacon-framework-v2/main/responses/sections/beaconInformationalResponseMeta.json',
+ 'beaconId': conf.beacon_id,
+ 'apiVersion': conf.api_version,
+ 'returnedSchemas': []
+ }
+
+ response = {
+ '$schema': 'https://raw.githubusercontent.com/ga4gh-beacon/beacon-framework-v2/main/configuration/beaconMapSchema.json',
+ "endpointSets": {
+ "analysis": {
+ "entryType": "analysis",
+ "openAPIEndpointsDefinition": "https://raw.githubusercontent.com/ga4gh-beacon/beacon-v2-Models/main/BEACON-V2-Model/analyses/endpoints.json",
+ "rootUrl": conf.uri + "/api/analyses",
+ "singleEntryUrl": conf.uri + "/api/analyses/{id}",
+ "endpoints": {
+ "genomicVariation": {
+ "returnedEntryType": "genomicVariation",
+ "url": conf.uri + "/api/analyses/{id}/g_variants"
+ },
+ }
+ },
+ "biosample": {
+ "entryType": "biosample",
+ "openAPIEndpointsDefinition": "https://raw.githubusercontent.com/ga4gh-beacon/beacon-v2-Models/main/BEACON-V2-Model/biosamples/endpoints.json",
+ "rootUrl": conf.uri + "/api/biosamples",
+ "singleEntryUrl": conf.uri + "/api/biosamples/{id}",
+ "endpoints": {
+ "analysis": {
+ "returnedEntryType": "analysis",
+ "url": conf.uri + "/api/biosamples/{id}/analyses"
+ },
+ "genomicVariation": {
+ "returnedEntryType": "genomicVariation",
+ "url": conf.uri + "/api/biosamples/{id}/g_variants"
+ },
+ "run": {
+ "returnedEntryType": "run",
+ "url": conf.uri + "/api/biosamples/{id}/runs"
+ },
+ }
+ },
+ "cohort": {
+ "entryType": "cohort",
+ "openAPIEndpointsDefinition": "https://raw.githubusercontent.com/ga4gh-beacon/beacon-v2-Models/main/BEACON-V2-Model/cohorts/endpoints.json",
+ "rootUrl": conf.uri + "/api/cohorts",
+ "singleEntryUrl": conf.uri + "/api/cohorts/{id}",
+ "filteringTermsUrl": conf.uri + "/api/cohorts/{id}/filtering_terms",
+ "endpoints": {
+ "analysis": {
+ "returnedEntryType": "analysis",
+ "url": conf.uri + "/api/cohorts/{id}/analyses"
+ },
+ "individual": {
+ "returnedEntryType": "individual",
+ "url": conf.uri + "/api/cohorts/{id}/individuals"
+ },
+ "run": {
+ "returnedEntryType": "run",
+ "url": conf.uri + "/api/cohorts/{id}/runs"
+ }
+ }
+ },
+ "dataset": {
+ "entryType": "dataset",
+ "openAPIEndpointsDefinition": "https://raw.githubusercontent.com/ga4gh-beacon/beacon-v2-Models/main/BEACON-V2-Model/datasets/endpoints.json",
+ "rootUrl": conf.uri + "/api/datasets",
+ "singleEntryUrl": conf.uri + "/api/datasets/{id}",
+ "filteringTermsUrl": conf.uri + "/api/datasets/{id}/filtering_terms",
+ "endpoints": {
+ "analysis": {
+ "returnedEntryType": "analysis",
+ "url": conf.uri + "/api/datasets/{id}/analyses"
+ },
+ "biosample": {
+ "returnedEntryType": "biosample",
+ "url": conf.uri + "/api/datasets/{id}/biosamples"
+ },
+ "genomicVariation": {
+ "returnedEntryType": "genomicVariation",
+ "url": conf.uri + "/api/datasets/{id}/g_variants"
+ },
+ "individual": {
+ "returnedEntryType": "individual",
+ "url": conf.uri + "/api/datasets/{id}/individuals"
+ },
+ "run": {
+ "returnedEntryType": "run",
+ "url": conf.uri + "/api/datasets/{id}/runs"
+ }
+ }
+ },
+ "genomicVariation": {
+ "entryType": "genomicVariation",
+ "openAPIEndpointsDefinition": "https://raw.githubusercontent.com/ga4gh-beacon/beacon-v2-Models/main/BEACON-V2-Model/genomicVariations/endpoints.json",
+ "rootUrl": conf.uri + "/api/g_variants",
+ "singleEntryUrl": conf.uri + "/api/g_variants/{id}",
+ "endpoints": {
+ "analysis": {
+ "returnedEntryType": "analysis",
+ "url": conf.uri + "/api/g_variants/{id}/analyses"
+ },
+ "biosample": {
+ "returnedEntryType": "biosample",
+ "url": conf.uri + "/api/g_variants/{id}/biosamples"
+ },
+ "individual": {
+ "returnedEntryType": "individual",
+ "url": conf.uri + "/api/g_variants/{id}/individuals"
+ },
+ "run": {
+ "returnedEntryType": "run",
+ "url": conf.uri + "/api/g_variants/{id}/runs"
+ }
+ }
+ },
+ "individual": {
+ "entryType": "individual",
+ "openAPIEndpointsDefinition": "https://raw.githubusercontent.com/ga4gh-beacon/beacon-v2-Models/main/BEACON-V2-Model/individuals/endpoints.json",
+ "rootUrl": conf.uri + "/api/individuals",
+ "singleEntryUrl": conf.uri + "/api/individuals/{id}",
+ "filteringTermsUrl": conf.uri + "/api/individuals/{id}/filtering_terms",
+ "endpoints": {
+ "analysis": {
+ "returnedEntryType": "analysis",
+ "url": conf.uri + "/api/individuals/{id}/analyses"
+ },
+ "biosample": {
+ "returnedEntryType": "biosample",
+ "url": conf.uri + "/api/individuals/{id}/biosamples"
+ },
+ "genomicVariation": {
+ "returnedEntryType": "genomicVariation",
+ "url": conf.uri + "/api/individuals/{id}/g_variants"
+ },
+ "run": {
+ "returnedEntryType": "run",
+ "url": conf.uri + "/api/individuals/{id}/runs"
+ }
+ }
+ },
+ "run": {
+ "entryType": "run",
+ "openAPIEndpointsDefinition": "https://raw.githubusercontent.com/ga4gh-beacon/beacon-v2-Models/main/BEACON-V2-Model/runs/endpoints.json",
+ "rootUrl": conf.uri + "/api/runs",
+ "singleEntryUrl": conf.uri + "/api/runs/{id}",
+ "endpoints": {
+ "analysis": {
+ "returnedEntryType": "analysis",
+ "url": conf.uri + "/api/runs/{id}/analyses"
+ },
+ "genomicVariation": {
+ "returnedEntryType": "genomicVariation",
+ "url": conf.uri + "/api/runs/{id}/g_variants"
+ },
+ }
+ },
+ }
+ }
+
+ beacon_map_json = {
+ 'meta': meta,
+ 'response': response
+ }
+
+ return await json_stream(request, beacon_map_json)
diff --git a/beacon/response/info.py b/beacon/response/info.py
new file mode 100644
index 0000000..4cfcb2b
--- /dev/null
+++ b/beacon/response/info.py
@@ -0,0 +1,50 @@
+"""
+Info Endpoint.
+
+Querying the info endpoint reveals information about this beacon and its existing datasets
+and their associated metadata.
+
+* ``/`` Beacon-v1
+* ``/info`` Beacon-v1
+* ``/info?model=GA4GH-ServiceInfo-v0.1`` GA4GH
+* ``/service-info`` GA4GH
+
+"""
+
+import logging
+import json
+from aiohttp.web_request import Request
+from beacon.db.datasets import get_datasets
+from beacon.request import RequestParams
+from beacon.response.build_response import build_beacon_info_response
+from beacon.utils.auth import resolve_token
+from beacon.utils.stream import json_stream
+from bson import json_util
+
+LOG = logging.getLogger(__name__)
+
+async def handler(request: Request):
+ LOG.info('Running a GET info request')
+
+ # Fetch datasets info
+ json_body = await request.json() if request.method == "POST" and request.has_body and request.can_read_body else {}
+ qparams = RequestParams(**json_body).from_request(request)
+ _, _, datasets = get_datasets(None, qparams)
+ beacon_datasets = [ r for r in datasets ]
+
+ all_datasets = [ r['_id'] for r in beacon_datasets]
+
+ access_token = request.headers.get('Authorization')
+ if access_token:
+ access_token = access_token[7:] # cut out 7 characters: len('Bearer ')
+
+ authorized_datasets, authenticated = await resolve_token(access_token, all_datasets)
+ if authenticated:
+ LOG.debug('all datasets: %s', all_datasets)
+ LOG.info('resolved datasets: %s', authorized_datasets)
+
+ response_converted = build_beacon_info_response(beacon_datasets,
+ qparams,
+ lambda x,y,z: x,
+ authorized_datasets if authenticated else [])
+ return await json_stream(request, response_converted)
diff --git a/beacon/response/middlewares.py b/beacon/response/middlewares.py
new file mode 100644
index 0000000..ec6ace4
--- /dev/null
+++ b/beacon/response/middlewares.py
@@ -0,0 +1,63 @@
+import logging
+import sys
+import traceback
+
+# import aiohttp_csrf
+import aiohttp_jinja2
+from aiohttp import web
+
+LOG = logging.getLogger(__name__)
+
+CSRF_FIELD_NAME = 'csrf_token'
+SESSION_STORAGE = 'beacon_session'
+
+error_templates = {
+ 400: '400.html',
+ 404: '404.html',
+ 500: '500.html',
+}
+
+default_errors = {
+ 400: 'Bad request',
+ 404: 'This URL does not exist',
+ 500: 'Server Error',
+}
+
+
+def handle_error(request, exc):
+ # exc is a web.HTTPException
+
+ template = error_templates.get(exc.status)
+ if not template:
+ raise exc # We don't handle it
+
+ context = {
+ 'cookies': request.cookies,
+ 'exception': exc
+ }
+ return aiohttp_jinja2.render_template(template,
+ request,
+ context)
+
+
+@web.middleware
+async def error_middleware(request, handler):
+ try:
+ return await handler(request)
+ except web.HTTPError as ex: # Just the 400's and 500's
+
+ # if the request comes from /api/*, we output the json version
+ LOG.error('Error on page %s: %s', request.path, ex)
+
+ if hasattr(ex, 'api_error'):
+ raise
+
+ # Else, we are a regular HTML response
+ if ex.status == 401: # Unauthorized
+ raise web.HTTPFound('/login')
+
+ if ex.status >= 500:
+ LOG.error('Error caught: %s', ex)
+ traceback.print_stack(file=sys.stderr)
+
+ return handle_error(request, ex)
diff --git a/beacon/response/service_info.py b/beacon/response/service_info.py
new file mode 100644
index 0000000..4dadcf8
--- /dev/null
+++ b/beacon/response/service_info.py
@@ -0,0 +1,11 @@
+import logging
+from aiohttp.web_request import Request
+from beacon.response.build_response import build_beacon_service_info_response
+from beacon.utils.stream import json_stream
+
+LOG = logging.getLogger(__name__)
+
+async def handler(request: Request):
+ LOG.info('Running a GET service info request')
+ response_converted = build_beacon_service_info_response()
+ return await json_stream(request, response_converted)
diff --git a/beacon/utils/auth.py b/beacon/utils/auth.py
new file mode 100644
index 0000000..208ed3e
--- /dev/null
+++ b/beacon/utils/auth.py
@@ -0,0 +1,36 @@
+import logging
+
+from aiohttp import ClientSession, web
+
+from beacon.db.datasets import filter_public_datasets
+from ..conf import permissions_url
+
+LOG = logging.getLogger(__name__)
+
+
+async def resolve_token(token, requested_datasets_ids):
+ # If the user is not authenticated (ie no token)
+ # we pass (requested_datasets, False) to the database function: it will filter out the datasets list, with the public ones
+ if token is None:
+ public_datasets = [ d["name"] for d in filter_public_datasets(requested_datasets_ids) ]
+ return public_datasets, False
+
+ # Otherwise, we have a token and resolve the datasets with the permissions server
+ # The permissions server will:
+ # * filter out the datasets list, with the ones the user has access to
+ # * return _all_ the datasets the user has access to, in case the datasets list is empty
+ async with ClientSession() as session:
+ async with session.post(
+ permissions_url,
+ headers={'Authorization': 'Bearer ' + token,
+ 'Accept': 'application/json'},
+ json={'datasets': list(requested_datasets_ids)}, # will set the Content-Type to application/json
+ ) as resp:
+ if resp.status > 200:
+ LOG.error('Permissions server error %d', resp.status)
+ error = await resp.text()
+ LOG.error('Error: %s', error)
+ raise web.HTTPUnauthorized(reason=error)
+
+ authorized_datasets = await resp.json()
+ return authorized_datasets, True
diff --git a/beacon/utils/json.py b/beacon/utils/json.py
new file mode 100644
index 0000000..23b897d
--- /dev/null
+++ b/beacon/utils/json.py
@@ -0,0 +1,232 @@
+import inspect
+import logging
+from dataclasses import is_dataclass
+from decimal import Decimal
+from json.encoder import py_encode_basestring_ascii
+from bson.objectid import ObjectId
+
+from asyncpg import Record
+
+from json import loads as parse_json
+
+from pymongo.cursor import Cursor
+
+LOG = logging.getLogger(__name__)
+
+_INFINITY = float('inf')
+
+
+def is_cursor(o):
+ return isinstance(o, Cursor)
+
+
+def is_list(o):
+ return (isinstance(o, (list, set, tuple)) or
+ inspect.isgenerator(o) or
+ inspect.isgeneratorfunction(o))
+
+
+def is_dict(o):
+ return isinstance(o, (dict, Record))
+
+
+def is_asyncgen(o):
+ return (inspect.isasyncgen(o) or
+ inspect.isasyncgenfunction(o))
+
+
+class jsonb(str):
+ __parsed = None
+
+ @property
+ def parsed(self):
+ """Return a JSON deserializing of itself."""
+ if self.__parsed is None:
+ self.__parsed = parse_json(self)
+ return self.__parsed
+
+
+def json_encoder(v):
+ raise NotImplementedError('We should not use json encoding')
+
+
+def json_decoder(v):
+ return jsonb(v) # just "tag" it
+
+
+# we make it compact
+_ITEM_SEPARATOR = ','
+_KEY_SEPARATOR = ':'
+
+
+def _atom(o):
+ if isinstance(o, jsonb):
+ return o
+ elif isinstance(o, str):
+ return py_encode_basestring_ascii(o)
+ elif o is None:
+ return 'null'
+ elif o is True:
+ return 'true'
+ elif o is False:
+ return 'false'
+ elif isinstance(o, int):
+ return int.__repr__(o)
+ elif isinstance(o, float):
+ if o != o:
+ return 'NaN'
+ elif o == _INFINITY:
+ return 'Infinity'
+ elif o == -_INFINITY:
+ return '-Infinity'
+ else:
+ return float.__repr__(o)
+ elif isinstance(o, Decimal):
+ return str(o) # keeps the decimals, float would truncate them
+ elif isinstance(o, ObjectId):
+ return py_encode_basestring_ascii(str(o))
+ # not a common type
+ return None
+
+
+async def _compound(o, circulars):
+ if is_dict(o):
+ async for i in _iterencode_dict(o, circulars):
+ yield i
+ elif is_list(o):
+ async for i in _iterencode_list(o, circulars):
+ yield i
+ elif is_asyncgen(o):
+ async for i in _iterencode_async_gen(o, circulars):
+ yield i
+ elif is_dataclass(o):
+ async for i in _iterencode_dataclass(o, circulars):
+ yield i
+ elif is_cursor(o):
+ async for i in _iterencode_cursor(o, circulars):
+ yield i
+ else:
+ raise TypeError(f'Unsupported type: {o.__class__.__name__}')
+
+
+async def _iterencode_list(items, circulars):
+ yield '['
+ marker = id(items)
+ if marker in circulars:
+ raise ValueError("Circular reference detected")
+ circulars[marker] = items
+ first = True
+ for item in items:
+ if first:
+ first = False
+ else:
+ yield _ITEM_SEPARATOR
+ async for i in _iterencode(item, circulars):
+ yield i
+ yield ']'
+ del circulars[marker]
+
+
+async def _iterencode_dict(d, circulars):
+ yield '{'
+ marker = id(d)
+ if marker in circulars:
+ raise ValueError("Circular reference detected")
+ circulars[marker] = d
+ first = True
+ for key, value in d.items():
+ atom_key = _atom(key)
+ if atom_key is None:
+ raise TypeError(f'keys must be str, int, float or bool, not {key.__class__.__name__}')
+ if first:
+ first = False
+ else:
+ yield _ITEM_SEPARATOR
+ yield atom_key
+ yield _KEY_SEPARATOR
+ async for item in _iterencode(value, circulars):
+ yield item
+ yield '}'
+ del circulars[marker]
+
+
+async def _iterencode_async_gen(g, circulars):
+ yield '['
+ marker = id(g)
+ if marker in circulars:
+ raise ValueError("Circular reference detected")
+ circulars[marker] = g
+ first = True
+ async for item in g:
+ if first:
+ first = False
+ else:
+ yield _ITEM_SEPARATOR
+ async for i in _iterencode(item, circulars):
+ yield i
+ yield ']'
+ del circulars[marker]
+
+
+async def _iterencode_cursor(g, circulars):
+ yield '['
+ marker = id(g)
+ if marker in circulars:
+ raise ValueError("Circular reference detected")
+ circulars[marker] = g
+ first = True
+
+ try:
+ item = g.next()
+ except:
+ item = None
+ while item:
+ if first:
+ first = False
+ else:
+ yield _ITEM_SEPARATOR
+ async for i in _iterencode(item, circulars):
+ yield i
+ try:
+ item = g.next()
+ except:
+ item = None
+ yield ']'
+ del circulars[marker]
+
+
+async def _iterencode_dataclass(d, circulars):
+ yield '{'
+ marker = id(d)
+ if marker in circulars:
+ raise ValueError("Circular reference detected")
+ circulars[marker] = d
+ first = True
+ for key in d.__dataclass_fields__:
+ value = getattr(d, key)
+ atom_key = _atom(key)
+ if atom_key is None:
+ raise TypeError(f'keys must be str, int, float or bool, not {key.__class__.__name__}')
+ if first:
+ first = False
+ else:
+ yield _ITEM_SEPARATOR
+ yield atom_key
+ yield _KEY_SEPARATOR
+ async for item in _iterencode(value, circulars):
+ yield item
+ yield '}'
+ del circulars[marker]
+
+async def _iterencode(o, circulars):
+ atom = _atom(o)
+ if atom is not None:
+ yield atom
+ else: # not an atom type
+ async for item in _compound(o, circulars):
+ yield item
+
+
+async def json_iterencode(o):
+ async for i in _iterencode(o, {}):
+ yield i
diff --git a/beacon/utils/stream.py b/beacon/utils/stream.py
new file mode 100644
index 0000000..fd671d8
--- /dev/null
+++ b/beacon/utils/stream.py
@@ -0,0 +1,53 @@
+import logging
+
+from aiohttp.http import SERVER_SOFTWARE
+from aiohttp.web import StreamResponse
+
+from beacon import conf
+from beacon.utils.json import json_iterencode
+
+LOG = logging.getLogger(__name__)
+
+_BUF_SIZE = getattr(conf, 'json_buffer_size', 1000)
+
+
+# async def json_stream(request, data):
+# from aiohttp.web import json_response as aiohttp_json_response
+# return aiohttp_json_response(data)
+
+async def json_stream(request, data, partial=False):
+ # No need here to check if partial is indeed a boolean
+
+ # Running this first, in case it raises an error
+ # so we don't start the StreamResponse yet
+ content_gen = [chunk async for chunk in json_iterencode(data)]
+
+ LOG.debug('HTTP response stream')
+ headers = {
+ 'Content-Type': 'application/json;charset=utf-8',
+ 'Server': f'{conf.beacon_name} {conf.version} (based on {SERVER_SOFTWARE})'
+ }
+ LOG.debug('Partial content: %s', partial)
+ response = StreamResponse(headers=headers, status=206 if partial else 200)
+
+ # response.enable_chunked_encoding()
+ await response.prepare(request)
+
+ # LOG.debug('HTTP response stream for rows')
+ buf = []
+ for chunk in content_gen:
+ if len(buf) < _BUF_SIZE:
+ buf.append(chunk)
+ continue
+ # flush the buffer
+ buf.append(chunk)
+ chunk = ''.join(buf)
+ buf = []
+ await response.write(chunk.encode()) # utf-8
+ if buf: # flush the remainder in the buffer
+ chunk = ''.join(buf)
+ await response.write(chunk.encode()) # utf-8
+
+ # LOG.debug('HTTP response stream closing')
+ await response.write_eof()
+ return response
diff --git a/deploy/Makefile b/deploy/Makefile
new file mode 100644
index 0000000..d238da8
--- /dev/null
+++ b/deploy/Makefile
@@ -0,0 +1,42 @@
+all: down up load reindex rebuild
+
+load:
+ mongoimport --jsonArray --uri "mongodb://root:example@127.0.0.1:27017/beacon?authSource=admin" --file data/analyses*.json --collection analyses
+ mongoimport --jsonArray --uri "mongodb://root:example@127.0.0.1:27017/beacon?authSource=admin" --file data/biosamples*.json --collection biosamples
+ mongoimport --jsonArray --uri "mongodb://root:example@127.0.0.1:27017/beacon?authSource=admin" --file data/cohorts*.json --collection cohorts
+ mongoimport --jsonArray --uri "mongodb://root:example@127.0.0.1:27017/beacon?authSource=admin" --file data/datasets*.json --collection datasets
+ mongoimport --jsonArray --uri "mongodb://root:example@127.0.0.1:27017/beacon?authSource=admin" --file data/individuals*.json --collection individuals
+ mongoimport --jsonArray --uri "mongodb://root:example@127.0.0.1:27017/beacon?authSource=admin" --file data/runs*.json --collection runs
+ mongoimport --jsonArray --uri "mongodb://root:example@127.0.0.1:27017/beacon?authSource=admin" --file data/genomicVariations*.json --collection genomicVariations
+
+up-db:
+ docker-compose up -d db && \
+ docker-compose up -d mongo-express
+
+up: up-db
+ docker-compose up -d beacon
+
+rebuild:
+ docker-compose rm -sf beacon && \
+ docker-compose build beacon && \
+ docker-compose up -d beacon && \
+ docker-compose logs -f beacon
+
+logs:
+ docker-compose logs -f beacon
+
+relaunch:
+ docker-compose up beacon
+
+down:
+ docker-compose down
+
+verify:
+ beacon-verifier http://localhost:5050/api/
+
+reindex:
+ python3 reindex.py
+
+# only works with justfile (https://github.com/casey/just#recipe-parameters)
+test COLLECTION REQUEST:
+ http POST http://localhost:5050/api/{{COLLECTION}}/ --json < {{REQUEST}}
diff --git a/deploy/README.md b/deploy/README.md
new file mode 100644
index 0000000..06a7198
--- /dev/null
+++ b/deploy/README.md
@@ -0,0 +1,190 @@
+# Deployment instructions
+
+[](https://mermaid.live/edit#pako:eNp1U01vgzAM_Ssop01qdtiRw6RRWm1SD91WJk2lhxRMGw0SFEg_VvW_z4EE2pX15Lz3bD_b9EQSmQLxyUaxcuvN3mPh4S-qQC0z5meMagyb98pSr5bYc5HKPS3YgRf8B5Cwiue5k2DWDrNfFou5QS0fBneWT1nN1qwCL7TB6j4WVoTI8ktq5RmRzRzLotR1Zy2F6ruWZQdb1eSQQG4lGc-BggFa2Eo-x1NXQzDzsngwnV4kmufKGar0ut3RmwZ1bDG3Ko_SJ5y_B52jhsDJe6aPuoJrYIkU9PHh0JN2j01-GFzjYXBbFkTqjA7VrhXjgosN1fy6VvR_jei2u-0cDc5j9WYfPehmcAtpmYtOnVNzcG8mWYo2Lzoa1BRorjc0YJbRHcs5fiVSXc_WpDTJeMfBTeLhHf9nDTYgI1KAKhhP8S9yMnBM6i0UEBMfQwEaN5vHJBZnlOoSXcAk5WiF-LXSMCJM1_LjKBL3bjUhZ2i_aMHzL0zOAvw)
+
+## Prerequisites
+
+You should have installed:
+
+- [Docker](https://docs.docker.com/engine/install/)
+- [Docker Compose](https://docs.docker.com/compose/install/)
+- [MongoDB Database Tools](https://www.mongodb.com/docs/database-tools/installation/installation/) (specifically `mongoimport` to add the dummy data to the database)
+- [Python 3](https://www.python.org/downloads/)
+
+## Installation
+
+All of the commands should be executed from the deploy directory.
+
+```bash
+cd deploy
+```
+
+### Light up the database
+
+#### Up the DB
+
+```bash
+docker-compose up -d db
+docker-compose up -d mongo-express
+```
+
+With `mongo-express` we can see the contents of the database at [http://localhost:8081](http://localhost:8081).
+
+#### Load the data
+
+To load the database we execute the following commands:
+
+```bash
+mongoimport --jsonArray --uri "mongodb://root:example@127.0.0.1:27017/beacon?authSource=admin" --file data/analyses*.json --collection analyses
+mongoimport --jsonArray --uri "mongodb://root:example@127.0.0.1:27017/beacon?authSource=admin" --file data/biosamples*.json --collection biosamples
+mongoimport --jsonArray --uri "mongodb://root:example@127.0.0.1:27017/beacon?authSource=admin" --file data/cohorts*.json --collection cohorts
+mongoimport --jsonArray --uri "mongodb://root:example@127.0.0.1:27017/beacon?authSource=admin" --file data/datasets*.json --collection datasets
+mongoimport --jsonArray --uri "mongodb://root:example@127.0.0.1:27017/beacon?authSource=admin" --file data/individuals*.json --collection individuals
+mongoimport --jsonArray --uri "mongodb://root:example@127.0.0.1:27017/beacon?authSource=admin" --file data/runs*.json --collection runs
+mongoimport --jsonArray --uri "mongodb://root:example@127.0.0.1:27017/beacon?authSource=admin" --file data/genomicVariations*.json --collection genomicVariations
+```
+
+This loads the JSON files inside of the `data` folder into the MongoDB database.
+
+> You can also use `make load` as a convenience alias.
+
+#### Create the indexes
+
+You can create the necessary indexes running the following Python script:
+
+```bash
+# Install the dependencies
+pip3 install pymongo
+
+python3 reindex.py
+```
+
+#### Automatically fetch the ontologies
+
+> This step might require a bit of tinkering since some ontologies used in the dummy data will fail to loaded. We recommend skipping this step unless you know what you are doing.
+
+You can automatically fetch the ontologies that the database is using with the following script:
+
+```bash
+# Install the dependencies
+pip3 install pymongo tqdm
+
+python3 fetch_ontologies.py
+```
+
+#### Extract the filtering terms
+
+**If you have the ontologies loaded**, you can automatically extract the filtering terms from the data in the database using the following utility script:
+
+```bash
+# Install the dependencies
+pip3 install pymongo tqdm owlready2 progressbar
+
+python3 extract_filtering_terms.py
+```
+
+### Light up the beacon
+
+#### Up the beacon
+
+Once the database is setup, you can up the beacon with the following command:
+
+```bash
+docker-compose up -d beacon
+```
+
+#### Check the logs
+
+Check the logs until the beacon is ready to be queried:
+
+```bash
+docker-compose logs -f beacon
+```
+
+## Usage
+
+You can query the beacon using GET or POST. Below, you can find some examples of usage:
+
+> For simplicity (and readability), we will be using [HTTPie](https://github.com/httpie/httpie).
+
+### Using GET
+
+Querying this endpoit it should return the 13 variants of the beacon (paginated):
+
+```bash
+http GET http://localhost:5050/api/g_variants/
+```
+
+You can also add [request parameters](https://github.com/ga4gh-beacon/beacon-v2-Models/blob/main/BEACON-V2-Model/genomicVariations/requestParameters.json) to the query, like so:
+
+```bash
+http GET http://localhost:5050/api/g_variants/?start=9411499,9411644&end=9411609
+```
+
+This should return 3 genomic variants.
+
+### Using POST
+
+You can use POST to make the previous query. With a `request.json` file like this one:
+
+```json
+{
+ "meta": {
+ "apiVersion": "2.0"
+ },
+ "query": {
+ "requestParameters": {
+ "start": [ 9411499, 9411644 ],
+ "end": [ 9411609 ]
+ },
+ "filters": [],
+ "includeResultsetResponses": "HIT",
+ "pagination": {
+ "skip": 0,
+ "limit": 10
+ },
+ "testMode": false,
+ "requestedGranularity": "count"
+ }
+}
+```
+
+You can execute:
+
+```bash
+http POST http://localhost:5050/api/g_variants/ --json < request.json
+```
+
+But you can also use complex filters:
+
+```json
+{
+ "meta": {
+ "apiVersion": "2.0"
+ },
+ "query": {
+ "filters": [
+ {
+ "id": "UBERON:0001256",
+ "scope": "biosamples",
+ "includeDescendantTerms": false
+ }
+ ],
+ "includeResultsetResponses": "HIT",
+ "pagination": {
+ "skip": 0,
+ "limit": 10
+ },
+ "testMode": false,
+ "requestedGranularity": "count"
+ }
+}
+```
+
+You can execute:
+
+```bash
+http POST http://localhost:5050/api/biosamples/ --json < request.json
+```
+
+And it will use the ontology filter to filter the results.
diff --git a/deploy/beacon-realm.json b/deploy/beacon-realm.json
new file mode 100644
index 0000000..3f69ea9
--- /dev/null
+++ b/deploy/beacon-realm.json
@@ -0,0 +1,1938 @@
+{
+ "id" : "Beacon",
+ "realm" : "Beacon",
+ "displayName" : "Beacon IdP",
+ "notBefore" : 0,
+ "revokeRefreshToken" : false,
+ "refreshTokenMaxReuse" : 0,
+ "accessTokenLifespan" : 300,
+ "accessTokenLifespanForImplicitFlow" : 900,
+ "ssoSessionIdleTimeout" : 1800,
+ "ssoSessionMaxLifespan" : 36000,
+ "ssoSessionIdleTimeoutRememberMe" : 0,
+ "ssoSessionMaxLifespanRememberMe" : 0,
+ "offlineSessionIdleTimeout" : 2592000,
+ "offlineSessionMaxLifespanEnabled" : false,
+ "offlineSessionMaxLifespan" : 5184000,
+ "clientSessionIdleTimeout" : 0,
+ "clientSessionMaxLifespan" : 0,
+ "clientOfflineSessionIdleTimeout" : 0,
+ "clientOfflineSessionMaxLifespan" : 0,
+ "accessCodeLifespan" : 60,
+ "accessCodeLifespanUserAction" : 300,
+ "accessCodeLifespanLogin" : 1800,
+ "actionTokenGeneratedByAdminLifespan" : 43200,
+ "actionTokenGeneratedByUserLifespan" : 300,
+ "enabled" : true,
+ "sslRequired" : "external",
+ "registrationAllowed" : false,
+ "registrationEmailAsUsername" : false,
+ "rememberMe" : false,
+ "verifyEmail" : false,
+ "loginWithEmailAllowed" : true,
+ "duplicateEmailsAllowed" : false,
+ "resetPasswordAllowed" : false,
+ "editUsernameAllowed" : false,
+ "bruteForceProtected" : false,
+ "permanentLockout" : false,
+ "maxFailureWaitSeconds" : 900,
+ "minimumQuickLoginWaitSeconds" : 60,
+ "waitIncrementSeconds" : 60,
+ "quickLoginCheckMilliSeconds" : 1000,
+ "maxDeltaTimeSeconds" : 43200,
+ "failureFactor" : 30,
+ "roles" : {
+ "realm" : [ {
+ "id" : "2df9f16e-1525-48e6-9b99-0025becfc001",
+ "name" : "offline_access",
+ "description" : "${role_offline-access}",
+ "composite" : false,
+ "clientRole" : false,
+ "containerId" : "Beacon",
+ "attributes" : { }
+ }, {
+ "id" : "fac1fd59-414a-4404-9dad-5c8966d14702",
+ "name" : "uma_authorization",
+ "description" : "${role_uma_authorization}",
+ "composite" : false,
+ "clientRole" : false,
+ "containerId" : "Beacon",
+ "attributes" : { }
+ } ],
+ "client" : {
+ "realm-management" : [ {
+ "id" : "a1f10106-92b5-4f83-8c8e-803302f06003",
+ "name" : "manage-clients",
+ "description" : "${role_manage-clients}",
+ "composite" : false,
+ "clientRole" : true,
+ "containerId" : "f5aa5971-be11-4ca3-acdf-09404a58f846",
+ "attributes" : { }
+ }, {
+ "id" : "0bd797f8-c5a9-4d7f-bed6-ad4c104b185a",
+ "name" : "manage-users",
+ "description" : "${role_manage-users}",
+ "composite" : false,
+ "clientRole" : true,
+ "containerId" : "f5aa5971-be11-4ca3-acdf-09404a58f846",
+ "attributes" : { }
+ }, {
+ "id" : "1c3cb9d9-9605-4940-9bbd-5c856c4bfd22",
+ "name" : "create-client",
+ "description" : "${role_create-client}",
+ "composite" : false,
+ "clientRole" : true,
+ "containerId" : "f5aa5971-be11-4ca3-acdf-09404a58f846",
+ "attributes" : { }
+ }, {
+ "id" : "aac68b89-aeeb-450d-9f73-921fd98d0859",
+ "name" : "query-realms",
+ "description" : "${role_query-realms}",
+ "composite" : false,
+ "clientRole" : true,
+ "containerId" : "f5aa5971-be11-4ca3-acdf-09404a58f846",
+ "attributes" : { }
+ }, {
+ "id" : "30edc3ef-56de-4261-9901-bd19ba13edfb",
+ "name" : "impersonation",
+ "description" : "${role_impersonation}",
+ "composite" : false,
+ "clientRole" : true,
+ "containerId" : "f5aa5971-be11-4ca3-acdf-09404a58f846",
+ "attributes" : { }
+ }, {
+ "id" : "138e4838-9032-4dc6-80e9-cee6453830ff",
+ "name" : "manage-authorization",
+ "description" : "${role_manage-authorization}",
+ "composite" : false,
+ "clientRole" : true,
+ "containerId" : "f5aa5971-be11-4ca3-acdf-09404a58f846",
+ "attributes" : { }
+ }, {
+ "id" : "8bb5fda6-3b4a-4024-8a54-6d3a9094c109",
+ "name" : "manage-events",
+ "description" : "${role_manage-events}",
+ "composite" : false,
+ "clientRole" : true,
+ "containerId" : "f5aa5971-be11-4ca3-acdf-09404a58f846",
+ "attributes" : { }
+ }, {
+ "id" : "121804b4-c808-4690-bda6-342ea93da228",
+ "name" : "manage-identity-providers",
+ "description" : "${role_manage-identity-providers}",
+ "composite" : false,
+ "clientRole" : true,
+ "containerId" : "f5aa5971-be11-4ca3-acdf-09404a58f846",
+ "attributes" : { }
+ }, {
+ "id" : "0537f9ce-24dc-4ac5-9bca-ce475c62a8f6",
+ "name" : "view-identity-providers",
+ "description" : "${role_view-identity-providers}",
+ "composite" : false,
+ "clientRole" : true,
+ "containerId" : "f5aa5971-be11-4ca3-acdf-09404a58f846",
+ "attributes" : { }
+ }, {
+ "id" : "7a611915-c2f7-461a-966a-1197dbc1bf14",
+ "name" : "view-clients",
+ "description" : "${role_view-clients}",
+ "composite" : true,
+ "composites" : {
+ "client" : {
+ "realm-management" : [ "query-clients" ]
+ }
+ },
+ "clientRole" : true,
+ "containerId" : "f5aa5971-be11-4ca3-acdf-09404a58f846",
+ "attributes" : { }
+ }, {
+ "id" : "794db335-4616-41e0-ab5b-b72980fcbe85",
+ "name" : "query-groups",
+ "description" : "${role_query-groups}",
+ "composite" : false,
+ "clientRole" : true,
+ "containerId" : "f5aa5971-be11-4ca3-acdf-09404a58f846",
+ "attributes" : { }
+ }, {
+ "id" : "955ede29-6fd3-4841-9afc-e70f1a2436dd",
+ "name" : "realm-admin",
+ "description" : "${role_realm-admin}",
+ "composite" : true,
+ "composites" : {
+ "client" : {
+ "realm-management" : [ "manage-clients", "manage-users", "create-client", "query-realms", "impersonation", "manage-authorization", "manage-events", "manage-identity-providers", "view-identity-providers", "view-clients", "query-groups", "view-authorization", "query-users", "view-realm", "view-events", "manage-realm", "view-users", "query-clients" ]
+ }
+ },
+ "clientRole" : true,
+ "containerId" : "f5aa5971-be11-4ca3-acdf-09404a58f846",
+ "attributes" : { }
+ }, {
+ "id" : "cab184fc-c654-4265-8e50-a32b65ce31e4",
+ "name" : "view-authorization",
+ "description" : "${role_view-authorization}",
+ "composite" : false,
+ "clientRole" : true,
+ "containerId" : "f5aa5971-be11-4ca3-acdf-09404a58f846",
+ "attributes" : { }
+ }, {
+ "id" : "0e32f5b9-470d-4ceb-890e-fec18cbd4047",
+ "name" : "query-users",
+ "description" : "${role_query-users}",
+ "composite" : false,
+ "clientRole" : true,
+ "containerId" : "f5aa5971-be11-4ca3-acdf-09404a58f846",
+ "attributes" : { }
+ }, {
+ "id" : "60add9d9-2579-49c1-85fe-02dba7f6eb9a",
+ "name" : "view-realm",
+ "description" : "${role_view-realm}",
+ "composite" : false,
+ "clientRole" : true,
+ "containerId" : "f5aa5971-be11-4ca3-acdf-09404a58f846",
+ "attributes" : { }
+ }, {
+ "id" : "2644b82e-9c0c-4a43-a866-f3f1114b2ebd",
+ "name" : "view-events",
+ "description" : "${role_view-events}",
+ "composite" : false,
+ "clientRole" : true,
+ "containerId" : "f5aa5971-be11-4ca3-acdf-09404a58f846",
+ "attributes" : { }
+ }, {
+ "id" : "7340893f-91d2-4236-921f-dd2f6a12e90a",
+ "name" : "manage-realm",
+ "description" : "${role_manage-realm}",
+ "composite" : false,
+ "clientRole" : true,
+ "containerId" : "f5aa5971-be11-4ca3-acdf-09404a58f846",
+ "attributes" : { }
+ }, {
+ "id" : "de377fd2-965b-4051-85b3-917fc034d0dd",
+ "name" : "view-users",
+ "description" : "${role_view-users}",
+ "composite" : true,
+ "composites" : {
+ "client" : {
+ "realm-management" : [ "query-groups", "query-users" ]
+ }
+ },
+ "clientRole" : true,
+ "containerId" : "f5aa5971-be11-4ca3-acdf-09404a58f846",
+ "attributes" : { }
+ }, {
+ "id" : "b5c56d32-993d-4393-ae60-25ac65bba0d1",
+ "name" : "query-clients",
+ "description" : "${role_query-clients}",
+ "composite" : false,
+ "clientRole" : true,
+ "containerId" : "f5aa5971-be11-4ca3-acdf-09404a58f846",
+ "attributes" : { }
+ } ],
+ "beacon" : [ {
+ "id" : "22e1ab24-7e8f-4ce6-98d0-3313d96f395b",
+ "name" : "uma_protection",
+ "composite" : false,
+ "clientRole" : true,
+ "containerId" : "8a753a23-230d-4003-b0aa-cdca03c57b8d",
+ "attributes" : { }
+ } ],
+ "permissions" : [ ],
+ "security-admin-console" : [ ],
+ "admin-cli" : [ ],
+ "account-console" : [ ],
+ "broker" : [ {
+ "id" : "94cd5ba4-4585-46a1-8e4a-7f289f7f2c8a",
+ "name" : "read-token",
+ "description" : "${role_read-token}",
+ "composite" : false,
+ "clientRole" : true,
+ "containerId" : "61216acc-01da-4d8a-bd4d-b88c2b38686a",
+ "attributes" : { }
+ } ],
+ "account" : [ {
+ "id" : "a1a39879-ca59-4aa6-a4ae-cf7d836227ba",
+ "name" : "manage-account",
+ "description" : "${role_manage-account}",
+ "composite" : true,
+ "composites" : {
+ "client" : {
+ "account" : [ "manage-account-links" ]
+ }
+ },
+ "clientRole" : true,
+ "containerId" : "79fd7a63-8c74-44b5-91b2-6758c292930c",
+ "attributes" : { }
+ }, {
+ "id" : "9283fb4f-aa35-426a-82d1-c36421bbfa94",
+ "name" : "manage-consent",
+ "description" : "${role_manage-consent}",
+ "composite" : true,
+ "composites" : {
+ "client" : {
+ "account" : [ "view-consent" ]
+ }
+ },
+ "clientRole" : true,
+ "containerId" : "79fd7a63-8c74-44b5-91b2-6758c292930c",
+ "attributes" : { }
+ }, {
+ "id" : "539fcec1-7e97-4dee-b4cc-124c03358425",
+ "name" : "manage-account-links",
+ "description" : "${role_manage-account-links}",
+ "composite" : false,
+ "clientRole" : true,
+ "containerId" : "79fd7a63-8c74-44b5-91b2-6758c292930c",
+ "attributes" : { }
+ }, {
+ "id" : "99c69a76-0af6-443d-a60d-1da2bdf352df",
+ "name" : "view-applications",
+ "description" : "${role_view-applications}",
+ "composite" : false,
+ "clientRole" : true,
+ "containerId" : "79fd7a63-8c74-44b5-91b2-6758c292930c",
+ "attributes" : { }
+ }, {
+ "id" : "aadc367b-fde4-4cb7-81b1-0fb37689fbc3",
+ "name" : "view-consent",
+ "description" : "${role_view-consent}",
+ "composite" : false,
+ "clientRole" : true,
+ "containerId" : "79fd7a63-8c74-44b5-91b2-6758c292930c",
+ "attributes" : { }
+ }, {
+ "id" : "89b3f80c-32d0-496c-a021-54b7344c6029",
+ "name" : "view-profile",
+ "description" : "${role_view-profile}",
+ "composite" : false,
+ "clientRole" : true,
+ "containerId" : "79fd7a63-8c74-44b5-91b2-6758c292930c",
+ "attributes" : { }
+ } ]
+ }
+ },
+ "groups" : [ {
+ "id" : "7c359d85-e9d0-4437-8b6d-90f347686da1",
+ "name" : "beacon-users",
+ "path" : "/beacon-users",
+ "attributes" : { },
+ "realmRoles" : [ ],
+ "clientRoles" : { },
+ "subGroups" : [ ]
+ } ],
+ "defaultRoles" : [ "offline_access", "uma_authorization" ],
+ "defaultGroups" : [ "/beacon-users" ],
+ "requiredCredentials" : [ "password" ],
+ "otpPolicyType" : "totp",
+ "otpPolicyAlgorithm" : "HmacSHA1",
+ "otpPolicyInitialCounter" : 0,
+ "otpPolicyDigits" : 6,
+ "otpPolicyLookAheadWindow" : 1,
+ "otpPolicyPeriod" : 30,
+ "otpSupportedApplications" : [ "FreeOTP", "Google Authenticator" ],
+ "webAuthnPolicyRpEntityName" : "keycloak",
+ "webAuthnPolicySignatureAlgorithms" : [ "ES256" ],
+ "webAuthnPolicyRpId" : "",
+ "webAuthnPolicyAttestationConveyancePreference" : "not specified",
+ "webAuthnPolicyAuthenticatorAttachment" : "not specified",
+ "webAuthnPolicyRequireResidentKey" : "not specified",
+ "webAuthnPolicyUserVerificationRequirement" : "not specified",
+ "webAuthnPolicyCreateTimeout" : 0,
+ "webAuthnPolicyAvoidSameAuthenticatorRegister" : false,
+ "webAuthnPolicyAcceptableAaguids" : [ ],
+ "webAuthnPolicyPasswordlessRpEntityName" : "keycloak",
+ "webAuthnPolicyPasswordlessSignatureAlgorithms" : [ "ES256" ],
+ "webAuthnPolicyPasswordlessRpId" : "",
+ "webAuthnPolicyPasswordlessAttestationConveyancePreference" : "not specified",
+ "webAuthnPolicyPasswordlessAuthenticatorAttachment" : "not specified",
+ "webAuthnPolicyPasswordlessRequireResidentKey" : "not specified",
+ "webAuthnPolicyPasswordlessUserVerificationRequirement" : "not specified",
+ "webAuthnPolicyPasswordlessCreateTimeout" : 0,
+ "webAuthnPolicyPasswordlessAvoidSameAuthenticatorRegister" : false,
+ "webAuthnPolicyPasswordlessAcceptableAaguids" : [ ],
+ "users" : [ {
+ "id" : "47eff1b1-7621-4570-a0bb-01a719fba0a2",
+ "createdTimestamp" : 1598453205967,
+ "username" : "jane",
+ "enabled" : true,
+ "totp" : false,
+ "emailVerified" : false,
+ "firstName" : "Jane",
+ "lastName" : "Smith",
+ "email" : "jane.smith@beacon.ga4gh",
+ "credentials" : [ {
+ "id" : "7e296b71-a7c0-47de-91fb-d33f014f99c8",
+ "type" : "password",
+ "createdDate" : 1598453835625,
+ "secretData" : "{\"value\":\"BIJ/DUkfa56KUsZQFU/C8RLbIv1C8sJ74HJcQv2A+iPSuMl0UHULWtkIeXfHPiOU+od/K0N1ugYxGqlfReHrwg==\",\"salt\":\"lDP6qAYsN+bZCFAn3trSwA==\"}",
+ "credentialData" : "{\"hashIterations\":27500,\"algorithm\":\"pbkdf2-sha256\"}"
+ } ],
+ "disableableCredentialTypes" : [ ],
+ "requiredActions" : [ ],
+ "realmRoles" : [ "offline_access", "uma_authorization" ],
+ "clientRoles" : {
+ "account" : [ "manage-account", "view-profile" ]
+ },
+ "notBefore" : 0,
+ "groups" : [ "/beacon-users" ]
+ }, {
+ "id" : "8718f980-47bc-4be6-9390-a01343eed37d",
+ "createdTimestamp" : 1598453171030,
+ "username" : "john",
+ "enabled" : true,
+ "totp" : false,
+ "emailVerified" : false,
+ "firstName" : "John",
+ "lastName" : "Smith",
+ "email" : "john.smith@beacon.ga4gh",
+ "credentials" : [ {
+ "id" : "ac14b184-797f-4f85-bbb7-582f2f3f5727",
+ "type" : "password",
+ "createdDate" : 1598453805633,
+ "secretData" : "{\"value\":\"X3rvS//rfkmMAsUN7z6EhELbz6WvFXG/SNjMm8k4apa+PWiM9HhK1XcwlbKz6kSxT53MEph3LDU88v1BSxm/eg==\",\"salt\":\"5Eu8VQejJtAi9t1jHd5KLA==\"}",
+ "credentialData" : "{\"hashIterations\":27500,\"algorithm\":\"pbkdf2-sha256\"}"
+ } ],
+ "disableableCredentialTypes" : [ ],
+ "requiredActions" : [ ],
+ "realmRoles" : [ "offline_access", "uma_authorization" ],
+ "clientRoles" : {
+ "account" : [ "manage-account", "view-profile" ]
+ },
+ "notBefore" : 0,
+ "groups" : [ "/beacon-users" ]
+ } ],
+ "scopeMappings" : [ {
+ "clientScope" : "offline_access",
+ "roles" : [ "offline_access" ]
+ } ],
+ "clientScopeMappings" : {
+ "account" : [ {
+ "client" : "account-console",
+ "roles" : [ "manage-account" ]
+ } ]
+ },
+ "clients" : [ {
+ "id" : "79fd7a63-8c74-44b5-91b2-6758c292930c",
+ "clientId" : "account",
+ "name" : "${client_account}",
+ "rootUrl" : "${authBaseUrl}",
+ "baseUrl" : "/realms/Beacon/account/",
+ "surrogateAuthRequired" : false,
+ "enabled" : true,
+ "alwaysDisplayInConsole" : false,
+ "clientAuthenticatorType" : "client-secret",
+ "secret" : "**********",
+ "defaultRoles" : [ "manage-account", "view-profile" ],
+ "redirectUris" : [ "/realms/Beacon/account/*" ],
+ "webOrigins" : [ ],
+ "notBefore" : 0,
+ "bearerOnly" : false,
+ "consentRequired" : false,
+ "standardFlowEnabled" : true,
+ "implicitFlowEnabled" : false,
+ "directAccessGrantsEnabled" : false,
+ "serviceAccountsEnabled" : false,
+ "publicClient" : false,
+ "frontchannelLogout" : false,
+ "protocol" : "openid-connect",
+ "attributes" : { },
+ "authenticationFlowBindingOverrides" : { },
+ "fullScopeAllowed" : false,
+ "nodeReRegistrationTimeout" : 0,
+ "defaultClientScopes" : [ "web-origins", "role_list", "profile", "roles", "email" ],
+ "optionalClientScopes" : [ "address", "phone", "offline_access", "microprofile-jwt" ]
+ }, {
+ "id" : "3cf6f41f-35f0-42a2-bce8-a054ef16ad9b",
+ "clientId" : "account-console",
+ "name" : "${client_account-console}",
+ "rootUrl" : "${authBaseUrl}",
+ "baseUrl" : "/realms/Beacon/account/",
+ "surrogateAuthRequired" : false,
+ "enabled" : true,
+ "alwaysDisplayInConsole" : false,
+ "clientAuthenticatorType" : "client-secret",
+ "secret" : "**********",
+ "redirectUris" : [ "/realms/Beacon/account/*" ],
+ "webOrigins" : [ ],
+ "notBefore" : 0,
+ "bearerOnly" : false,
+ "consentRequired" : false,
+ "standardFlowEnabled" : true,
+ "implicitFlowEnabled" : false,
+ "directAccessGrantsEnabled" : false,
+ "serviceAccountsEnabled" : false,
+ "publicClient" : true,
+ "frontchannelLogout" : false,
+ "protocol" : "openid-connect",
+ "attributes" : {
+ "pkce.code.challenge.method" : "S256"
+ },
+ "authenticationFlowBindingOverrides" : { },
+ "fullScopeAllowed" : false,
+ "nodeReRegistrationTimeout" : 0,
+ "protocolMappers" : [ {
+ "id" : "a511954d-5d75-492d-bb7a-f22a185eea67",
+ "name" : "audience resolve",
+ "protocol" : "openid-connect",
+ "protocolMapper" : "oidc-audience-resolve-mapper",
+ "consentRequired" : false,
+ "config" : { }
+ } ],
+ "defaultClientScopes" : [ "web-origins", "role_list", "profile", "roles", "email" ],
+ "optionalClientScopes" : [ "address", "phone", "offline_access", "microprofile-jwt" ]
+ }, {
+ "id" : "2972da43-8cb0-4568-aca8-997a60f70e3d",
+ "clientId" : "admin-cli",
+ "name" : "${client_admin-cli}",
+ "surrogateAuthRequired" : false,
+ "enabled" : true,
+ "alwaysDisplayInConsole" : false,
+ "clientAuthenticatorType" : "client-secret",
+ "secret" : "**********",
+ "redirectUris" : [ ],
+ "webOrigins" : [ ],
+ "notBefore" : 0,
+ "bearerOnly" : false,
+ "consentRequired" : false,
+ "standardFlowEnabled" : false,
+ "implicitFlowEnabled" : false,
+ "directAccessGrantsEnabled" : true,
+ "serviceAccountsEnabled" : false,
+ "publicClient" : true,
+ "frontchannelLogout" : false,
+ "protocol" : "openid-connect",
+ "attributes" : { },
+ "authenticationFlowBindingOverrides" : { },
+ "fullScopeAllowed" : false,
+ "nodeReRegistrationTimeout" : 0,
+ "defaultClientScopes" : [ "web-origins", "role_list", "profile", "roles", "email" ],
+ "optionalClientScopes" : [ "address", "phone", "offline_access", "microprofile-jwt" ]
+ }, {
+ "id" : "8a753a23-230d-4003-b0aa-cdca03c57b8d",
+ "clientId" : "beacon",
+ "name" : "Beacon",
+ "description" : "Demo Beacon",
+ "baseUrl" : "http://beacon:5050",
+ "surrogateAuthRequired" : false,
+ "enabled" : true,
+ "alwaysDisplayInConsole" : false,
+ "clientAuthenticatorType" : "client-secret",
+ "secret" : "b26ca0f9-1137-4bee-b453-ee51eefbe7ba",
+ "redirectUris" : [ "http://beacon:5050/*" ],
+ "webOrigins" : [ ],
+ "notBefore" : 0,
+ "bearerOnly" : false,
+ "consentRequired" : false,
+ "standardFlowEnabled" : true,
+ "implicitFlowEnabled" : false,
+ "directAccessGrantsEnabled" : true,
+ "serviceAccountsEnabled" : false,
+ "publicClient" : false,
+ "frontchannelLogout" : false,
+ "protocol" : "openid-connect",
+ "attributes" : {
+ "saml.assertion.signature" : "false",
+ "saml.force.post.binding" : "false",
+ "saml.multivalued.roles" : "false",
+ "saml.encrypt" : "false",
+ "saml.server.signature" : "false",
+ "saml.server.signature.keyinfo.ext" : "false",
+ "exclude.session.state.from.auth.response" : "false",
+ "saml_force_name_id_format" : "false",
+ "saml.client.signature" : "false",
+ "tls.client.certificate.bound.access.tokens" : "false",
+ "saml.authnstatement" : "false",
+ "display.on.consent.screen" : "false",
+ "saml.onetimeuse.condition" : "false"
+ },
+ "authenticationFlowBindingOverrides" : { },
+ "fullScopeAllowed" : true,
+ "nodeReRegistrationTimeout" : -1,
+ "protocolMappers" : [ {
+ "id" : "6d5cf9b1-90f3-4984-a654-17b0bf16975a",
+ "name" : "Client Host",
+ "protocol" : "openid-connect",
+ "protocolMapper" : "oidc-usersessionmodel-note-mapper",
+ "consentRequired" : false,
+ "config" : {
+ "user.session.note" : "clientHost",
+ "userinfo.token.claim" : "true",
+ "id.token.claim" : "true",
+ "access.token.claim" : "true",
+ "claim.name" : "clientHost",
+ "jsonType.label" : "String"
+ }
+ }, {
+ "id" : "5e4d9971-efdb-4bab-ba8a-10ea9b95d716",
+ "name" : "Client ID",
+ "protocol" : "openid-connect",
+ "protocolMapper" : "oidc-usersessionmodel-note-mapper",
+ "consentRequired" : false,
+ "config" : {
+ "user.session.note" : "clientId",
+ "userinfo.token.claim" : "true",
+ "id.token.claim" : "true",
+ "access.token.claim" : "true",
+ "claim.name" : "clientId",
+ "jsonType.label" : "String"
+ }
+ }, {
+ "id" : "de72c9ab-d9b5-48a8-936f-801120d2a449",
+ "name" : "given name",
+ "protocol" : "openid-connect",
+ "protocolMapper" : "oidc-usermodel-property-mapper",
+ "consentRequired" : false,
+ "config" : {
+ "userinfo.token.claim" : "true",
+ "user.attribute" : "firstName",
+ "id.token.claim" : "true",
+ "access.token.claim" : "true",
+ "claim.name" : "given_name",
+ "jsonType.label" : "String"
+ }
+ }, {
+ "id" : "751c9280-6c3e-4f3c-a014-4573dbb4bd1c",
+ "name" : "family name",
+ "protocol" : "openid-connect",
+ "protocolMapper" : "oidc-usermodel-property-mapper",
+ "consentRequired" : false,
+ "config" : {
+ "userinfo.token.claim" : "true",
+ "user.attribute" : "lastName",
+ "id.token.claim" : "true",
+ "access.token.claim" : "true",
+ "claim.name" : "family_name",
+ "jsonType.label" : "String"
+ }
+ }, {
+ "id" : "71bb92a2-9157-4393-8109-32fb0c9b4925",
+ "name" : "profile",
+ "protocol" : "openid-connect",
+ "protocolMapper" : "oidc-usermodel-attribute-mapper",
+ "consentRequired" : false,
+ "config" : {
+ "userinfo.token.claim" : "true",
+ "user.attribute" : "profile",
+ "id.token.claim" : "true",
+ "access.token.claim" : "true",
+ "claim.name" : "profile",
+ "jsonType.label" : "String"
+ }
+ }, {
+ "id" : "a7eea6fb-85d6-4fe5-a2e1-c1fa9a33e5c2",
+ "name" : "picture",
+ "protocol" : "openid-connect",
+ "protocolMapper" : "oidc-usermodel-attribute-mapper",
+ "consentRequired" : false,
+ "config" : {
+ "userinfo.token.claim" : "true",
+ "user.attribute" : "picture",
+ "id.token.claim" : "true",
+ "access.token.claim" : "true",
+ "claim.name" : "picture",
+ "jsonType.label" : "String"
+ }
+ }, {
+ "id" : "40c90763-a47e-4ae2-9818-1598f4a546d7",
+ "name" : "email",
+ "protocol" : "openid-connect",
+ "protocolMapper" : "oidc-usermodel-property-mapper",
+ "consentRequired" : false,
+ "config" : {
+ "userinfo.token.claim" : "true",
+ "user.attribute" : "email",
+ "id.token.claim" : "true",
+ "access.token.claim" : "true",
+ "claim.name" : "email",
+ "jsonType.label" : "String"
+ }
+ }, {
+ "id" : "fb04c2ad-c08a-4028-b3a7-996a6269b274",
+ "name" : "groups",
+ "protocol" : "openid-connect",
+ "protocolMapper" : "oidc-usermodel-realm-role-mapper",
+ "consentRequired" : false,
+ "config" : {
+ "multivalued" : "true",
+ "userinfo.token.claim" : "true",
+ "user.attribute" : "foo",
+ "id.token.claim" : "true",
+ "access.token.claim" : "true",
+ "claim.name" : "groups",
+ "jsonType.label" : "String"
+ }
+ }, {
+ "id" : "49e41be7-9faf-4016-be3e-5c6c862001e6",
+ "name" : "Client IP Address",
+ "protocol" : "openid-connect",
+ "protocolMapper" : "oidc-usersessionmodel-note-mapper",
+ "consentRequired" : false,
+ "config" : {
+ "user.session.note" : "clientAddress",
+ "userinfo.token.claim" : "true",
+ "id.token.claim" : "true",
+ "access.token.claim" : "true",
+ "claim.name" : "clientAddress",
+ "jsonType.label" : "String"
+ }
+ }, {
+ "id" : "9efffa4e-dcfd-4177-b300-ba1ad534d799",
+ "name" : "nickname",
+ "protocol" : "openid-connect",
+ "protocolMapper" : "oidc-usermodel-attribute-mapper",
+ "consentRequired" : false,
+ "config" : {
+ "userinfo.token.claim" : "true",
+ "user.attribute" : "nickname",
+ "id.token.claim" : "true",
+ "access.token.claim" : "true",
+ "claim.name" : "nickname",
+ "jsonType.label" : "String"
+ }
+ }, {
+ "id" : "4d664844-ca38-4a96-906e-f9fe3fda5b2d",
+ "name" : "username",
+ "protocol" : "openid-connect",
+ "protocolMapper" : "oidc-usermodel-property-mapper",
+ "consentRequired" : false,
+ "config" : {
+ "userinfo.token.claim" : "true",
+ "user.attribute" : "username",
+ "id.token.claim" : "true",
+ "access.token.claim" : "true",
+ "claim.name" : "preferred_username",
+ "jsonType.label" : "String"
+ }
+ } ],
+ "defaultClientScopes" : [ "role_list", "profile", "microprofile-jwt", "email" ],
+ "optionalClientScopes" : [ ]
+ }, {
+ "id" : "61216acc-01da-4d8a-bd4d-b88c2b38686a",
+ "clientId" : "broker",
+ "name" : "${client_broker}",
+ "surrogateAuthRequired" : false,
+ "enabled" : true,
+ "alwaysDisplayInConsole" : false,
+ "clientAuthenticatorType" : "client-secret",
+ "secret" : "**********",
+ "redirectUris" : [ ],
+ "webOrigins" : [ ],
+ "notBefore" : 0,
+ "bearerOnly" : false,
+ "consentRequired" : false,
+ "standardFlowEnabled" : true,
+ "implicitFlowEnabled" : false,
+ "directAccessGrantsEnabled" : false,
+ "serviceAccountsEnabled" : false,
+ "publicClient" : false,
+ "frontchannelLogout" : false,
+ "protocol" : "openid-connect",
+ "attributes" : { },
+ "authenticationFlowBindingOverrides" : { },
+ "fullScopeAllowed" : false,
+ "nodeReRegistrationTimeout" : 0,
+ "defaultClientScopes" : [ "web-origins", "role_list", "profile", "roles", "email" ],
+ "optionalClientScopes" : [ "address", "phone", "offline_access", "microprofile-jwt" ]
+ }, {
+ "id" : "ef278d04-53c6-4b4f-ae93-0aec719f84dd",
+ "clientId" : "permissions",
+ "name" : "Beacon Permissions",
+ "adminUrl" : "http://beacon-permissions",
+ "surrogateAuthRequired" : false,
+ "enabled" : true,
+ "alwaysDisplayInConsole" : false,
+ "clientAuthenticatorType" : "client-secret",
+ "secret" : "c0285717-1bfb-4b32-b01d-d663470ce7c4",
+ "redirectUris" : [ ],
+ "webOrigins" : [ ],
+ "notBefore" : 0,
+ "bearerOnly" : true,
+ "consentRequired" : false,
+ "standardFlowEnabled" : true,
+ "implicitFlowEnabled" : false,
+ "directAccessGrantsEnabled" : true,
+ "serviceAccountsEnabled" : false,
+ "publicClient" : false,
+ "frontchannelLogout" : false,
+ "protocol" : "openid-connect",
+ "attributes" : {
+ "saml.assertion.signature" : "false",
+ "saml.force.post.binding" : "false",
+ "saml.multivalued.roles" : "false",
+ "saml.encrypt" : "false",
+ "saml.server.signature" : "false",
+ "saml.server.signature.keyinfo.ext" : "false",
+ "exclude.session.state.from.auth.response" : "false",
+ "saml_force_name_id_format" : "false",
+ "saml.client.signature" : "false",
+ "tls.client.certificate.bound.access.tokens" : "false",
+ "saml.authnstatement" : "false",
+ "display.on.consent.screen" : "false",
+ "saml.onetimeuse.condition" : "false"
+ },
+ "authenticationFlowBindingOverrides" : { },
+ "fullScopeAllowed" : true,
+ "nodeReRegistrationTimeout" : -1,
+ "defaultClientScopes" : [ "web-origins", "role_list", "profile", "roles", "email" ],
+ "optionalClientScopes" : [ "address", "phone", "offline_access", "microprofile-jwt" ]
+ }, {
+ "id" : "f5aa5971-be11-4ca3-acdf-09404a58f846",
+ "clientId" : "realm-management",
+ "name" : "${client_realm-management}",
+ "surrogateAuthRequired" : false,
+ "enabled" : true,
+ "alwaysDisplayInConsole" : false,
+ "clientAuthenticatorType" : "client-secret",
+ "secret" : "**********",
+ "redirectUris" : [ ],
+ "webOrigins" : [ ],
+ "notBefore" : 0,
+ "bearerOnly" : true,
+ "consentRequired" : false,
+ "standardFlowEnabled" : true,
+ "implicitFlowEnabled" : false,
+ "directAccessGrantsEnabled" : false,
+ "serviceAccountsEnabled" : false,
+ "publicClient" : false,
+ "frontchannelLogout" : false,
+ "protocol" : "openid-connect",
+ "attributes" : { },
+ "authenticationFlowBindingOverrides" : { },
+ "fullScopeAllowed" : false,
+ "nodeReRegistrationTimeout" : 0,
+ "defaultClientScopes" : [ "web-origins", "role_list", "profile", "roles", "email" ],
+ "optionalClientScopes" : [ "address", "phone", "offline_access", "microprofile-jwt" ]
+ }, {
+ "id" : "0f1f4a6b-4f48-406e-8ec8-7b5329403a6e",
+ "clientId" : "security-admin-console",
+ "name" : "${client_security-admin-console}",
+ "rootUrl" : "${authAdminUrl}",
+ "baseUrl" : "/admin/Beacon/console/",
+ "surrogateAuthRequired" : false,
+ "enabled" : true,
+ "alwaysDisplayInConsole" : false,
+ "clientAuthenticatorType" : "client-secret",
+ "secret" : "**********",
+ "redirectUris" : [ "/admin/Beacon/console/*" ],
+ "webOrigins" : [ "+" ],
+ "notBefore" : 0,
+ "bearerOnly" : false,
+ "consentRequired" : false,
+ "standardFlowEnabled" : true,
+ "implicitFlowEnabled" : false,
+ "directAccessGrantsEnabled" : false,
+ "serviceAccountsEnabled" : false,
+ "publicClient" : true,
+ "frontchannelLogout" : false,
+ "protocol" : "openid-connect",
+ "attributes" : {
+ "pkce.code.challenge.method" : "S256"
+ },
+ "authenticationFlowBindingOverrides" : { },
+ "fullScopeAllowed" : false,
+ "nodeReRegistrationTimeout" : 0,
+ "protocolMappers" : [ {
+ "id" : "e1c5d474-7edc-4ccb-9d59-13df4f1d5dc0",
+ "name" : "locale",
+ "protocol" : "openid-connect",
+ "protocolMapper" : "oidc-usermodel-attribute-mapper",
+ "consentRequired" : false,
+ "config" : {
+ "userinfo.token.claim" : "true",
+ "user.attribute" : "locale",
+ "id.token.claim" : "true",
+ "access.token.claim" : "true",
+ "claim.name" : "locale",
+ "jsonType.label" : "String"
+ }
+ } ],
+ "defaultClientScopes" : [ "web-origins", "role_list", "profile", "roles", "email" ],
+ "optionalClientScopes" : [ "address", "phone", "offline_access", "microprofile-jwt" ]
+ } ],
+ "clientScopes" : [ {
+ "id" : "435ee055-d511-40e2-a4cd-43ee57d7b244",
+ "name" : "offline_access",
+ "description" : "OpenID Connect built-in scope: offline_access",
+ "protocol" : "openid-connect",
+ "attributes" : {
+ "consent.screen.text" : "${offlineAccessScopeConsentText}",
+ "display.on.consent.screen" : "true"
+ }
+ }, {
+ "id" : "d5cbff9b-1e97-444d-b772-eae9c283788c",
+ "name" : "role_list",
+ "description" : "SAML role list",
+ "protocol" : "saml",
+ "attributes" : {
+ "consent.screen.text" : "${samlRoleListScopeConsentText}",
+ "display.on.consent.screen" : "true"
+ },
+ "protocolMappers" : [ {
+ "id" : "b0a7f711-315f-4311-9d49-279392aa9ce0",
+ "name" : "role list",
+ "protocol" : "saml",
+ "protocolMapper" : "saml-role-list-mapper",
+ "consentRequired" : false,
+ "config" : {
+ "single" : "false",
+ "attribute.nameformat" : "Basic",
+ "attribute.name" : "Role"
+ }
+ } ]
+ }, {
+ "id" : "53d0f60a-9b81-4250-ad44-de7afc4bae90",
+ "name" : "profile",
+ "description" : "OpenID Connect built-in scope: profile",
+ "protocol" : "openid-connect",
+ "attributes" : {
+ "include.in.token.scope" : "true",
+ "display.on.consent.screen" : "true",
+ "consent.screen.text" : "${profileScopeConsentText}"
+ },
+ "protocolMappers" : [ {
+ "id" : "62019f78-a48e-4ad1-bb22-5036ddc7f329",
+ "name" : "gender",
+ "protocol" : "openid-connect",
+ "protocolMapper" : "oidc-usermodel-attribute-mapper",
+ "consentRequired" : false,
+ "config" : {
+ "userinfo.token.claim" : "true",
+ "user.attribute" : "gender",
+ "id.token.claim" : "true",
+ "access.token.claim" : "true",
+ "claim.name" : "gender",
+ "jsonType.label" : "String"
+ }
+ }, {
+ "id" : "230fc610-50a7-4e3b-8438-e0c962cef686",
+ "name" : "nickname",
+ "protocol" : "openid-connect",
+ "protocolMapper" : "oidc-usermodel-attribute-mapper",
+ "consentRequired" : false,
+ "config" : {
+ "userinfo.token.claim" : "true",
+ "user.attribute" : "nickname",
+ "id.token.claim" : "true",
+ "access.token.claim" : "true",
+ "claim.name" : "nickname",
+ "jsonType.label" : "String"
+ }
+ }, {
+ "id" : "b1f0d13a-e1bf-4223-b819-041d5fa7ac93",
+ "name" : "username",
+ "protocol" : "openid-connect",
+ "protocolMapper" : "oidc-usermodel-property-mapper",
+ "consentRequired" : false,
+ "config" : {
+ "userinfo.token.claim" : "true",
+ "user.attribute" : "username",
+ "id.token.claim" : "true",
+ "access.token.claim" : "true",
+ "claim.name" : "preferred_username",
+ "jsonType.label" : "String"
+ }
+ }, {
+ "id" : "e2300d7d-6e86-4fb5-82c1-3e447f7e2ed0",
+ "name" : "full name",
+ "protocol" : "openid-connect",
+ "protocolMapper" : "oidc-full-name-mapper",
+ "consentRequired" : false,
+ "config" : {
+ "id.token.claim" : "true",
+ "access.token.claim" : "true",
+ "userinfo.token.claim" : "true"
+ }
+ }, {
+ "id" : "1754c79c-096b-4709-b472-5b1af0bb9826",
+ "name" : "website",
+ "protocol" : "openid-connect",
+ "protocolMapper" : "oidc-usermodel-attribute-mapper",
+ "consentRequired" : false,
+ "config" : {
+ "userinfo.token.claim" : "true",
+ "user.attribute" : "website",
+ "id.token.claim" : "true",
+ "access.token.claim" : "true",
+ "claim.name" : "website",
+ "jsonType.label" : "String"
+ }
+ }, {
+ "id" : "8d6a602c-7a2b-4974-84a9-6be65b805812",
+ "name" : "family name",
+ "protocol" : "openid-connect",
+ "protocolMapper" : "oidc-usermodel-property-mapper",
+ "consentRequired" : false,
+ "config" : {
+ "userinfo.token.claim" : "true",
+ "user.attribute" : "lastName",
+ "id.token.claim" : "true",
+ "access.token.claim" : "true",
+ "claim.name" : "family_name",
+ "jsonType.label" : "String"
+ }
+ }, {
+ "id" : "8a9a6c4b-7307-42cb-83d7-bafd24cf3bf8",
+ "name" : "picture",
+ "protocol" : "openid-connect",
+ "protocolMapper" : "oidc-usermodel-attribute-mapper",
+ "consentRequired" : false,
+ "config" : {
+ "userinfo.token.claim" : "true",
+ "user.attribute" : "picture",
+ "id.token.claim" : "true",
+ "access.token.claim" : "true",
+ "claim.name" : "picture",
+ "jsonType.label" : "String"
+ }
+ }, {
+ "id" : "5ce0b39c-6d26-4a5f-bbbd-370f7463ba7d",
+ "name" : "zoneinfo",
+ "protocol" : "openid-connect",
+ "protocolMapper" : "oidc-usermodel-attribute-mapper",
+ "consentRequired" : false,
+ "config" : {
+ "userinfo.token.claim" : "true",
+ "user.attribute" : "zoneinfo",
+ "id.token.claim" : "true",
+ "access.token.claim" : "true",
+ "claim.name" : "zoneinfo",
+ "jsonType.label" : "String"
+ }
+ }, {
+ "id" : "27427bea-0fce-4951-ace6-511028d71bc5",
+ "name" : "updated at",
+ "protocol" : "openid-connect",
+ "protocolMapper" : "oidc-usermodel-attribute-mapper",
+ "consentRequired" : false,
+ "config" : {
+ "userinfo.token.claim" : "true",
+ "user.attribute" : "updatedAt",
+ "id.token.claim" : "true",
+ "access.token.claim" : "true",
+ "claim.name" : "updated_at",
+ "jsonType.label" : "String"
+ }
+ }, {
+ "id" : "fca33576-a310-4fc1-9da6-3b6b719c144e",
+ "name" : "locale",
+ "protocol" : "openid-connect",
+ "protocolMapper" : "oidc-usermodel-attribute-mapper",
+ "consentRequired" : false,
+ "config" : {
+ "userinfo.token.claim" : "true",
+ "user.attribute" : "locale",
+ "id.token.claim" : "true",
+ "access.token.claim" : "true",
+ "claim.name" : "locale",
+ "jsonType.label" : "String"
+ }
+ }, {
+ "id" : "93f997a6-509e-471d-9b74-6bdcb614e6fa",
+ "name" : "birthdate",
+ "protocol" : "openid-connect",
+ "protocolMapper" : "oidc-usermodel-attribute-mapper",
+ "consentRequired" : false,
+ "config" : {
+ "userinfo.token.claim" : "true",
+ "user.attribute" : "birthdate",
+ "id.token.claim" : "true",
+ "access.token.claim" : "true",
+ "claim.name" : "birthdate",
+ "jsonType.label" : "String"
+ }
+ }, {
+ "id" : "21eaa433-da47-4835-8c32-16ad1215aa5f",
+ "name" : "middle name",
+ "protocol" : "openid-connect",
+ "protocolMapper" : "oidc-usermodel-attribute-mapper",
+ "consentRequired" : false,
+ "config" : {
+ "userinfo.token.claim" : "true",
+ "user.attribute" : "middleName",
+ "id.token.claim" : "true",
+ "access.token.claim" : "true",
+ "claim.name" : "middle_name",
+ "jsonType.label" : "String"
+ }
+ }, {
+ "id" : "f884e878-1808-4786-ac1c-c548e847f0e4",
+ "name" : "profile",
+ "protocol" : "openid-connect",
+ "protocolMapper" : "oidc-usermodel-attribute-mapper",
+ "consentRequired" : false,
+ "config" : {
+ "userinfo.token.claim" : "true",
+ "user.attribute" : "profile",
+ "id.token.claim" : "true",
+ "access.token.claim" : "true",
+ "claim.name" : "profile",
+ "jsonType.label" : "String"
+ }
+ }, {
+ "id" : "56471621-4c26-44bd-856f-92390502e30a",
+ "name" : "given name",
+ "protocol" : "openid-connect",
+ "protocolMapper" : "oidc-usermodel-property-mapper",
+ "consentRequired" : false,
+ "config" : {
+ "userinfo.token.claim" : "true",
+ "user.attribute" : "firstName",
+ "id.token.claim" : "true",
+ "access.token.claim" : "true",
+ "claim.name" : "given_name",
+ "jsonType.label" : "String"
+ }
+ } ]
+ }, {
+ "id" : "c85970c9-0b07-428e-b6ad-39f85e35b9a0",
+ "name" : "email",
+ "description" : "OpenID Connect built-in scope: email",
+ "protocol" : "openid-connect",
+ "attributes" : {
+ "include.in.token.scope" : "true",
+ "display.on.consent.screen" : "true",
+ "consent.screen.text" : "${emailScopeConsentText}"
+ },
+ "protocolMappers" : [ {
+ "id" : "b212389d-bd7b-495b-aa8b-5548fb169301",
+ "name" : "email verified",
+ "protocol" : "openid-connect",
+ "protocolMapper" : "oidc-usermodel-property-mapper",
+ "consentRequired" : false,
+ "config" : {
+ "userinfo.token.claim" : "true",
+ "user.attribute" : "emailVerified",
+ "id.token.claim" : "true",
+ "access.token.claim" : "true",
+ "claim.name" : "email_verified",
+ "jsonType.label" : "boolean"
+ }
+ }, {
+ "id" : "1dbb047e-94d4-490b-b1f2-4eb0d58683a8",
+ "name" : "email",
+ "protocol" : "openid-connect",
+ "protocolMapper" : "oidc-usermodel-property-mapper",
+ "consentRequired" : false,
+ "config" : {
+ "userinfo.token.claim" : "true",
+ "user.attribute" : "email",
+ "id.token.claim" : "true",
+ "access.token.claim" : "true",
+ "claim.name" : "email",
+ "jsonType.label" : "String"
+ }
+ } ]
+ }, {
+ "id" : "33ca96d2-6623-471e-ada7-64e8d32b0a82",
+ "name" : "address",
+ "description" : "OpenID Connect built-in scope: address",
+ "protocol" : "openid-connect",
+ "attributes" : {
+ "include.in.token.scope" : "true",
+ "display.on.consent.screen" : "true",
+ "consent.screen.text" : "${addressScopeConsentText}"
+ },
+ "protocolMappers" : [ {
+ "id" : "76fece78-a315-420a-a7ba-73d9cd7bf407",
+ "name" : "address",
+ "protocol" : "openid-connect",
+ "protocolMapper" : "oidc-address-mapper",
+ "consentRequired" : false,
+ "config" : {
+ "user.attribute.formatted" : "formatted",
+ "user.attribute.country" : "country",
+ "user.attribute.postal_code" : "postal_code",
+ "userinfo.token.claim" : "true",
+ "user.attribute.street" : "street",
+ "id.token.claim" : "true",
+ "user.attribute.region" : "region",
+ "access.token.claim" : "true",
+ "user.attribute.locality" : "locality"
+ }
+ } ]
+ }, {
+ "id" : "f60f8df2-69a3-4bef-a92f-2414ce41dc97",
+ "name" : "phone",
+ "description" : "OpenID Connect built-in scope: phone",
+ "protocol" : "openid-connect",
+ "attributes" : {
+ "include.in.token.scope" : "true",
+ "display.on.consent.screen" : "true",
+ "consent.screen.text" : "${phoneScopeConsentText}"
+ },
+ "protocolMappers" : [ {
+ "id" : "002e7fdf-1b16-44d9-94fd-cb48b3935f08",
+ "name" : "phone number",
+ "protocol" : "openid-connect",
+ "protocolMapper" : "oidc-usermodel-attribute-mapper",
+ "consentRequired" : false,
+ "config" : {
+ "userinfo.token.claim" : "true",
+ "user.attribute" : "phoneNumber",
+ "id.token.claim" : "true",
+ "access.token.claim" : "true",
+ "claim.name" : "phone_number",
+ "jsonType.label" : "String"
+ }
+ }, {
+ "id" : "5865166d-9a6f-4135-89df-1c2b3c211f78",
+ "name" : "phone number verified",
+ "protocol" : "openid-connect",
+ "protocolMapper" : "oidc-usermodel-attribute-mapper",
+ "consentRequired" : false,
+ "config" : {
+ "userinfo.token.claim" : "true",
+ "user.attribute" : "phoneNumberVerified",
+ "id.token.claim" : "true",
+ "access.token.claim" : "true",
+ "claim.name" : "phone_number_verified",
+ "jsonType.label" : "boolean"
+ }
+ } ]
+ }, {
+ "id" : "f68013ac-4d64-4d8b-af14-b0f057598707",
+ "name" : "roles",
+ "description" : "OpenID Connect scope for add user roles to the access token",
+ "protocol" : "openid-connect",
+ "attributes" : {
+ "include.in.token.scope" : "false",
+ "display.on.consent.screen" : "true",
+ "consent.screen.text" : "${rolesScopeConsentText}"
+ },
+ "protocolMappers" : [ {
+ "id" : "72f6d9d8-4988-4117-80ee-a29ab6d25c44",
+ "name" : "audience resolve",
+ "protocol" : "openid-connect",
+ "protocolMapper" : "oidc-audience-resolve-mapper",
+ "consentRequired" : false,
+ "config" : { }
+ }, {
+ "id" : "f64a33fe-70ea-4ab2-9b7c-651537b687f4",
+ "name" : "client roles",
+ "protocol" : "openid-connect",
+ "protocolMapper" : "oidc-usermodel-client-role-mapper",
+ "consentRequired" : false,
+ "config" : {
+ "user.attribute" : "foo",
+ "access.token.claim" : "true",
+ "claim.name" : "resource_access.${client_id}.roles",
+ "jsonType.label" : "String",
+ "multivalued" : "true"
+ }
+ }, {
+ "id" : "801a390b-7f0b-406f-9428-4b6477f9a7be",
+ "name" : "realm roles",
+ "protocol" : "openid-connect",
+ "protocolMapper" : "oidc-usermodel-realm-role-mapper",
+ "consentRequired" : false,
+ "config" : {
+ "user.attribute" : "foo",
+ "access.token.claim" : "true",
+ "claim.name" : "realm_access.roles",
+ "jsonType.label" : "String",
+ "multivalued" : "true"
+ }
+ } ]
+ }, {
+ "id" : "73a42667-6266-4367-b907-00369d54ad2b",
+ "name" : "web-origins",
+ "description" : "OpenID Connect scope for add allowed web origins to the access token",
+ "protocol" : "openid-connect",
+ "attributes" : {
+ "include.in.token.scope" : "false",
+ "display.on.consent.screen" : "false",
+ "consent.screen.text" : ""
+ },
+ "protocolMappers" : [ {
+ "id" : "9355ebcb-d5e8-4876-b09c-141960318070",
+ "name" : "allowed web origins",
+ "protocol" : "openid-connect",
+ "protocolMapper" : "oidc-allowed-origins-mapper",
+ "consentRequired" : false,
+ "config" : { }
+ } ]
+ }, {
+ "id" : "a3bd3167-f7cf-4330-ab73-4c1115c1647e",
+ "name" : "microprofile-jwt",
+ "description" : "Microprofile - JWT built-in scope",
+ "protocol" : "openid-connect",
+ "attributes" : {
+ "include.in.token.scope" : "true",
+ "display.on.consent.screen" : "false"
+ },
+ "protocolMappers" : [ {
+ "id" : "aae18ed9-4b47-427f-9c72-78b158373b3b",
+ "name" : "groups",
+ "protocol" : "openid-connect",
+ "protocolMapper" : "oidc-usermodel-realm-role-mapper",
+ "consentRequired" : false,
+ "config" : {
+ "multivalued" : "true",
+ "userinfo.token.claim" : "true",
+ "user.attribute" : "foo",
+ "id.token.claim" : "true",
+ "access.token.claim" : "true",
+ "claim.name" : "groups",
+ "jsonType.label" : "String"
+ }
+ }, {
+ "id" : "f3a6dbf0-6756-4271-92c7-a0609307f12c",
+ "name" : "upn",
+ "protocol" : "openid-connect",
+ "protocolMapper" : "oidc-usermodel-property-mapper",
+ "consentRequired" : false,
+ "config" : {
+ "userinfo.token.claim" : "true",
+ "user.attribute" : "username",
+ "id.token.claim" : "true",
+ "access.token.claim" : "true",
+ "claim.name" : "upn",
+ "jsonType.label" : "String"
+ }
+ } ]
+ } ],
+ "defaultDefaultClientScopes" : [ "role_list", "profile", "email", "roles", "web-origins" ],
+ "defaultOptionalClientScopes" : [ "offline_access", "address", "phone", "microprofile-jwt" ],
+ "browserSecurityHeaders" : {
+ "contentSecurityPolicyReportOnly" : "",
+ "xContentTypeOptions" : "nosniff",
+ "xRobotsTag" : "none",
+ "xFrameOptions" : "SAMEORIGIN",
+ "contentSecurityPolicy" : "frame-src 'self'; frame-ancestors 'self'; object-src 'none';",
+ "xXSSProtection" : "1; mode=block",
+ "strictTransportSecurity" : "max-age=31536000; includeSubDomains"
+ },
+ "smtpServer" : { },
+ "eventsEnabled" : false,
+ "eventsListeners" : [ "jboss-logging" ],
+ "enabledEventTypes" : [ ],
+ "adminEventsEnabled" : false,
+ "adminEventsDetailsEnabled" : false,
+ "components" : {
+ "org.keycloak.services.clientregistration.policy.ClientRegistrationPolicy" : [ {
+ "id" : "811153f0-3d4a-42ae-93ef-b26ac06c94aa",
+ "name" : "Max Clients Limit",
+ "providerId" : "max-clients",
+ "subType" : "anonymous",
+ "subComponents" : { },
+ "config" : {
+ "max-clients" : [ "200" ]
+ }
+ }, {
+ "id" : "63d2fcfe-a8f1-4393-8f5a-d5eea356d778",
+ "name" : "Trusted Hosts",
+ "providerId" : "trusted-hosts",
+ "subType" : "anonymous",
+ "subComponents" : { },
+ "config" : {
+ "host-sending-registration-request-must-match" : [ "true" ],
+ "client-uris-must-match" : [ "true" ]
+ }
+ }, {
+ "id" : "8bb81a99-83e2-4968-9963-eb70b0fe753c",
+ "name" : "Allowed Client Scopes",
+ "providerId" : "allowed-client-templates",
+ "subType" : "anonymous",
+ "subComponents" : { },
+ "config" : {
+ "allow-default-scopes" : [ "true" ]
+ }
+ }, {
+ "id" : "816adcb3-0414-47dd-b231-a45a095edc81",
+ "name" : "Consent Required",
+ "providerId" : "consent-required",
+ "subType" : "anonymous",
+ "subComponents" : { },
+ "config" : { }
+ }, {
+ "id" : "3f5888e8-bc23-4f1e-a215-43c59fa0a713",
+ "name" : "Full Scope Disabled",
+ "providerId" : "scope",
+ "subType" : "anonymous",
+ "subComponents" : { },
+ "config" : { }
+ }, {
+ "id" : "1fea56dc-6a52-4d47-8058-6bf4c5a28f4b",
+ "name" : "Allowed Protocol Mapper Types",
+ "providerId" : "allowed-protocol-mappers",
+ "subType" : "anonymous",
+ "subComponents" : { },
+ "config" : {
+ "allowed-protocol-mapper-types" : [ "saml-user-attribute-mapper", "oidc-full-name-mapper", "saml-role-list-mapper", "oidc-address-mapper", "oidc-usermodel-property-mapper", "saml-user-property-mapper", "oidc-usermodel-attribute-mapper", "oidc-sha256-pairwise-sub-mapper" ]
+ }
+ }, {
+ "id" : "f3413e70-66b0-4ca4-840e-ad22598416cc",
+ "name" : "Allowed Client Scopes",
+ "providerId" : "allowed-client-templates",
+ "subType" : "authenticated",
+ "subComponents" : { },
+ "config" : {
+ "allow-default-scopes" : [ "true" ]
+ }
+ }, {
+ "id" : "c88d027d-355d-4ae7-a5ff-1f4a456f6e86",
+ "name" : "Allowed Protocol Mapper Types",
+ "providerId" : "allowed-protocol-mappers",
+ "subType" : "authenticated",
+ "subComponents" : { },
+ "config" : {
+ "allowed-protocol-mapper-types" : [ "saml-user-attribute-mapper", "saml-user-property-mapper", "oidc-full-name-mapper", "oidc-sha256-pairwise-sub-mapper", "oidc-usermodel-property-mapper", "saml-role-list-mapper", "oidc-usermodel-attribute-mapper", "oidc-address-mapper" ]
+ }
+ } ],
+ "org.keycloak.keys.KeyProvider" : [ {
+ "id" : "d3a46f12-da7c-4960-b429-7a82b5c23d02",
+ "name" : "aes-generated",
+ "providerId" : "aes-generated",
+ "subComponents" : { },
+ "config" : {
+ "kid" : [ "24d4bf93-2344-46d3-b04e-8d98891a81d6" ],
+ "secret" : [ "dWZJQ_bbbYqaYqITXzvngg" ],
+ "priority" : [ "100" ]
+ }
+ }, {
+ "id" : "26b721b0-41fc-48d0-b57f-5bab8f968ae8",
+ "name" : "hmac-generated",
+ "providerId" : "hmac-generated",
+ "subComponents" : { },
+ "config" : {
+ "kid" : [ "568d15ee-15e6-403a-8bd8-1c137d69d002" ],
+ "secret" : [ "T5WZ51KmfQ7JhhcsbG1kSJMCGgmsftnOYv8m8ZilCYnXtNuZn0lu68U-uVrrDJTUFv2uiSisapZaysxRdEtGSw" ],
+ "priority" : [ "100" ],
+ "algorithm" : [ "HS256" ]
+ }
+ }, {
+ "id" : "0660a039-4702-4765-a534-ec339b6afcc9",
+ "name" : "rsa-generated",
+ "providerId" : "rsa-generated",
+ "subComponents" : { },
+ "config" : {
+ "privateKey" : [ "MIIEpQIBAAKCAQEAp8Ratd6KfNju4CmwsP/vlSMIVu/QtIy6gsTKXIf1/0YGslwMCsISBRCQ7TLhUnMmoWhSXBW/4VQTLNUamMKDsKLOeR5UJRQOa/PNZexP5tqBlsilkkvy3tW0UzvqxM5rJr3J3gOwuRcxLG3v/uBtSUN556OICaRZPMPEgbt9bDed8PhoSLNlfrqQAwDboNOifK8Di774hH+r0vd3yr1e3dqXXzMJpW4CN6undyP1ZC+8+BD2OM39vJJ8MCe9KXGSzMXH1raOCa9PPHLITjOf1Cz6fVpKbGLQKOdnC2gima+D9w2pyNjsmyssQJocyw8hnk2R3xzqM3M+A2DLaOSQOwIDAQABAoIBAQCCEKfm4i5p1mFz5r52qyWacPuRMwGSSJx8r4bXsAzWqPqeIuCvIoCH7qz9SHoJyv6DGnbnr3EAh4cKNfkVv5ALTF1Y51uDF4aKyQxP3aKgrnzTYqGCx2D2w6W29ffwNrw539/2QNQs2z8jW+Q5rNLtfuOu40ifeQw6IOhjT/FQCJkBJct9iulUw1gNNSk+9mVwOZXIhbDFK2eZyBUPrNadrGgOeE3attkfUXI0pQCg7bV3Ee+y+CK6rJ4CXQPdcYviHGVc1oJN9eYmDGDr1o0USGS8lOmrJTy6+QXZqpi38aZVeBTG0ywrsZ4123o4UWcRrsLIQLPVfkDbykXW/BZRAoGBANOLv5QlIv5BlTZJSqN94Hb9FuMt4P2dtJKErkdv0yH/NHacsd+bDhjenu4sgX+UZ0J0URo8GZG6Nh4nuRoP5tPgG1nDAxSgSvzQuVagocm190f2YTJPs6cpZ9TJJMf6xNcC7W9pN6BXby7AQ4nYC/OQYr1V3nkLDn/h0F9ZWTZpAoGBAMsFfe7m0CkqnGkgEorEVYi6Lnl8mXSPsoW2dop/8C/Osm7sHEg9tpRFttXUOrYnQmxAd/izrtX0SV5qfGGEQohenAhdMWUqKwTQOrI+uIWx1bL8YaLkPmEmm7UCwsuYh/XZhpLIwMxp9REMWAt8XPvYcyi0LKFs6ANvZdviJeUDAoGBAJgcYIERwvu4BKaoRLcSiBiHG7H3B1TV1UWVigtr6REFBKBVQ8FZKOXRDc6MygEGoMk0Ai0vEeOrVcaRIZQP4xZuirwccVafe8wV+W7EyhDUex6Plowqqy+Dollq2LvDIU7JmBkIOytcM2IWdXnkk5NrOtSRrgqzXJWvtbkZ8gAhAoGBAJ7+Ag2h/MsAb9V0JJFACKw3AkZp6dN65ZgJuPPmFbea6+oqRkvc6KtdnT4AIqqcPEyCgHHoZbdwxDSIuDe2WFRro055jUFosJ/oYs9Mhz1Mc8rkE6J5lNCIZ9BuBRdksLU8UUOKrFJpeF6NiDYWgstIS4dI8trIazqlduOoS3z5AoGACoeJIndd1Ukkg2N4NnzQb7Yal+0q39mdQpIWe51gvIh9x+LMm+2eJaTm5vSFNGSO5MpCLUl2LNKwGeWd5cjO7muTAtFGn7vy+Z7osJi5XfwgnTlpt786zSE0Fu3AM6sLqPkJy8XXQuOZOaQB6sNa9jXsffpWdwBZ6dF1R3aN+T8=" ],
+ "certificate" : [ "MIICmzCCAYMCBgF0KzkkAjANBgkqhkiG9w0BAQsFADARMQ8wDQYDVQQDDAZCZWFjb24wHhcNMjAwODI2MTQ0MTM5WhcNMzAwODI2MTQ0MzE5WjARMQ8wDQYDVQQDDAZCZWFjb24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCnxFq13op82O7gKbCw/++VIwhW79C0jLqCxMpch/X/RgayXAwKwhIFEJDtMuFScyahaFJcFb/hVBMs1RqYwoOwos55HlQlFA5r881l7E/m2oGWyKWSS/Le1bRTO+rEzmsmvcneA7C5FzEsbe/+4G1JQ3nno4gJpFk8w8SBu31sN53w+GhIs2V+upADANug06J8rwOLvviEf6vS93fKvV7d2pdfMwmlbgI3q6d3I/VkL7z4EPY4zf28knwwJ70pcZLMxcfWto4Jr088cshOM5/ULPp9WkpsYtAo52cLaCKZr4P3DanI2OybKyxAmhzLDyGeTZHfHOozcz4DYMto5JA7AgMBAAEwDQYJKoZIhvcNAQELBQADggEBAG3K//oLZumV6ZDTAEfbVVh6W4i3YO+mosZuxRIDr0b7bN9dlp/xb8jtIFk2+/Hoie0SogLyCvlAAeokJb9+TIZ4CMUBRo4fMpTqSiTUr9EMj9rpG9pM3vho3EBnnV5MeUZPBj5G1JomYz/gBjrXBywuxHIoKa6eYGnXrirpUXTSEAPpm5fvvhoMz/fFAW/1GYFczAqsaPwCjD1nrBJ6lRywu/M1FQVjo4Gx+hitbbdhoSkA5Azd7emGwc9EhhgwRH0I7/LJDEw1G+Z5d4tIMZysWdkAyCAGmH/qN+X5pSGQAe1/TBjYMLOS3l1zOzFJSvd20oBFhFWe/FBPOF6c4qg=" ],
+ "priority" : [ "100" ]
+ }
+ } ]
+ },
+ "internationalizationEnabled" : false,
+ "supportedLocales" : [ ],
+ "authenticationFlows" : [ {
+ "id" : "d94404c2-f668-4fe2-af3f-3444736b2a2f",
+ "alias" : "Account verification options",
+ "description" : "Method with which to verity the existing account",
+ "providerId" : "basic-flow",
+ "topLevel" : false,
+ "builtIn" : true,
+ "authenticationExecutions" : [ {
+ "authenticator" : "idp-email-verification",
+ "requirement" : "ALTERNATIVE",
+ "priority" : 10,
+ "userSetupAllowed" : false,
+ "autheticatorFlow" : false
+ }, {
+ "requirement" : "ALTERNATIVE",
+ "priority" : 20,
+ "flowAlias" : "Verify Existing Account by Re-authentication",
+ "userSetupAllowed" : false,
+ "autheticatorFlow" : true
+ } ]
+ }, {
+ "id" : "f5b88790-3bd2-4a5c-b452-45ac724b2464",
+ "alias" : "Authentication Options",
+ "description" : "Authentication options.",
+ "providerId" : "basic-flow",
+ "topLevel" : false,
+ "builtIn" : true,
+ "authenticationExecutions" : [ {
+ "authenticator" : "basic-auth",
+ "requirement" : "REQUIRED",
+ "priority" : 10,
+ "userSetupAllowed" : false,
+ "autheticatorFlow" : false
+ }, {
+ "authenticator" : "basic-auth-otp",
+ "requirement" : "DISABLED",
+ "priority" : 20,
+ "userSetupAllowed" : false,
+ "autheticatorFlow" : false
+ }, {
+ "authenticator" : "auth-spnego",
+ "requirement" : "DISABLED",
+ "priority" : 30,
+ "userSetupAllowed" : false,
+ "autheticatorFlow" : false
+ } ]
+ }, {
+ "id" : "e47175a0-8291-4c10-95c1-863c2f1de51c",
+ "alias" : "Browser - Conditional OTP",
+ "description" : "Flow to determine if the OTP is required for the authentication",
+ "providerId" : "basic-flow",
+ "topLevel" : false,
+ "builtIn" : true,
+ "authenticationExecutions" : [ {
+ "authenticator" : "conditional-user-configured",
+ "requirement" : "REQUIRED",
+ "priority" : 10,
+ "userSetupAllowed" : false,
+ "autheticatorFlow" : false
+ }, {
+ "authenticator" : "auth-otp-form",
+ "requirement" : "REQUIRED",
+ "priority" : 20,
+ "userSetupAllowed" : false,
+ "autheticatorFlow" : false
+ } ]
+ }, {
+ "id" : "376389b4-0a1e-4188-ac0e-073969d19559",
+ "alias" : "Direct Grant - Conditional OTP",
+ "description" : "Flow to determine if the OTP is required for the authentication",
+ "providerId" : "basic-flow",
+ "topLevel" : false,
+ "builtIn" : true,
+ "authenticationExecutions" : [ {
+ "authenticator" : "conditional-user-configured",
+ "requirement" : "REQUIRED",
+ "priority" : 10,
+ "userSetupAllowed" : false,
+ "autheticatorFlow" : false
+ }, {
+ "authenticator" : "direct-grant-validate-otp",
+ "requirement" : "REQUIRED",
+ "priority" : 20,
+ "userSetupAllowed" : false,
+ "autheticatorFlow" : false
+ } ]
+ }, {
+ "id" : "e0961aff-bc85-4fcd-9887-954cd811fba4",
+ "alias" : "First broker login - Conditional OTP",
+ "description" : "Flow to determine if the OTP is required for the authentication",
+ "providerId" : "basic-flow",
+ "topLevel" : false,
+ "builtIn" : true,
+ "authenticationExecutions" : [ {
+ "authenticator" : "conditional-user-configured",
+ "requirement" : "REQUIRED",
+ "priority" : 10,
+ "userSetupAllowed" : false,
+ "autheticatorFlow" : false
+ }, {
+ "authenticator" : "auth-otp-form",
+ "requirement" : "REQUIRED",
+ "priority" : 20,
+ "userSetupAllowed" : false,
+ "autheticatorFlow" : false
+ } ]
+ }, {
+ "id" : "ff1b08fe-9b2b-4394-9c16-6e56f7248bb7",
+ "alias" : "Handle Existing Account",
+ "description" : "Handle what to do if there is existing account with same email/username like authenticated identity provider",
+ "providerId" : "basic-flow",
+ "topLevel" : false,
+ "builtIn" : true,
+ "authenticationExecutions" : [ {
+ "authenticator" : "idp-confirm-link",
+ "requirement" : "REQUIRED",
+ "priority" : 10,
+ "userSetupAllowed" : false,
+ "autheticatorFlow" : false
+ }, {
+ "requirement" : "REQUIRED",
+ "priority" : 20,
+ "flowAlias" : "Account verification options",
+ "userSetupAllowed" : false,
+ "autheticatorFlow" : true
+ } ]
+ }, {
+ "id" : "d5454fe8-06b8-45a2-841a-7c634f0eba15",
+ "alias" : "Reset - Conditional OTP",
+ "description" : "Flow to determine if the OTP should be reset or not. Set to REQUIRED to force.",
+ "providerId" : "basic-flow",
+ "topLevel" : false,
+ "builtIn" : true,
+ "authenticationExecutions" : [ {
+ "authenticator" : "conditional-user-configured",
+ "requirement" : "REQUIRED",
+ "priority" : 10,
+ "userSetupAllowed" : false,
+ "autheticatorFlow" : false
+ }, {
+ "authenticator" : "reset-otp",
+ "requirement" : "REQUIRED",
+ "priority" : 20,
+ "userSetupAllowed" : false,
+ "autheticatorFlow" : false
+ } ]
+ }, {
+ "id" : "a814256b-6307-4d0c-b7b6-9fe03d7afdab",
+ "alias" : "User creation or linking",
+ "description" : "Flow for the existing/non-existing user alternatives",
+ "providerId" : "basic-flow",
+ "topLevel" : false,
+ "builtIn" : true,
+ "authenticationExecutions" : [ {
+ "authenticatorConfig" : "create unique user config",
+ "authenticator" : "idp-create-user-if-unique",
+ "requirement" : "ALTERNATIVE",
+ "priority" : 10,
+ "userSetupAllowed" : false,
+ "autheticatorFlow" : false
+ }, {
+ "requirement" : "ALTERNATIVE",
+ "priority" : 20,
+ "flowAlias" : "Handle Existing Account",
+ "userSetupAllowed" : false,
+ "autheticatorFlow" : true
+ } ]
+ }, {
+ "id" : "9a27a729-3207-4d42-9d54-aba248f88862",
+ "alias" : "Verify Existing Account by Re-authentication",
+ "description" : "Reauthentication of existing account",
+ "providerId" : "basic-flow",
+ "topLevel" : false,
+ "builtIn" : true,
+ "authenticationExecutions" : [ {
+ "authenticator" : "idp-username-password-form",
+ "requirement" : "REQUIRED",
+ "priority" : 10,
+ "userSetupAllowed" : false,
+ "autheticatorFlow" : false
+ }, {
+ "requirement" : "CONDITIONAL",
+ "priority" : 20,
+ "flowAlias" : "First broker login - Conditional OTP",
+ "userSetupAllowed" : false,
+ "autheticatorFlow" : true
+ } ]
+ }, {
+ "id" : "52c16b5a-faf6-4a4c-ba18-d6f70c29863d",
+ "alias" : "browser",
+ "description" : "browser based authentication",
+ "providerId" : "basic-flow",
+ "topLevel" : true,
+ "builtIn" : true,
+ "authenticationExecutions" : [ {
+ "authenticator" : "auth-cookie",
+ "requirement" : "ALTERNATIVE",
+ "priority" : 10,
+ "userSetupAllowed" : false,
+ "autheticatorFlow" : false
+ }, {
+ "authenticator" : "auth-spnego",
+ "requirement" : "DISABLED",
+ "priority" : 20,
+ "userSetupAllowed" : false,
+ "autheticatorFlow" : false
+ }, {
+ "authenticator" : "identity-provider-redirector",
+ "requirement" : "ALTERNATIVE",
+ "priority" : 25,
+ "userSetupAllowed" : false,
+ "autheticatorFlow" : false
+ }, {
+ "requirement" : "ALTERNATIVE",
+ "priority" : 30,
+ "flowAlias" : "forms",
+ "userSetupAllowed" : false,
+ "autheticatorFlow" : true
+ } ]
+ }, {
+ "id" : "27df9fe7-78fe-44be-ae21-de72763b453d",
+ "alias" : "clients",
+ "description" : "Base authentication for clients",
+ "providerId" : "client-flow",
+ "topLevel" : true,
+ "builtIn" : true,
+ "authenticationExecutions" : [ {
+ "authenticator" : "client-secret",
+ "requirement" : "ALTERNATIVE",
+ "priority" : 10,
+ "userSetupAllowed" : false,
+ "autheticatorFlow" : false
+ }, {
+ "authenticator" : "client-jwt",
+ "requirement" : "ALTERNATIVE",
+ "priority" : 20,
+ "userSetupAllowed" : false,
+ "autheticatorFlow" : false
+ }, {
+ "authenticator" : "client-secret-jwt",
+ "requirement" : "ALTERNATIVE",
+ "priority" : 30,
+ "userSetupAllowed" : false,
+ "autheticatorFlow" : false
+ }, {
+ "authenticator" : "client-x509",
+ "requirement" : "ALTERNATIVE",
+ "priority" : 40,
+ "userSetupAllowed" : false,
+ "autheticatorFlow" : false
+ } ]
+ }, {
+ "id" : "32cf0a27-795f-4285-8c12-6050d4836333",
+ "alias" : "direct grant",
+ "description" : "OpenID Connect Resource Owner Grant",
+ "providerId" : "basic-flow",
+ "topLevel" : true,
+ "builtIn" : true,
+ "authenticationExecutions" : [ {
+ "authenticator" : "direct-grant-validate-username",
+ "requirement" : "REQUIRED",
+ "priority" : 10,
+ "userSetupAllowed" : false,
+ "autheticatorFlow" : false
+ }, {
+ "authenticator" : "direct-grant-validate-password",
+ "requirement" : "REQUIRED",
+ "priority" : 20,
+ "userSetupAllowed" : false,
+ "autheticatorFlow" : false
+ }, {
+ "requirement" : "CONDITIONAL",
+ "priority" : 30,
+ "flowAlias" : "Direct Grant - Conditional OTP",
+ "userSetupAllowed" : false,
+ "autheticatorFlow" : true
+ } ]
+ }, {
+ "id" : "5975659c-8010-467e-b782-f0fcf1abb121",
+ "alias" : "docker auth",
+ "description" : "Used by Docker clients to authenticate against the IDP",
+ "providerId" : "basic-flow",
+ "topLevel" : true,
+ "builtIn" : true,
+ "authenticationExecutions" : [ {
+ "authenticator" : "docker-http-basic-authenticator",
+ "requirement" : "REQUIRED",
+ "priority" : 10,
+ "userSetupAllowed" : false,
+ "autheticatorFlow" : false
+ } ]
+ }, {
+ "id" : "98adec5d-98c6-4d7c-b6d3-105805e1e91e",
+ "alias" : "first broker login",
+ "description" : "Actions taken after first broker login with identity provider account, which is not yet linked to any Keycloak account",
+ "providerId" : "basic-flow",
+ "topLevel" : true,
+ "builtIn" : true,
+ "authenticationExecutions" : [ {
+ "authenticatorConfig" : "review profile config",
+ "authenticator" : "idp-review-profile",
+ "requirement" : "REQUIRED",
+ "priority" : 10,
+ "userSetupAllowed" : false,
+ "autheticatorFlow" : false
+ }, {
+ "requirement" : "REQUIRED",
+ "priority" : 20,
+ "flowAlias" : "User creation or linking",
+ "userSetupAllowed" : false,
+ "autheticatorFlow" : true
+ } ]
+ }, {
+ "id" : "88fa16c9-68da-49cd-82b9-30fd2714af6d",
+ "alias" : "forms",
+ "description" : "Username, password, otp and other auth forms.",
+ "providerId" : "basic-flow",
+ "topLevel" : false,
+ "builtIn" : true,
+ "authenticationExecutions" : [ {
+ "authenticator" : "auth-username-password-form",
+ "requirement" : "REQUIRED",
+ "priority" : 10,
+ "userSetupAllowed" : false,
+ "autheticatorFlow" : false
+ }, {
+ "requirement" : "CONDITIONAL",
+ "priority" : 20,
+ "flowAlias" : "Browser - Conditional OTP",
+ "userSetupAllowed" : false,
+ "autheticatorFlow" : true
+ } ]
+ }, {
+ "id" : "8c3fe87b-6b27-4bd1-b2b4-a63154550df2",
+ "alias" : "http challenge",
+ "description" : "An authentication flow based on challenge-response HTTP Authentication Schemes",
+ "providerId" : "basic-flow",
+ "topLevel" : true,
+ "builtIn" : true,
+ "authenticationExecutions" : [ {
+ "authenticator" : "no-cookie-redirect",
+ "requirement" : "REQUIRED",
+ "priority" : 10,
+ "userSetupAllowed" : false,
+ "autheticatorFlow" : false
+ }, {
+ "requirement" : "REQUIRED",
+ "priority" : 20,
+ "flowAlias" : "Authentication Options",
+ "userSetupAllowed" : false,
+ "autheticatorFlow" : true
+ } ]
+ }, {
+ "id" : "80910f52-988a-4c1a-b780-40399eafa7b0",
+ "alias" : "registration",
+ "description" : "registration flow",
+ "providerId" : "basic-flow",
+ "topLevel" : true,
+ "builtIn" : true,
+ "authenticationExecutions" : [ {
+ "authenticator" : "registration-page-form",
+ "requirement" : "REQUIRED",
+ "priority" : 10,
+ "flowAlias" : "registration form",
+ "userSetupAllowed" : false,
+ "autheticatorFlow" : true
+ } ]
+ }, {
+ "id" : "feba6cf8-7689-4887-b73d-cae37150f548",
+ "alias" : "registration form",
+ "description" : "registration form",
+ "providerId" : "form-flow",
+ "topLevel" : false,
+ "builtIn" : true,
+ "authenticationExecutions" : [ {
+ "authenticator" : "registration-user-creation",
+ "requirement" : "REQUIRED",
+ "priority" : 20,
+ "userSetupAllowed" : false,
+ "autheticatorFlow" : false
+ }, {
+ "authenticator" : "registration-profile-action",
+ "requirement" : "REQUIRED",
+ "priority" : 40,
+ "userSetupAllowed" : false,
+ "autheticatorFlow" : false
+ }, {
+ "authenticator" : "registration-password-action",
+ "requirement" : "REQUIRED",
+ "priority" : 50,
+ "userSetupAllowed" : false,
+ "autheticatorFlow" : false
+ }, {
+ "authenticator" : "registration-recaptcha-action",
+ "requirement" : "DISABLED",
+ "priority" : 60,
+ "userSetupAllowed" : false,
+ "autheticatorFlow" : false
+ } ]
+ }, {
+ "id" : "b2950822-d435-463d-860b-920144bc5543",
+ "alias" : "reset credentials",
+ "description" : "Reset credentials for a user if they forgot their password or something",
+ "providerId" : "basic-flow",
+ "topLevel" : true,
+ "builtIn" : true,
+ "authenticationExecutions" : [ {
+ "authenticator" : "reset-credentials-choose-user",
+ "requirement" : "REQUIRED",
+ "priority" : 10,
+ "userSetupAllowed" : false,
+ "autheticatorFlow" : false
+ }, {
+ "authenticator" : "reset-credential-email",
+ "requirement" : "REQUIRED",
+ "priority" : 20,
+ "userSetupAllowed" : false,
+ "autheticatorFlow" : false
+ }, {
+ "authenticator" : "reset-password",
+ "requirement" : "REQUIRED",
+ "priority" : 30,
+ "userSetupAllowed" : false,
+ "autheticatorFlow" : false
+ }, {
+ "requirement" : "CONDITIONAL",
+ "priority" : 40,
+ "flowAlias" : "Reset - Conditional OTP",
+ "userSetupAllowed" : false,
+ "autheticatorFlow" : true
+ } ]
+ }, {
+ "id" : "4070ca61-2129-4835-a890-45388c060a9b",
+ "alias" : "saml ecp",
+ "description" : "SAML ECP Profile Authentication Flow",
+ "providerId" : "basic-flow",
+ "topLevel" : true,
+ "builtIn" : true,
+ "authenticationExecutions" : [ {
+ "authenticator" : "http-basic-authenticator",
+ "requirement" : "REQUIRED",
+ "priority" : 10,
+ "userSetupAllowed" : false,
+ "autheticatorFlow" : false
+ } ]
+ } ],
+ "authenticatorConfig" : [ {
+ "id" : "b616d8ec-25ee-4b8e-9924-b7ff19a89e0f",
+ "alias" : "create unique user config",
+ "config" : {
+ "require.password.update.after.registration" : "false"
+ }
+ }, {
+ "id" : "302dcbad-33e1-45d7-a4fd-4f4afccbe8eb",
+ "alias" : "review profile config",
+ "config" : {
+ "update.profile.on.first.login" : "missing"
+ }
+ } ],
+ "requiredActions" : [ {
+ "alias" : "CONFIGURE_TOTP",
+ "name" : "Configure OTP",
+ "providerId" : "CONFIGURE_TOTP",
+ "enabled" : true,
+ "defaultAction" : false,
+ "priority" : 10,
+ "config" : { }
+ }, {
+ "alias" : "terms_and_conditions",
+ "name" : "Terms and Conditions",
+ "providerId" : "terms_and_conditions",
+ "enabled" : false,
+ "defaultAction" : false,
+ "priority" : 20,
+ "config" : { }
+ }, {
+ "alias" : "UPDATE_PASSWORD",
+ "name" : "Update Password",
+ "providerId" : "UPDATE_PASSWORD",
+ "enabled" : true,
+ "defaultAction" : false,
+ "priority" : 30,
+ "config" : { }
+ }, {
+ "alias" : "UPDATE_PROFILE",
+ "name" : "Update Profile",
+ "providerId" : "UPDATE_PROFILE",
+ "enabled" : true,
+ "defaultAction" : false,
+ "priority" : 40,
+ "config" : { }
+ }, {
+ "alias" : "VERIFY_EMAIL",
+ "name" : "Verify Email",
+ "providerId" : "VERIFY_EMAIL",
+ "enabled" : true,
+ "defaultAction" : false,
+ "priority" : 50,
+ "config" : { }
+ }, {
+ "alias" : "update_user_locale",
+ "name" : "Update User Locale",
+ "providerId" : "update_user_locale",
+ "enabled" : true,
+ "defaultAction" : false,
+ "priority" : 1000,
+ "config" : { }
+ } ],
+ "browserFlow" : "browser",
+ "registrationFlow" : "registration",
+ "directGrantFlow" : "direct grant",
+ "resetCredentialsFlow" : "reset credentials",
+ "clientAuthenticationFlow" : "clients",
+ "dockerAuthenticationFlow" : "docker auth",
+ "attributes" : {
+ "clientOfflineSessionMaxLifespan" : "0",
+ "clientSessionIdleTimeout" : "0",
+ "clientSessionMaxLifespan" : "0",
+ "clientOfflineSessionIdleTimeout" : "0"
+ },
+ "keycloakVersion" : "11.0.1",
+ "userManagedAccessAllowed" : false
+}
\ No newline at end of file
diff --git a/deploy/cleanup_json.py b/deploy/cleanup_json.py
new file mode 100644
index 0000000..d96a544
--- /dev/null
+++ b/deploy/cleanup_json.py
@@ -0,0 +1,17 @@
+
+import os
+import sys
+import json
+
+def clean(path):
+ os.system("json-dereference -s {} -o {}".format(path, path))
+
+def main():
+ for root, dirs, files in os.walk(sys.argv[1], topdown=False):
+ for name in files:
+ if name.endswith("json") and not name.endswith("endpoints.json"):
+ print(os.path.join(root, name))
+ clean(os.path.join(root, name))
+
+if __name__ == "__main__":
+ main()
\ No newline at end of file
diff --git a/deploy/conf.py b/deploy/conf.py
new file mode 100644
index 0000000..56f8e7f
--- /dev/null
+++ b/deploy/conf.py
@@ -0,0 +1,129 @@
+"""Beacon Configuration."""
+
+#
+# Beacon general info
+#
+beacon_id = 'org.ega-archive.ga4gh-approval-beacon-test' # ID of the Beacon
+beacon_name = 'GA4GH Approval Beacon Test' # Name of the Beacon service
+api_version = 'v2.0.0' # Version of the Beacon implementation
+uri = 'https://beacon-giab-test.ega-archive.org'
+
+#
+# Beacon granularity
+#
+default_beacon_granularity = "record"
+max_beacon_granularity = "record"
+
+#
+# Organization info
+#
+org_id = 'EGA' # Id of the organization
+org_name = 'European Genome-Phenome Archive (EGA)' # Full name
+org_description = ('The European Genome-phenome Archive (EGA) '
+ 'is a service for permanent archiving and sharing '
+ 'of all types of personally identifiable genetic '
+ 'and phenotypic data resulting from biomedical research projects.')
+org_adress = ('C/ Dr. Aiguader, 88'
+ 'PRBB Building'
+ '08003 Barcelona, Spain')
+org_welcome_url = 'https://ega-archive.org/'
+org_contact_url = 'mailto:beacon.ega@crg.eu'
+org_logo_url = 'https://ega-archive.org/images/logo.png'
+org_info = ''
+
+#
+# Project info
+#
+description = (r"This Beacon "
+ r"is based on the GA4GH Beacon "
+ r"v2.0 ")
+version = 'v2.0'
+welcome_url = 'https://beacon.ega-archive.org/'
+alternative_url = 'https://beacon.ega-archive.org/api'
+create_datetime = '2021-11-29T12:00:00.000000'
+update_datetime = ''
+# update_datetime will be created when initializing the beacon, using the ISO 8601 format
+
+#
+# Service
+#
+service_type = 'org.ga4gh:beacon:1.0.0' # service type
+service_url = 'https://beacon.ega-archive.org/api/services'
+entry_point = False
+is_open = True
+documentation_url = 'https://github.com/EGA-archive/beacon-2.x/' # Documentation of the service
+environment = 'test' # Environment (production, development or testing/staging deployments)
+
+# GA4GH
+ga4gh_service_type_group = 'org.ga4gh'
+ga4gh_service_type_artifact = 'beacon'
+ga4gh_service_type_version = '1.0'
+
+# Beacon handovers
+beacon_handovers = [
+ {
+ 'handoverType': {
+ 'id': 'CUSTOM',
+ 'label': 'Project description'
+ },
+ 'note': 'Project description',
+ 'url': 'https://www.nist.gov/programs-projects/genome-bottle'
+ }
+]
+
+#
+# Database connection
+#
+database_host = 'mongo'
+database_port = 27017
+database_user = 'root'
+database_password = 'example'
+database_name = 'beacon'
+database_auth_source = 'admin'
+# database_schema = 'public' # comma-separated list of schemas
+# database_app_name = 'beacon-appname' # Useful to track connections
+
+#
+# Web server configuration
+# Note: a Unix Socket path is used when behind a server, not host:port
+#
+beacon_host = '0.0.0.0'
+beacon_port = 5050
+beacon_tls_enabled = False
+beacon_tls_client = False
+beacon_cert = '/etc/ega/server.cert'
+beacon_key = '/etc/ega/server.key'
+CA_cert = '/etc/ega/CA.cert'
+
+#
+# Permissions server configuration
+#
+permissions_url = 'http://beacon-permissions'
+
+#
+# IdP endpoints (OpenID Connect/Oauth2)
+#
+# or use Elixir AAI (see https://elixir-europe.org/services/compute/aai)
+#
+idp_client_id = 'beacon'
+idp_client_secret = 'b26ca0f9-1137-4bee-b453-ee51eefbe7ba' # same as in the test IdP
+idp_scope = 'profile openid'
+
+idp_authorize = 'http://idp/auth/realms/Beacon/protocol/openid-connect/auth'
+idp_access_token = 'http://idp/auth/realms/Beacon/protocol/openid-connect/token'
+idp_introspection = 'http://idp/auth/realms/Beacon/protocol/openid-connect/token/introspect'
+idp_user_info = 'http://idp/auth/realms/Beacon/protocol/openid-connect/userinfo'
+idp_logout = 'http://idp/auth/realms/Beacon/protocol/openid-connect/logout'
+
+idp_redirect_uri = 'http://beacon:5050/login'
+
+#
+# UI
+#
+autocomplete_limit = 16
+autocomplete_ellipsis = '...'
+
+#
+# Ontologies
+#
+ontologies_folder = "ontologies"
diff --git a/deploy/data/analyses.json b/deploy/data/analyses.json
new file mode 100644
index 0000000..03e31b2
--- /dev/null
+++ b/deploy/data/analyses.json
@@ -0,0 +1,32 @@
+[
+ {
+ "aligner": "bwa-0.7.8",
+ "analysisDate": "2021-04-23",
+ "biosampleId": "S0001",
+ "id": "INT_ID1",
+ "individualId": "NA24631",
+ "pipelineName": "GATK Pipeline 4.2.3.0",
+ "runId": "SRR10903401",
+ "variantCaller": "GATK4.0"
+ },
+ {
+ "aligner": "bwa-0.7.8",
+ "analysisDate": "2021-04-23",
+ "biosampleId": "S0002",
+ "id": "INT_ID2",
+ "individualId": "NA24694",
+ "pipelineName": "GATK Pipeline 4.2.3.0",
+ "runId": "SRR10903402",
+ "variantCaller": "GATK4.0"
+ },
+ {
+ "aligner": "bwa-0.7.8",
+ "analysisDate": "2021-04-23",
+ "biosampleId": "S0003",
+ "id": "INT_ID3",
+ "individualId": "NA24695",
+ "pipelineName": "GATK Pipeline 4.2.3.0",
+ "runId": "SRR10903403",
+ "variantCaller": "GATK4.0"
+ }
+]
diff --git a/deploy/data/biosamples.json b/deploy/data/biosamples.json
new file mode 100644
index 0000000..f067600
--- /dev/null
+++ b/deploy/data/biosamples.json
@@ -0,0 +1,140 @@
+[
+ {
+ "biosampleStatus": {
+ "id": "EFO:0009655",
+ "label": "abnormal sample"
+ },
+ "collectionDate": "2021-04-23",
+ "collectionMoment": "P32Y6M1D",
+ "diagnosticMarkers": [
+ {
+ "id": "NCIT:C48726",
+ "label": "T2b Stage Finding"
+ }
+ ],
+ "histologicalDiagnosis": {
+ "id": "NCIT:C39853",
+ "label": "Infiltrating Urothelial Carcinoma"
+ },
+ "id": "INT_ID1",
+ "individualId": "NA24631",
+ "pathologicalStage": {
+ "id": "NCIT:C28054",
+ "label": "Stage II"
+ },
+ "pathologicalTnmFinding": [
+ {
+ "id": "NCIT:C48726",
+ "label": "T2b Stage Finding"
+ }
+ ],
+ "sampleOriginDetail": {
+ "id": "UBERON:0001256",
+ "label": "wall of urinary bladde"
+ },
+ "sampleOriginType": {
+ "id": "EFO:000965",
+ "label": "abnormal sample"
+ },
+ "tumorGrade": {
+ "id": "NCIT:C36136",
+ "label": "Grade 2 Lesion"
+ },
+ "tumorProgression": {
+ "id": "NCIT:C84509",
+ "label": "Primary Malignant Neoplasm"
+ }
+ },
+ {
+ "biosampleStatus": {
+ "id": "EFO:0009655",
+ "label": "abnormal sample"
+ },
+ "collectionDate": "2021-04-23",
+ "collectionMoment": "P32Y6M1D",
+ "diagnosticMarkers": [
+ {
+ "id": "NCIT:C48726",
+ "label": "T2b Stage Finding"
+ }
+ ],
+ "histologicalDiagnosis": {
+ "id": "NCIT:C39853",
+ "label": "Infiltrating Urothelial Carcinoma"
+ },
+ "id": "INT_ID2",
+ "individualId": "NA24694",
+ "pathologicalStage": {
+ "id": "NCIT:C28054",
+ "label": "Stage II"
+ },
+ "pathologicalTnmFinding": [
+ {
+ "id": "NCIT:C48726",
+ "label": "T2b Stage Finding"
+ }
+ ],
+ "sampleOriginDetail": {
+ "id": "UBERON:0001256",
+ "label": "wall of urinary bladde"
+ },
+ "sampleOriginType": {
+ "id": "EFO:000965",
+ "label": "abnormal sample"
+ },
+ "tumorGrade": {
+ "id": "NCIT:C36136",
+ "label": "Grade 2 Lesion"
+ },
+ "tumorProgression": {
+ "id": "NCIT:C84509",
+ "label": "Primary Malignant Neoplasm"
+ }
+ },
+ {
+ "biosampleStatus": {
+ "id": "EFO:0009655",
+ "label": "abnormal sample"
+ },
+ "collectionDate": "2021-04-23",
+ "collectionMoment": "P32Y6M1D",
+ "diagnosticMarkers": [
+ {
+ "id": "NCIT:C48726",
+ "label": "T2b Stage Finding"
+ }
+ ],
+ "histologicalDiagnosis": {
+ "id": "NCIT:C39853",
+ "label": "Infiltrating Urothelial Carcinoma"
+ },
+ "id": "INT_ID3",
+ "individualId": "NA24695",
+ "pathologicalStage": {
+ "id": "NCIT:C28054",
+ "label": "Stage II"
+ },
+ "pathologicalTnmFinding": [
+ {
+ "id": "NCIT:C48726",
+ "label": "T2b Stage Finding"
+ }
+ ],
+ "sampleOriginDetail": {
+ "id": "UBERON:0001256",
+ "label": "wall of urinary bladde"
+ },
+ "sampleOriginType": {
+ "id": "EFO:000965",
+ "label": "abnormal sample"
+ },
+ "tumorGrade": {
+ "id": "NCIT:C36136",
+ "label": "Grade 2 Lesion"
+ },
+ "tumorProgression": {
+ "id": "NCIT:C84509",
+ "label": "Primary Malignant Neoplasm"
+ }
+ }
+]
diff --git a/deploy/data/cohorts.json b/deploy/data/cohorts.json
new file mode 100644
index 0000000..6b820eb
--- /dev/null
+++ b/deploy/data/cohorts.json
@@ -0,0 +1,21 @@
+[
+ {
+ "cohortDataTypes": [
+ {
+ "id": "EFO:0004600",
+ "label": "genomic data"
+ },
+ {
+ "id": "NCIT:C1578",
+ "label": "clinical data"
+ },
+ {
+ "id": "NCIT:C142508",
+ "label": "demographic data"
+ }
+ ],
+ "cohortName": "The Genome in a Bottle Consortium (GIAB)",
+ "cohortId": "GiaB",
+ "cohortType": "study-defined"
+ }
+]
diff --git a/deploy/data/datasets.json b/deploy/data/datasets.json
new file mode 100644
index 0000000..6e1304f
--- /dev/null
+++ b/deploy/data/datasets.json
@@ -0,0 +1,10 @@
+[
+ {
+ "createDateTime": "2017-04-30T00:00:00+00:00",
+ "description": "The Genome in a Bottle Consortium, hosted by the National Institute of Standards and Technology (NIST) is creating reference materials and data for human genome sequencing, as well as methods for genome comparison and benchmarking. ",
+ "externalUrl": "https://www.nature.com/articles/sdata201625, https://jimb.stanford.edu/giab-resources",
+ "id": "EGAD00001008097",
+ "name": "The Genome in a Bottle Consortium (GIAB)",
+ "updateDateTime": "2017-04-30T00:00:00+00:00"
+ }
+]
diff --git a/deploy/data/genomicVariations.json b/deploy/data/genomicVariations.json
new file mode 100644
index 0000000..c12948b
--- /dev/null
+++ b/deploy/data/genomicVariations.json
@@ -0,0 +1,1446 @@
+[
+ {
+ "variantType": "SNP",
+ "alternateBases": "T",
+ "frequencyInPopulations": [
+ {
+ "source": "The Genome Aggregation Database (gnomAD)",
+ "sourceReference": "https://gnomad.broadinstitute.org",
+ "frequencies": [
+ {
+ "population": "AFR_AF",
+ "alleleFrequency": -1
+ }
+ ]
+ },
+ {
+ "source": "The Genome Aggregation Database (gnomAD)",
+ "sourceReference": "https://gnomad.broadinstitute.org",
+ "frequencies": [
+ {
+ "alleleFrequency": -1,
+ "population": "AMR_AF"
+ }
+ ]
+ },
+ {
+ "sourceReference": "https://gnomad.broadinstitute.org",
+ "source": "The Genome Aggregation Database (gnomAD)",
+ "frequencies": [
+ {
+ "population": "EAS_AF",
+ "alleleFrequency": -1
+ }
+ ]
+ },
+ {
+ "frequencies": [
+ {
+ "population": "EUR_AF",
+ "alleleFrequency": -1
+ }
+ ],
+ "source": "The Genome Aggregation Database (gnomAD)",
+ "sourceReference": "https://gnomad.broadinstitute.org"
+ },
+ {
+ "source": "The Genome Aggregation Database (gnomAD)",
+ "sourceReference": "https://gnomad.broadinstitute.org",
+ "frequencies": [
+ {
+ "alleleFrequency": -1,
+ "population": "SAS_AF"
+ }
+ ]
+ }
+ ],
+ "variantLevelData": {
+ "clinicalInterpretations": [
+ null
+ ],
+ "phenotypicEffects": [
+ "MODIFIER"
+ ]
+ },
+ "referenceBases": "C",
+ "identifiers": {
+ "clinVarIds": [
+ null
+ ],
+ "proteinHGVSIds": [
+ null
+ ],
+ "genomicHGVSId": [
+ null
+ ]
+ },
+ "variantInternalId": "chr21_9411318_C_T",
+ "position": {
+ "start": [
+ 9411317
+ ],
+ "refseqId": "21",
+ "end": [
+ 9411318
+ ],
+ "assemblyId": "hs37"
+ },
+ "molecularAttributes": {
+ "aminoacidChanges": [
+ null
+ ],
+ "molecularEffects": [
+ "MODIFIER"
+ ],
+ "geneIds": [
+ "CHR_START-MIR3648-1"
+ ]
+ },
+ "caseLevelData": [
+ {
+ "biosampleId": "NA24695",
+ "individualId": "NA24695"
+ },
+ {
+ "individualId": "NA24694",
+ "biosampleId": "NA24694"
+ },
+ {
+ "biosampleId": "NA24631",
+ "individualId": "NA24631"
+ }
+ ]
+ },
+ {
+ "referenceBases": "C",
+ "identifiers": {
+ "proteinHGVSIds": [
+ null
+ ],
+ "genomicHGVSId": [
+ null
+ ],
+ "clinVarIds": [
+ null
+ ]
+ },
+ "position": {
+ "end": [
+ 9411327
+ ],
+ "refseqId": "21",
+ "start": [
+ 9411326
+ ],
+ "assemblyId": "hs37"
+ },
+ "variantInternalId": "chr21_9411327_C_G",
+ "caseLevelData": [
+ {
+ "individualId": "NA24695",
+ "biosampleId": "NA24695"
+ },
+ {
+ "individualId": "NA24694",
+ "biosampleId": "NA24694"
+ },
+ {
+ "biosampleId": "NA24631",
+ "individualId": "NA24631"
+ }
+ ],
+ "molecularAttributes": {
+ "molecularEffects": [
+ "MODIFIER"
+ ],
+ "aminoacidChanges": [
+ null
+ ],
+ "geneIds": [
+ "CHR_START-MIR3648-1"
+ ]
+ },
+ "variantType": "SNP",
+ "alternateBases": "G",
+ "frequencyInPopulations": [
+ {
+ "frequencies": [
+ {
+ "population": "AFR_AF",
+ "alleleFrequency": -1
+ }
+ ],
+ "sourceReference": "https://gnomad.broadinstitute.org",
+ "source": "The Genome Aggregation Database (gnomAD)"
+ },
+ {
+ "frequencies": [
+ {
+ "population": "AMR_AF",
+ "alleleFrequency": -1
+ }
+ ],
+ "source": "The Genome Aggregation Database (gnomAD)",
+ "sourceReference": "https://gnomad.broadinstitute.org"
+ },
+ {
+ "frequencies": [
+ {
+ "alleleFrequency": -1,
+ "population": "EAS_AF"
+ }
+ ],
+ "source": "The Genome Aggregation Database (gnomAD)",
+ "sourceReference": "https://gnomad.broadinstitute.org"
+ },
+ {
+ "frequencies": [
+ {
+ "population": "EUR_AF",
+ "alleleFrequency": -1
+ }
+ ],
+ "sourceReference": "https://gnomad.broadinstitute.org",
+ "source": "The Genome Aggregation Database (gnomAD)"
+ },
+ {
+ "frequencies": [
+ {
+ "alleleFrequency": -1,
+ "population": "SAS_AF"
+ }
+ ],
+ "sourceReference": "https://gnomad.broadinstitute.org",
+ "source": "The Genome Aggregation Database (gnomAD)"
+ }
+ ],
+ "variantLevelData": {
+ "clinicalInterpretations": [
+ null
+ ],
+ "phenotypicEffects": [
+ "MODIFIER"
+ ]
+ }
+ },
+ {
+ "variantLevelData": {
+ "phenotypicEffects": [
+ "MODIFIER"
+ ],
+ "clinicalInterpretations": [
+ null
+ ]
+ },
+ "frequencyInPopulations": [
+ {
+ "frequencies": [
+ {
+ "alleleFrequency": -1,
+ "population": "AFR_AF"
+ }
+ ],
+ "source": "The Genome Aggregation Database (gnomAD)",
+ "sourceReference": "https://gnomad.broadinstitute.org"
+ },
+ {
+ "source": "The Genome Aggregation Database (gnomAD)",
+ "sourceReference": "https://gnomad.broadinstitute.org",
+ "frequencies": [
+ {
+ "alleleFrequency": -1,
+ "population": "AMR_AF"
+ }
+ ]
+ },
+ {
+ "frequencies": [
+ {
+ "alleleFrequency": -1,
+ "population": "EAS_AF"
+ }
+ ],
+ "sourceReference": "https://gnomad.broadinstitute.org",
+ "source": "The Genome Aggregation Database (gnomAD)"
+ },
+ {
+ "frequencies": [
+ {
+ "population": "EUR_AF",
+ "alleleFrequency": -1
+ }
+ ],
+ "source": "The Genome Aggregation Database (gnomAD)",
+ "sourceReference": "https://gnomad.broadinstitute.org"
+ },
+ {
+ "frequencies": [
+ {
+ "alleleFrequency": -1,
+ "population": "SAS_AF"
+ }
+ ],
+ "source": "The Genome Aggregation Database (gnomAD)",
+ "sourceReference": "https://gnomad.broadinstitute.org"
+ }
+ ],
+ "alternateBases": "T",
+ "variantType": "SNP",
+ "caseLevelData": [
+ {
+ "biosampleId": "NA24695",
+ "individualId": "NA24695"
+ },
+ {
+ "biosampleId": "NA24694",
+ "individualId": "NA24694"
+ },
+ {
+ "individualId": "NA24631",
+ "biosampleId": "NA24631"
+ }
+ ],
+ "molecularAttributes": {
+ "geneIds": [
+ "CHR_START-MIR3648-1"
+ ],
+ "molecularEffects": [
+ "MODIFIER"
+ ],
+ "aminoacidChanges": [
+ null
+ ]
+ },
+ "position": {
+ "end": [
+ 9411410
+ ],
+ "refseqId": "21",
+ "start": [
+ 9411409
+ ],
+ "assemblyId": "hs37"
+ },
+ "variantInternalId": "chr21_9411410_C_T",
+ "referenceBases": "C",
+ "identifiers": {
+ "clinVarIds": [
+ null
+ ],
+ "genomicHGVSId": [
+ null
+ ],
+ "proteinHGVSIds": [
+ null
+ ]
+ }
+ },
+ {
+ "frequencyInPopulations": [
+ {
+ "source": "The Genome Aggregation Database (gnomAD)",
+ "sourceReference": "https://gnomad.broadinstitute.org",
+ "frequencies": [
+ {
+ "population": "AFR_AF",
+ "alleleFrequency": -1
+ }
+ ]
+ },
+ {
+ "frequencies": [
+ {
+ "alleleFrequency": -1,
+ "population": "AMR_AF"
+ }
+ ],
+ "sourceReference": "https://gnomad.broadinstitute.org",
+ "source": "The Genome Aggregation Database (gnomAD)"
+ },
+ {
+ "source": "The Genome Aggregation Database (gnomAD)",
+ "sourceReference": "https://gnomad.broadinstitute.org",
+ "frequencies": [
+ {
+ "alleleFrequency": -1,
+ "population": "EAS_AF"
+ }
+ ]
+ },
+ {
+ "source": "The Genome Aggregation Database (gnomAD)",
+ "sourceReference": "https://gnomad.broadinstitute.org",
+ "frequencies": [
+ {
+ "population": "EUR_AF",
+ "alleleFrequency": -1
+ }
+ ]
+ },
+ {
+ "sourceReference": "https://gnomad.broadinstitute.org",
+ "source": "The Genome Aggregation Database (gnomAD)",
+ "frequencies": [
+ {
+ "population": "SAS_AF",
+ "alleleFrequency": -1
+ }
+ ]
+ }
+ ],
+ "alternateBases": "T",
+ "variantType": "SNP",
+ "variantLevelData": {
+ "clinicalInterpretations": [
+ null
+ ],
+ "phenotypicEffects": [
+ "MODIFIER"
+ ]
+ },
+ "position": {
+ "assemblyId": "hs37",
+ "refseqId": "21",
+ "end": [
+ 9411500
+ ],
+ "start": [
+ 9411499
+ ]
+ },
+ "variantInternalId": "chr21_9411500_G_T",
+ "referenceBases": "G",
+ "identifiers": {
+ "clinVarIds": [
+ null
+ ],
+ "proteinHGVSIds": [
+ null
+ ],
+ "genomicHGVSId": [
+ null
+ ]
+ },
+ "caseLevelData": [
+ {
+ "biosampleId": "NA24695",
+ "individualId": "NA24695"
+ },
+ {
+ "biosampleId": "NA24694",
+ "individualId": "NA24694"
+ },
+ {
+ "biosampleId": "NA24631",
+ "individualId": "NA24631"
+ }
+ ],
+ "molecularAttributes": {
+ "molecularEffects": [
+ "MODIFIER"
+ ],
+ "aminoacidChanges": [
+ null
+ ],
+ "geneIds": [
+ "CHR_START-MIR3648-1"
+ ]
+ }
+ },
+ {
+ "variantInternalId": "chr21_9411602_T_C",
+ "position": {
+ "assemblyId": "hs37",
+ "end": [
+ 9411602
+ ],
+ "refseqId": "21",
+ "start": [
+ 9411601
+ ]
+ },
+ "referenceBases": "T",
+ "identifiers": {
+ "clinVarIds": [
+ null
+ ],
+ "proteinHGVSIds": [
+ null
+ ],
+ "genomicHGVSId": [
+ null
+ ]
+ },
+ "molecularAttributes": {
+ "geneIds": [
+ "CHR_START-MIR3648-1"
+ ],
+ "molecularEffects": [
+ "MODIFIER"
+ ],
+ "aminoacidChanges": [
+ null
+ ]
+ },
+ "caseLevelData": [
+ {
+ "individualId": "NA24695",
+ "biosampleId": "NA24695"
+ },
+ {
+ "individualId": "NA24694",
+ "biosampleId": "NA24694"
+ },
+ {
+ "biosampleId": "NA24631",
+ "individualId": "NA24631"
+ }
+ ],
+ "frequencyInPopulations": [
+ {
+ "frequencies": [
+ {
+ "alleleFrequency": -1,
+ "population": "AFR_AF"
+ }
+ ],
+ "source": "The Genome Aggregation Database (gnomAD)",
+ "sourceReference": "https://gnomad.broadinstitute.org"
+ },
+ {
+ "frequencies": [
+ {
+ "alleleFrequency": -1,
+ "population": "AMR_AF"
+ }
+ ],
+ "source": "The Genome Aggregation Database (gnomAD)",
+ "sourceReference": "https://gnomad.broadinstitute.org"
+ },
+ {
+ "sourceReference": "https://gnomad.broadinstitute.org",
+ "source": "The Genome Aggregation Database (gnomAD)",
+ "frequencies": [
+ {
+ "alleleFrequency": -1,
+ "population": "EAS_AF"
+ }
+ ]
+ },
+ {
+ "sourceReference": "https://gnomad.broadinstitute.org",
+ "source": "The Genome Aggregation Database (gnomAD)",
+ "frequencies": [
+ {
+ "alleleFrequency": -1,
+ "population": "EUR_AF"
+ }
+ ]
+ },
+ {
+ "source": "The Genome Aggregation Database (gnomAD)",
+ "sourceReference": "https://gnomad.broadinstitute.org",
+ "frequencies": [
+ {
+ "population": "SAS_AF",
+ "alleleFrequency": -1
+ }
+ ]
+ }
+ ],
+ "alternateBases": "C",
+ "variantType": "SNP",
+ "variantLevelData": {
+ "phenotypicEffects": [
+ "MODIFIER"
+ ],
+ "clinicalInterpretations": [
+ null
+ ]
+ }
+ },
+ {
+ "variantLevelData": {
+ "clinicalInterpretations": [
+ null
+ ],
+ "phenotypicEffects": [
+ "MODIFIER"
+ ]
+ },
+ "frequencyInPopulations": [
+ {
+ "frequencies": [
+ {
+ "alleleFrequency": -1,
+ "population": "AFR_AF"
+ }
+ ],
+ "source": "The Genome Aggregation Database (gnomAD)",
+ "sourceReference": "https://gnomad.broadinstitute.org"
+ },
+ {
+ "frequencies": [
+ {
+ "alleleFrequency": -1,
+ "population": "AMR_AF"
+ }
+ ],
+ "source": "The Genome Aggregation Database (gnomAD)",
+ "sourceReference": "https://gnomad.broadinstitute.org"
+ },
+ {
+ "sourceReference": "https://gnomad.broadinstitute.org",
+ "source": "The Genome Aggregation Database (gnomAD)",
+ "frequencies": [
+ {
+ "population": "EAS_AF",
+ "alleleFrequency": -1
+ }
+ ]
+ },
+ {
+ "source": "The Genome Aggregation Database (gnomAD)",
+ "sourceReference": "https://gnomad.broadinstitute.org",
+ "frequencies": [
+ {
+ "population": "EUR_AF",
+ "alleleFrequency": -1
+ }
+ ]
+ },
+ {
+ "sourceReference": "https://gnomad.broadinstitute.org",
+ "source": "The Genome Aggregation Database (gnomAD)",
+ "frequencies": [
+ {
+ "population": "SAS_AF",
+ "alleleFrequency": -1
+ }
+ ]
+ }
+ ],
+ "variantType": "SNP",
+ "alternateBases": "T",
+ "caseLevelData": [
+ {
+ "individualId": "NA24695",
+ "biosampleId": "NA24695"
+ },
+ {
+ "biosampleId": "NA24694",
+ "individualId": "NA24694"
+ },
+ {
+ "individualId": "NA24631",
+ "biosampleId": "NA24631"
+ }
+ ],
+ "molecularAttributes": {
+ "molecularEffects": [
+ "MODIFIER"
+ ],
+ "aminoacidChanges": [
+ null
+ ],
+ "geneIds": [
+ "CHR_START-MIR3648-1"
+ ]
+ },
+ "position": {
+ "refseqId": "21",
+ "end": [
+ 9411609
+ ],
+ "start": [
+ 9411608
+ ],
+ "assemblyId": "hs37"
+ },
+ "variantInternalId": "chr21_9411609_G_T",
+ "referenceBases": "G",
+ "identifiers": {
+ "clinVarIds": [
+ null
+ ],
+ "proteinHGVSIds": [
+ null
+ ],
+ "genomicHGVSId": [
+ null
+ ]
+ }
+ },
+ {
+ "variantInternalId": "chr21_9411645_A_G",
+ "position": {
+ "assemblyId": "hs37",
+ "start": [
+ 9411644
+ ],
+ "end": [
+ 9411645
+ ],
+ "refseqId": "21"
+ },
+ "identifiers": {
+ "clinVarIds": [
+ null
+ ],
+ "proteinHGVSIds": [
+ null
+ ],
+ "genomicHGVSId": [
+ null
+ ]
+ },
+ "referenceBases": "A",
+ "molecularAttributes": {
+ "molecularEffects": [
+ "MODIFIER"
+ ],
+ "aminoacidChanges": [
+ null
+ ],
+ "geneIds": [
+ "CHR_START-MIR3648-1"
+ ]
+ },
+ "caseLevelData": [
+ {
+ "individualId": "NA24695",
+ "biosampleId": "NA24695"
+ },
+ {
+ "biosampleId": "NA24694",
+ "individualId": "NA24694"
+ },
+ {
+ "individualId": "NA24631",
+ "biosampleId": "NA24631"
+ }
+ ],
+ "frequencyInPopulations": [
+ {
+ "sourceReference": "https://gnomad.broadinstitute.org",
+ "source": "The Genome Aggregation Database (gnomAD)",
+ "frequencies": [
+ {
+ "population": "AFR_AF",
+ "alleleFrequency": -1
+ }
+ ]
+ },
+ {
+ "frequencies": [
+ {
+ "population": "AMR_AF",
+ "alleleFrequency": -1
+ }
+ ],
+ "source": "The Genome Aggregation Database (gnomAD)",
+ "sourceReference": "https://gnomad.broadinstitute.org"
+ },
+ {
+ "sourceReference": "https://gnomad.broadinstitute.org",
+ "source": "The Genome Aggregation Database (gnomAD)",
+ "frequencies": [
+ {
+ "population": "EAS_AF",
+ "alleleFrequency": -1
+ }
+ ]
+ },
+ {
+ "frequencies": [
+ {
+ "population": "EUR_AF",
+ "alleleFrequency": -1
+ }
+ ],
+ "sourceReference": "https://gnomad.broadinstitute.org",
+ "source": "The Genome Aggregation Database (gnomAD)"
+ },
+ {
+ "sourceReference": "https://gnomad.broadinstitute.org",
+ "source": "The Genome Aggregation Database (gnomAD)",
+ "frequencies": [
+ {
+ "population": "SAS_AF",
+ "alleleFrequency": -1
+ }
+ ]
+ }
+ ],
+ "variantType": "SNP",
+ "alternateBases": "G",
+ "variantLevelData": {
+ "clinicalInterpretations": [
+ null
+ ],
+ "phenotypicEffects": [
+ "MODIFIER"
+ ]
+ }
+ },
+ {
+ "frequencyInPopulations": [
+ {
+ "sourceReference": "https://gnomad.broadinstitute.org",
+ "source": "The Genome Aggregation Database (gnomAD)",
+ "frequencies": [
+ {
+ "population": "AFR_AF",
+ "alleleFrequency": -1
+ }
+ ]
+ },
+ {
+ "frequencies": [
+ {
+ "alleleFrequency": -1,
+ "population": "AMR_AF"
+ }
+ ],
+ "source": "The Genome Aggregation Database (gnomAD)",
+ "sourceReference": "https://gnomad.broadinstitute.org"
+ },
+ {
+ "sourceReference": "https://gnomad.broadinstitute.org",
+ "source": "The Genome Aggregation Database (gnomAD)",
+ "frequencies": [
+ {
+ "population": "EAS_AF",
+ "alleleFrequency": -1
+ }
+ ]
+ },
+ {
+ "source": "The Genome Aggregation Database (gnomAD)",
+ "sourceReference": "https://gnomad.broadinstitute.org",
+ "frequencies": [
+ {
+ "population": "EUR_AF",
+ "alleleFrequency": -1
+ }
+ ]
+ },
+ {
+ "frequencies": [
+ {
+ "population": "SAS_AF",
+ "alleleFrequency": -1
+ }
+ ],
+ "sourceReference": "https://gnomad.broadinstitute.org",
+ "source": "The Genome Aggregation Database (gnomAD)"
+ }
+ ],
+ "alternateBases": "T",
+ "variantType": "SNP",
+ "variantLevelData": {
+ "clinicalInterpretations": [
+ null
+ ],
+ "phenotypicEffects": [
+ "MODIFIER"
+ ]
+ },
+ "position": {
+ "assemblyId": "hs37",
+ "end": [
+ 9411785
+ ],
+ "refseqId": "21",
+ "start": [
+ 9411784
+ ]
+ },
+ "variantInternalId": "chr21_9411785_G_T",
+ "referenceBases": "G",
+ "identifiers": {
+ "genomicHGVSId": [
+ null
+ ],
+ "proteinHGVSIds": [
+ null
+ ],
+ "clinVarIds": [
+ null
+ ]
+ },
+ "caseLevelData": [
+ {
+ "biosampleId": "NA24695",
+ "individualId": "NA24695"
+ },
+ {
+ "individualId": "NA24694",
+ "biosampleId": "NA24694"
+ },
+ {
+ "biosampleId": "NA24631",
+ "individualId": "NA24631"
+ }
+ ],
+ "molecularAttributes": {
+ "aminoacidChanges": [
+ null
+ ],
+ "molecularEffects": [
+ "MODIFIER"
+ ],
+ "geneIds": [
+ "CHR_START-MIR3648-1"
+ ]
+ }
+ },
+ {
+ "caseLevelData": [
+ {
+ "biosampleId": "NA24695",
+ "individualId": "NA24695"
+ },
+ {
+ "individualId": "NA24694",
+ "biosampleId": "NA24694"
+ },
+ {
+ "biosampleId": "NA24631",
+ "individualId": "NA24631"
+ }
+ ],
+ "molecularAttributes": {
+ "aminoacidChanges": [
+ null
+ ],
+ "molecularEffects": [
+ "MODIFIER"
+ ],
+ "geneIds": [
+ "CHR_START-MIR3648-1"
+ ]
+ },
+ "position": {
+ "refseqId": "21",
+ "end": [
+ 9412269
+ ],
+ "start": [
+ 9412268
+ ],
+ "assemblyId": "hs37"
+ },
+ "variantInternalId": "chr21_9412269_A_T",
+ "referenceBases": "A",
+ "identifiers": {
+ "genomicHGVSId": [
+ null
+ ],
+ "proteinHGVSIds": [
+ null
+ ],
+ "clinVarIds": [
+ null
+ ]
+ },
+ "variantLevelData": {
+ "phenotypicEffects": [
+ "MODIFIER"
+ ],
+ "clinicalInterpretations": [
+ null
+ ]
+ },
+ "frequencyInPopulations": [
+ {
+ "sourceReference": "https://gnomad.broadinstitute.org",
+ "source": "The Genome Aggregation Database (gnomAD)",
+ "frequencies": [
+ {
+ "alleleFrequency": -1,
+ "population": "AFR_AF"
+ }
+ ]
+ },
+ {
+ "sourceReference": "https://gnomad.broadinstitute.org",
+ "source": "The Genome Aggregation Database (gnomAD)",
+ "frequencies": [
+ {
+ "alleleFrequency": -1,
+ "population": "AMR_AF"
+ }
+ ]
+ },
+ {
+ "source": "The Genome Aggregation Database (gnomAD)",
+ "sourceReference": "https://gnomad.broadinstitute.org",
+ "frequencies": [
+ {
+ "population": "EAS_AF",
+ "alleleFrequency": -1
+ }
+ ]
+ },
+ {
+ "frequencies": [
+ {
+ "population": "EUR_AF",
+ "alleleFrequency": -1
+ }
+ ],
+ "source": "The Genome Aggregation Database (gnomAD)",
+ "sourceReference": "https://gnomad.broadinstitute.org"
+ },
+ {
+ "source": "The Genome Aggregation Database (gnomAD)",
+ "sourceReference": "https://gnomad.broadinstitute.org",
+ "frequencies": [
+ {
+ "population": "SAS_AF",
+ "alleleFrequency": -1
+ }
+ ]
+ }
+ ],
+ "variantType": "SNP",
+ "alternateBases": "T"
+ },
+ {
+ "frequencyInPopulations": [
+ {
+ "source": "The Genome Aggregation Database (gnomAD)",
+ "sourceReference": "https://gnomad.broadinstitute.org",
+ "frequencies": [
+ {
+ "alleleFrequency": -1,
+ "population": "AFR_AF"
+ }
+ ]
+ },
+ {
+ "frequencies": [
+ {
+ "alleleFrequency": -1,
+ "population": "AMR_AF"
+ }
+ ],
+ "sourceReference": "https://gnomad.broadinstitute.org",
+ "source": "The Genome Aggregation Database (gnomAD)"
+ },
+ {
+ "sourceReference": "https://gnomad.broadinstitute.org",
+ "source": "The Genome Aggregation Database (gnomAD)",
+ "frequencies": [
+ {
+ "population": "EAS_AF",
+ "alleleFrequency": -1
+ }
+ ]
+ },
+ {
+ "frequencies": [
+ {
+ "alleleFrequency": -1,
+ "population": "EUR_AF"
+ }
+ ],
+ "sourceReference": "https://gnomad.broadinstitute.org",
+ "source": "The Genome Aggregation Database (gnomAD)"
+ },
+ {
+ "sourceReference": "https://gnomad.broadinstitute.org",
+ "source": "The Genome Aggregation Database (gnomAD)",
+ "frequencies": [
+ {
+ "alleleFrequency": -1,
+ "population": "SAS_AF"
+ }
+ ]
+ }
+ ],
+ "variantType": "INDEL",
+ "alternateBases": "T",
+ "variantLevelData": {
+ "phenotypicEffects": [
+ "MODIFIER"
+ ],
+ "clinicalInterpretations": [
+ null
+ ]
+ },
+ "variantInternalId": "chr21_9412358_TA_T",
+ "position": {
+ "assemblyId": "hs37",
+ "start": [
+ 9412357
+ ],
+ "refseqId": "21",
+ "end": [
+ 9412359
+ ]
+ },
+ "identifiers": {
+ "genomicHGVSId": [
+ null
+ ],
+ "proteinHGVSIds": [
+ null
+ ],
+ "clinVarIds": [
+ null
+ ]
+ },
+ "referenceBases": "TA",
+ "molecularAttributes": {
+ "aminoacidChanges": [
+ null
+ ],
+ "molecularEffects": [
+ "MODIFIER"
+ ],
+ "geneIds": [
+ "CHR_START-MIR3648-1"
+ ]
+ },
+ "caseLevelData": [
+ {
+ "biosampleId": "NA24694",
+ "individualId": "NA24694"
+ }
+ ]
+ },
+ {
+ "caseLevelData": [
+ {
+ "individualId": "NA24695",
+ "biosampleId": "NA24695"
+ },
+ {
+ "individualId": "NA24631",
+ "biosampleId": "NA24631"
+ }
+ ],
+ "molecularAttributes": {
+ "geneIds": [
+ "CHR_START-MIR3648-1"
+ ],
+ "molecularEffects": [
+ "MODIFIER"
+ ],
+ "aminoacidChanges": [
+ null
+ ]
+ },
+ "position": {
+ "assemblyId": "hs37",
+ "start": [
+ 9412357
+ ],
+ "refseqId": "21",
+ "end": [
+ 9412358
+ ]
+ },
+ "variantInternalId": "chr21_9412358_T_TA",
+ "referenceBases": "T",
+ "identifiers": {
+ "clinVarIds": [
+ null
+ ],
+ "genomicHGVSId": [
+ null
+ ],
+ "proteinHGVSIds": [
+ null
+ ]
+ },
+ "variantLevelData": {
+ "clinicalInterpretations": [
+ null
+ ],
+ "phenotypicEffects": [
+ "MODIFIER"
+ ]
+ },
+ "frequencyInPopulations": [
+ {
+ "frequencies": [
+ {
+ "population": "AFR_AF",
+ "alleleFrequency": -1
+ }
+ ],
+ "source": "The Genome Aggregation Database (gnomAD)",
+ "sourceReference": "https://gnomad.broadinstitute.org"
+ },
+ {
+ "source": "The Genome Aggregation Database (gnomAD)",
+ "sourceReference": "https://gnomad.broadinstitute.org",
+ "frequencies": [
+ {
+ "alleleFrequency": -1,
+ "population": "AMR_AF"
+ }
+ ]
+ },
+ {
+ "frequencies": [
+ {
+ "population": "EAS_AF",
+ "alleleFrequency": -1
+ }
+ ],
+ "sourceReference": "https://gnomad.broadinstitute.org",
+ "source": "The Genome Aggregation Database (gnomAD)"
+ },
+ {
+ "frequencies": [
+ {
+ "alleleFrequency": -1,
+ "population": "EUR_AF"
+ }
+ ],
+ "source": "The Genome Aggregation Database (gnomAD)",
+ "sourceReference": "https://gnomad.broadinstitute.org"
+ },
+ {
+ "source": "The Genome Aggregation Database (gnomAD)",
+ "sourceReference": "https://gnomad.broadinstitute.org",
+ "frequencies": [
+ {
+ "population": "SAS_AF",
+ "alleleFrequency": -1
+ }
+ ]
+ }
+ ],
+ "alternateBases": "TA",
+ "variantType": "INDEL"
+ },
+ {
+ "frequencyInPopulations": [
+ {
+ "sourceReference": "https://gnomad.broadinstitute.org",
+ "source": "The Genome Aggregation Database (gnomAD)",
+ "frequencies": [
+ {
+ "population": "AFR_AF",
+ "alleleFrequency": -1
+ }
+ ]
+ },
+ {
+ "source": "The Genome Aggregation Database (gnomAD)",
+ "sourceReference": "https://gnomad.broadinstitute.org",
+ "frequencies": [
+ {
+ "population": "AMR_AF",
+ "alleleFrequency": -1
+ }
+ ]
+ },
+ {
+ "sourceReference": "https://gnomad.broadinstitute.org",
+ "source": "The Genome Aggregation Database (gnomAD)",
+ "frequencies": [
+ {
+ "population": "EAS_AF",
+ "alleleFrequency": -1
+ }
+ ]
+ },
+ {
+ "source": "The Genome Aggregation Database (gnomAD)",
+ "sourceReference": "https://gnomad.broadinstitute.org",
+ "frequencies": [
+ {
+ "alleleFrequency": -1,
+ "population": "EUR_AF"
+ }
+ ]
+ },
+ {
+ "sourceReference": "https://gnomad.broadinstitute.org",
+ "source": "The Genome Aggregation Database (gnomAD)",
+ "frequencies": [
+ {
+ "population": "SAS_AF",
+ "alleleFrequency": -1
+ }
+ ]
+ }
+ ],
+ "alternateBases": "T",
+ "variantType": "INDEL",
+ "variantLevelData": {
+ "clinicalInterpretations": [
+ null
+ ],
+ "phenotypicEffects": [
+ "MODIFIER"
+ ]
+ },
+ "variantInternalId": "chr21_9412441_TATA_T",
+ "position": {
+ "assemblyId": "hs37",
+ "start": [
+ 9412440
+ ],
+ "refseqId": "21",
+ "end": [
+ 9412444
+ ]
+ },
+ "identifiers": {
+ "genomicHGVSId": [
+ null
+ ],
+ "proteinHGVSIds": [
+ null
+ ],
+ "clinVarIds": [
+ null
+ ]
+ },
+ "referenceBases": "TATA",
+ "molecularAttributes": {
+ "geneIds": [
+ "CHR_START-MIR3648-1"
+ ],
+ "aminoacidChanges": [
+ null
+ ],
+ "molecularEffects": [
+ "MODIFIER"
+ ]
+ },
+ "caseLevelData": [
+ {
+ "individualId": "NA24695",
+ "biosampleId": "NA24695"
+ },
+ {
+ "individualId": "NA24694",
+ "biosampleId": "NA24694"
+ },
+ {
+ "biosampleId": "NA24631",
+ "individualId": "NA24631"
+ }
+ ]
+ },
+ {
+ "variantInternalId": "chr21_9412503_C_A",
+ "position": {
+ "end": [
+ 9412503
+ ],
+ "refseqId": "21",
+ "start": [
+ 9412502
+ ],
+ "assemblyId": "hs37"
+ },
+ "referenceBases": "C",
+ "identifiers": {
+ "genomicHGVSId": [
+ null
+ ],
+ "proteinHGVSIds": [
+ null
+ ],
+ "clinVarIds": [
+ null
+ ]
+ },
+ "molecularAttributes": {
+ "geneIds": [
+ "CHR_START-MIR3648-1"
+ ],
+ "molecularEffects": [
+ "MODIFIER"
+ ],
+ "aminoacidChanges": [
+ null
+ ]
+ },
+ "caseLevelData": [
+ {
+ "biosampleId": "NA24695",
+ "individualId": "NA24695"
+ },
+ {
+ "biosampleId": "NA24694",
+ "individualId": "NA24694"
+ },
+ {
+ "biosampleId": "NA24631",
+ "individualId": "NA24631"
+ }
+ ],
+ "frequencyInPopulations": [
+ {
+ "frequencies": [
+ {
+ "population": "AFR_AF",
+ "alleleFrequency": -1
+ }
+ ],
+ "sourceReference": "https://gnomad.broadinstitute.org",
+ "source": "The Genome Aggregation Database (gnomAD)"
+ },
+ {
+ "source": "The Genome Aggregation Database (gnomAD)",
+ "sourceReference": "https://gnomad.broadinstitute.org",
+ "frequencies": [
+ {
+ "alleleFrequency": -1,
+ "population": "AMR_AF"
+ }
+ ]
+ },
+ {
+ "sourceReference": "https://gnomad.broadinstitute.org",
+ "source": "The Genome Aggregation Database (gnomAD)",
+ "frequencies": [
+ {
+ "population": "EAS_AF",
+ "alleleFrequency": -1
+ }
+ ]
+ },
+ {
+ "frequencies": [
+ {
+ "alleleFrequency": -1,
+ "population": "EUR_AF"
+ }
+ ],
+ "source": "The Genome Aggregation Database (gnomAD)",
+ "sourceReference": "https://gnomad.broadinstitute.org"
+ },
+ {
+ "frequencies": [
+ {
+ "population": "SAS_AF",
+ "alleleFrequency": -1
+ }
+ ],
+ "sourceReference": "https://gnomad.broadinstitute.org",
+ "source": "The Genome Aggregation Database (gnomAD)"
+ }
+ ],
+ "alternateBases": "A",
+ "variantType": "SNP",
+ "variantLevelData": {
+ "clinicalInterpretations": [
+ null
+ ],
+ "phenotypicEffects": [
+ "MODIFIER"
+ ]
+ }
+ }
+]
diff --git a/deploy/data/individuals.json b/deploy/data/individuals.json
new file mode 100644
index 0000000..8f44c93
--- /dev/null
+++ b/deploy/data/individuals.json
@@ -0,0 +1,95 @@
+[
+ {
+ "diseases": [
+ {
+ "diseaseCode": {
+ "id": "HP:000054",
+ "label": "intolerance"
+ }
+ }
+ ],
+ "ethnicity": {
+ "id": "HANCESTRO:0021",
+ "label": "Han Chinese"
+ },
+ "geographicOrigin": {
+ "id": "GAZ:00002459",
+ "label": "United States of America"
+ },
+ "id": "NA24631",
+ "phenotypicFeatures": [
+ {
+ "featureType": {
+ "id": "NCIT:C3001",
+ "label": "NCIT:C3001"
+ }
+ }
+ ],
+ "sex": {
+ "id": "NCIT:C46112",
+ "label": "male"
+ }
+ },
+ {
+ "diseases": [
+ {
+ "diseaseCode": {
+ "id": "HP:0008711",
+ "label": "prostatic hyperplasia"
+ }
+ }
+ ],
+ "ethnicity": {
+ "id": "HANCESTRO:0021",
+ "label": "Han Chinese"
+ },
+ "geographicOrigin": {
+ "id": "GAZ:00002459",
+ "label": "United States of America"
+ },
+ "id": "NA24694",
+ "phenotypicFeatures": [
+ {
+ "featureType": {
+ "id": "NCIT:C37967",
+ "label": "NCIT:C37967"
+ }
+ }
+ ],
+ "sex": {
+ "id": "NCIT:C46112",
+ "label": "male"
+ }
+ },
+ {
+ "diseases": [
+ {
+ "diseaseCode": {
+ "id": "DOID:6364",
+ "label": "migraine"
+ }
+ }
+ ],
+ "ethnicity": {
+ "id": "HANCESTRO:0021",
+ "label": "Han Chinese"
+ },
+ "geographicOrigin": {
+ "id": "GAZ:00002459",
+ "label": "United States of America"
+ },
+ "id": "NA24695",
+ "phenotypicFeatures": [
+ {
+ "featureType": {
+ "id": "HP:0000938",
+ "label": "HP:0000938"
+ }
+ }
+ ],
+ "sex": {
+ "id": "NCIT:C16576",
+ "label": "female"
+ }
+ }
+]
diff --git a/deploy/data/runs.json b/deploy/data/runs.json
new file mode 100644
index 0000000..df9f3b0
--- /dev/null
+++ b/deploy/data/runs.json
@@ -0,0 +1,56 @@
+[
+ {
+ "biosampleId": "S0001",
+ "id": "INT_ID1",
+ "individualId": "NA24631",
+ "libraryLayout": "PAIRED",
+ "librarySelection": "LD-PCR",
+ "librarySource": {
+ "id": "NNN:01",
+ "label": "KAPA library quantification kit"
+ },
+ "libraryStrategy": "WGS",
+ "platform": "Illumina ",
+ "runDate": "2017-04-30",
+ "platformModel": {
+ "id": "MODEL:HiSeq 2500 ",
+ "label": "2017-04-30"
+ }
+ },
+ {
+ "biosampleId": "S0002",
+ "id": "INT_ID2",
+ "individualId": "NA24694",
+ "libraryLayout": "PAIRED",
+ "librarySelection": "LD-PCR",
+ "librarySource": {
+ "id": "NNN:01",
+ "label": "KAPA library quantification kit"
+ },
+ "libraryStrategy": "WGS",
+ "platform": "Illumina ",
+ "runDate": "2017-04-30",
+ "platformModel": {
+ "id": "MODEL:HiSeq 2500 ",
+ "label": "2017-04-30"
+ }
+ },
+ {
+ "biosampleId": "S0003",
+ "id": "INT_ID3",
+ "individualId": "NA24695",
+ "libraryLayout": "PAIRED",
+ "runDate": "2017-04-30",
+ "librarySelection": "LD-PCR",
+ "librarySource": {
+ "id": "NNN:01",
+ "label": "KAPA library quantification kit"
+ },
+ "libraryStrategy": "WGS",
+ "platform": "Illumina ",
+ "platformModel": {
+ "id": "MODEL:HiSeq 2500 ",
+ "label": "2017-04-30"
+ }
+ }
+]
diff --git a/deploy/docker-compose.yml b/deploy/docker-compose.yml
new file mode 100644
index 0000000..59112a8
--- /dev/null
+++ b/deploy/docker-compose.yml
@@ -0,0 +1,151 @@
+version: '3.1'
+
+networks:
+ beacon-priv:
+ idp-priv:
+ pub:
+
+services:
+
+ ###########################################
+ # beacon-ri-tools
+ ###########################################
+
+ beacon-ri-tools:
+ image: beacon2ri/beacon_reference_implementation:v2.0.0
+ hostname: beacon-ri-tools
+ networks:
+ - beacon-priv
+ tty: true
+
+ ###########################################
+ # training-ui
+ ###########################################
+
+ training-ui:
+ image: beacon2ri/training_ui:v0.1
+ hostname: beacon_training_ui
+ ports:
+ - 8080:8080
+ networks:
+ - beacon-priv
+
+ ###########################################
+ # MongoDB Database
+ ###########################################
+
+ db:
+ image: mongo:5
+ hostname: mongo
+ ports:
+ - 27017:27017
+ environment:
+ MONGO_INITDB_ROOT_USERNAME: root
+ MONGO_INITDB_ROOT_PASSWORD: example
+ MONGO_INITDB_DATABASE: beacon
+ volumes:
+ - ./mongo-init/:/docker-entrypoint-initdb.d/:ro
+ networks:
+ - beacon-priv
+
+ mongo-express:
+ image: mongo-express
+ restart: always
+ ports:
+ - 8081:8081
+ environment:
+ ME_CONFIG_MONGODB_ADMINUSERNAME: root
+ ME_CONFIG_MONGODB_ADMINPASSWORD: example
+ ME_CONFIG_MONGODB_URL: mongodb://root:example@mongo:27017/
+ networks:
+ - beacon-priv
+
+ ###########################################
+ # Beacon
+ ###########################################
+
+ beacon:
+ build: ..
+ image: egarchive/beacon:2.0
+ hostname: beacon
+ container_name: beacon
+ volumes:
+ # - ../beacon:/beacon/beacon # inject the code, so we see the modifications "live"
+ # - ../ui/static:/beacon/ui/static
+ # - ../ui/templates:/beacon/ui/templates
+ - ./conf.py:/beacon/beacon/conf.py
+ - ./logger.yml:/beacon/beacon/logger.yml
+ - ./ontologies:/beacon/ontologies
+ ports:
+ - "5050:5050"
+ networks:
+ - beacon-priv
+ - pub
+ working_dir: '/beacon'
+ entrypoint: ['python','-m','beacon']
+ # entrypoint: ['/bin/sleep','100000000']
+
+ ###########################################
+ # Dummy Permissions server
+ ###########################################
+
+ permissions:
+ image: egarchive/beacon:2.0
+ hostname: beacon-permissions
+ container_name: beacon-permissions
+ volumes:
+ - ../permissions/:/beacon/permissions/ # inject the code, so we see the modifications "live"
+ - ./logger.yml:/beacon/logger.yml
+ ports:
+ - "5051:5051"
+ networks:
+ - beacon-priv
+ - pub
+ #entrypoint: ['/bin/sleep','100000000']
+ working_dir: '/beacon'
+ entrypoint: ['python','-m', 'permissions']
+
+ ###########################################
+ # Local Identity Provider
+ ###########################################
+ # Keycloak is so slow to boot that the DB goes faster
+ # and we don't need a delay in-between. We can rely on the depends_on only.
+
+ idp:
+ image: jboss/keycloak
+ hostname: idp
+ container_name: idp
+ environment:
+ # - KEYCLOAK_FRONTEND_URL=http://idp:8080/auth
+ # - KEYCLOAK_LOGLEVEL=DEBUG
+ # - ROOT_LOGLEVEL=DEBUG
+ - KEYCLOAK_USER=admin
+ - KEYCLOAK_PASSWORD=secret
+ - DB_USER=admin
+ - DB_PASSWORD=secret
+ - DB_VENDOR=postgres
+ - DB_ADDR=idp-db
+ - DB_PORT=5432
+ - DB_DATABASE=keycloak
+ #- DB_SCHEMA=public
+ - KEYCLOAK_IMPORT=/tmp/beacon-realm.json -Dkeycloak.profile.feature.upload_scripts=enabled
+ volumes:
+ - ./beacon-realm.json:/tmp/beacon-realm.json
+ ports:
+ - "8082:8082"
+ networks:
+ - pub
+ - idp-priv
+ depends_on:
+ - idp-db
+
+ idp-db:
+ image: postgres
+ hostname: idp-db
+ container_name: idp-db
+ environment:
+ - POSTGRES_DB=keycloak
+ - POSTGRES_USER=admin
+ - POSTGRES_PASSWORD=secret
+ networks:
+ - idp-priv
diff --git a/deploy/entrypoint.sh b/deploy/entrypoint.sh
new file mode 100644
index 0000000..b541031
--- /dev/null
+++ b/deploy/entrypoint.sh
@@ -0,0 +1,6 @@
+#!/bin/sh
+set -e
+
+supervisord -c /beacon/supervisord.conf
+
+exec nginx -c /beacon/nginx.conf -g "daemon off;"
\ No newline at end of file
diff --git a/deploy/extract_filtering_terms.py b/deploy/extract_filtering_terms.py
new file mode 100644
index 0000000..af2a506
--- /dev/null
+++ b/deploy/extract_filtering_terms.py
@@ -0,0 +1,207 @@
+import os.path
+import urllib.request
+from typing import List, Dict, Optional
+import re
+from urllib.error import HTTPError
+
+import requests
+import owlready2
+from pymongo.mongo_client import MongoClient
+import progressbar
+from bson.objectid import ObjectId
+from owlready2 import OwlReadyOntologyParsingError
+from tqdm import tqdm
+
+ONTOLOGY_REGEX = re.compile(r"([_A-Za-z]+):(\w+)")
+
+client = MongoClient(
+ "mongodb://127.0.0.1:27017/"
+)
+
+class MyProgressBar:
+ def __init__(self):
+ self.pbar = None
+
+ def __call__(self, block_num: int, block_size: int, total_size: int):
+ if not self.pbar:
+ self.pbar = progressbar.ProgressBar(maxval=total_size)
+ self.pbar.start()
+
+ downloaded = block_num * block_size
+ if downloaded < total_size:
+ self.pbar.update(downloaded)
+ else:
+ self.pbar.finish()
+
+
+def insert_all_ontology_terms_used():
+ collections = client.beacon.list_collection_names()
+ if 'filtering_terms' in collections:
+ collections.remove('filtering_terms')
+ print("Collections:", collections)
+ for c_name in collections:
+ terms = find_ontology_terms_used(c_name)
+ if len(terms) > 0:
+ client.beacon.filtering_terms.insert_many(terms)
+
+
+def get_ontology_name(ontology: owlready2.Ontology) -> str:
+ ontology_url = "https://www.ebi.ac.uk/ols/api/ontologies/{}".format(ontology.name)
+ try:
+ return requests.get(ontology_url).json()["config"]["title"]
+ except:
+ return ontology.name
+
+
+def load_ontology_obo(ontology_id: str) -> Optional[owlready2.Ontology]:
+ if ontology_id.isalpha():
+ url = "https://www.ebi.ac.uk/{}/{}.obo".format(ontology_id.lower(), ontology_id.lower())
+ path = "ontologies/{}.obo".format(ontology_id)
+ try:
+ if not os.path.exists(path):
+ urllib.request.urlretrieve(url, path, MyProgressBar())
+ return owlready2.get_ontology(path).load()
+ except HTTPError:
+ # TODO: Handle error
+ print("ERROR", HTTPError)
+ pass
+ except OwlReadyOntologyParsingError:
+ # TODO: Handle error
+ pass
+
+def load_ontology(ontology_id: str) -> Optional[owlready2.Ontology]:
+ if ontology_id.isalpha():
+ url = "https://www.ebi.ac.uk/ols/ontologies/{}/download".format(ontology_id)
+ path = "ontologies/{}.owl".format(ontology_id)
+ try:
+ if not os.path.exists(path):
+ urllib.request.urlretrieve(url, path, MyProgressBar())
+ return owlready2.get_ontology(path).load()
+ except HTTPError:
+ # TODO: Handle error
+ print("ERROR", HTTPError)
+ pass
+ except OwlReadyOntologyParsingError:
+ # TODO: Handle error
+ pass
+
+
+def get_ontology_term_label(ontology: owlready2.Ontology, term: str) -> Optional[str]:
+ ontology_class_name = term.replace(':', '_')
+ res = ontology.search(iri="*{}".format(ontology_class_name))
+ for c in res:
+ if c.name == ontology_class_name:
+ if len(c.label) > 0:
+ return c.label.first()
+ else:
+ return c.name
+ return None
+
+
+def get_ontology_term_count(collection_name: str, term: str) -> int:
+ query = {
+ '$text': {
+ '$search': '\"' + term + '\"'
+ }
+ }
+ return client.beacon\
+ .get_collection(collection_name)\
+ .count_documents(query)
+
+
+def find_ontology_terms_used(collection_name: str) -> List[Dict]:
+ terms = []
+ terms_ids = set()
+ ontologies = dict()
+ count = client.beacon.get_collection(collection_name).estimated_document_count()
+ xs = client.beacon.get_collection(collection_name).find()
+ for r in tqdm(xs, total=count):
+ matches = ONTOLOGY_REGEX.findall(str(r))
+ for ontology_id, term_id in matches:
+ term = ':'.join([ontology_id, term_id])
+ print(term, ontology_id)
+ if term not in terms_ids:
+ terms_ids.add(term)
+ if ontology_id not in ontologies:
+ ontologies[ontology_id] = load_ontology(ontology_id)
+ if ontologies[ontology_id] is not None:
+ terms.append({
+ 'type': get_ontology_name(ontologies[ontology_id]),
+ 'id': term,
+ 'label': get_ontology_term_label(ontologies[ontology_id], term),
+ # TODO: Use conf.py -> beaconGranularity to not disclouse counts in the filtering terms
+ 'count': get_ontology_term_count(collection_name, term),
+ 'collection': collection_name,
+ })
+ return terms
+
+
+def get_alphanumeric_term_count(collection_name: str, key: str) -> int:
+ return len(client.beacon\
+ .get_collection(collection_name)\
+ .distinct(key))
+
+
+def get_properties_of_document(document, prefix="") -> List[str]:
+ properties = []
+ if document is None or isinstance(document, str) or isinstance(document, int):
+ return []
+ elif isinstance(document, list):
+ for elem in document:
+ properties += get_properties_of_document(elem, prefix)
+ elif isinstance(document, dict):
+ for key, value in document.items():
+ if isinstance(value, ObjectId):
+ continue
+ elif value is None:
+ properties.append(prefix + '.' + key if prefix else key)
+ elif isinstance(value, int):
+ properties.append(prefix + '.' + key if prefix else key)
+ elif isinstance(value, str):
+ properties.append(prefix + '.' + key if prefix else key)
+ elif isinstance(value, list):
+ properties += get_properties_of_document(value, prefix + '.' + key if prefix else key)
+ elif isinstance(value, dict):
+ properties += get_properties_of_document(value, prefix + '.' + key if prefix else key)
+ else:
+ print('Unknown type:', value, ' (', type(value), ')')
+ exit(0)
+ else:
+ print('Unknown type2:', document, ' (', type(document), ')')
+ exit(0)
+ return properties
+
+
+def find_alphanumeric_terms_used(collection_name: str) -> List[Dict]:
+ terms = []
+ terms_ids = set()
+ count = client.beacon.get_collection(collection_name).estimated_document_count()
+ xs = client.beacon.get_collection(collection_name).find()
+ for r in tqdm(xs, total=count):
+ properties = get_properties_of_document(r)
+ for p in properties:
+ if p not in terms_ids:
+ terms_ids.add(p)
+ terms.append({
+ 'type': 'alphanumeric',
+ 'id': p,
+ 'count': get_alphanumeric_term_count(collection_name, p),
+ 'collection': collection_name,
+ })
+ return terms
+
+
+def insert_all_alphanumeric_terms_used():
+ collections = client.beacon.list_collection_names()
+ if 'filtering_terms' in collections:
+ collections.remove('filtering_terms')
+ print("Collections:", collections)
+ for c_name in collections:
+ terms = find_alphanumeric_terms_used(c_name)
+ print(terms)
+ if len(terms) > 0:
+ client.beacon.filtering_terms.insert_many(terms)
+
+
+insert_all_ontology_terms_used()
+insert_all_alphanumeric_terms_used()
diff --git a/deploy/fetch_ontologies.py b/deploy/fetch_ontologies.py
new file mode 100644
index 0000000..c07a13f
--- /dev/null
+++ b/deploy/fetch_ontologies.py
@@ -0,0 +1,48 @@
+# Query MongoDB to retrieve all of the ontologies used
+from typing import Set
+import re
+from urllib.error import HTTPError
+from pymongo.mongo_client import MongoClient
+
+import urllib.request
+import os
+from tqdm import tqdm
+import conf
+
+ONTOLOGY_REGEX = re.compile(r"([_A-Za-z]+):(\w+)")
+
+client = MongoClient(
+ "mongodb://127.0.0.1:27017/")
+def find_all_ontologies_used() -> Set[str]:
+ ontologies = set()
+ for c_name in ["analyses", "biosamples", "cohorts", "genomicVariations", "datasets", "individuals", "runs"]:
+ ontologies_aux = find_ontologies_used(c_name)
+ ontologies = ontologies.union(ontologies_aux)
+ return ontologies
+
+
+def find_ontologies_used(collection_name: str) -> Set[str]:
+ terms = set()
+ count = client.beacon.get_collection(collection_name).estimated_document_count()
+ xs = client.beacon.get_collection(collection_name).find()
+ for r in tqdm(xs, total=count):
+ matches = ONTOLOGY_REGEX.findall(str(r))
+ for match0, match1 in matches:
+ terms.add(match0)
+ return terms
+
+
+# Try to download each of the ontologies to the ontologies folder
+list_of_ontologies = find_all_ontologies_used()
+
+if len(list_of_ontologies) > 0 and not os.path.exists("ontologies"):
+ os.mkdir("ontologies")
+
+for ontology in tqdm(list_of_ontologies):
+ if ontology.isalpha():
+ url = "https://www.ebi.ac.uk/ols/ontologies/{}/download".format(ontology)
+ path = "ontologies/{}.owl".format(ontology)
+ try:
+ response = urllib.request.urlretrieve(url, path)
+ except HTTPError:
+ continue
diff --git a/deploy/generate_json.sh b/deploy/generate_json.sh
new file mode 100644
index 0000000..bc89af5
--- /dev/null
+++ b/deploy/generate_json.sh
@@ -0,0 +1,63 @@
+
+MODEL_REPO_URL="https://github.com/MrRobb/beacon-v2-Models.git"
+FRAMEWORK_REPO_URL="https://github.com/MrRobb/beacon-framework-v2.git"
+
+MODEL_REPLACE_URL="https:\/\/raw.githubusercontent.com\/ga4gh-beacon\/beacon-v2-Models\/main\/"
+FRAMEWORK_REPLACE_URL="https:\/\/raw.githubusercontent.com\/ga4gh-beacon\/beacon-framework-v2\/main\/"
+
+MODEL_REPO_LOCATION="beacon-v2-Models"
+FRAMEWORK_REPO_LOCATION="beacon-framework-v2"
+
+DATA_FOLDER="data"
+
+# Clean
+rm -rf ${MODEL_REPO_LOCATION} ${FRAMEWORK_REPO_LOCATION} ${DATA_FOLDER}
+
+# Create data folder
+mkdir ${DATA_FOLDER}
+
+# Download repositories
+git clone ${MODEL_REPO_URL} ${MODEL_REPO_LOCATION}
+git clone ${FRAMEWORK_REPO_URL} ${FRAMEWORK_REPO_LOCATION}
+
+# Remove endpoints.json files
+find ${MODEL_REPO_LOCATION} -type f -name "endpoints.json" -delete
+find ${FRAMEWORK_REPO_LOCATION} -type f -name "endpoints.json" -delete
+
+# Replace references
+case "$(uname -s)" in
+
+ Darwin)
+ echo 'Mac OS X'
+ find ${MODEL_REPO_LOCATION} -type f -name "*.json" -exec sed -i ".bak" "s/${MODEL_REPLACE_URL}/${MODEL_REPO_LOCATION}/g" {} +
+ find ${FRAMEWORK_REPO_LOCATION} -type f -name "*.json" -exec sed -i ".bak" "s/${FRAMEWORK_REPLACE_URL}/${FRAMEWORK_REPO_LOCATION}/g" {} +
+ ;;
+
+ Linux)
+ echo 'Linux'
+ find ${MODEL_REPO_LOCATION} -type f -name "*.json" -exec sed -i "s/${MODEL_REPLACE_URL}/${MODEL_REPO_LOCATION}/g" {} +
+ find ${FRAMEWORK_REPO_LOCATION} -type f -name "*.json" -exec sed -i "s/${FRAMEWORK_REPLACE_URL}/${FRAMEWORK_REPO_LOCATION}/g" {} +
+ ;;
+
+ *)
+ echo 'Other OS: Not supported'
+esac
+
+# Resolve references
+# npm install -g json-dereference-cli
+python3 cleanup_json.py ${MODEL_REPO_LOCATION}
+python3 cleanup_json.py ${FRAMEWORK_REPO_LOCATION}
+
+
+# Generate fake schemas
+# npm install -g json-schema-faker-cli
+for i in $(seq 1 $1)
+do
+ fake-schema "${MODEL_REPO_LOCATION}/BEACON-V2-Model/analyses/defaultSchema.json" > "${DATA_FOLDER}/analyses${i}.json"
+ fake-schema "${MODEL_REPO_LOCATION}/BEACON-V2-Model/biosamples/defaultSchema.json" > "${DATA_FOLDER}/biosamples${i}.json"
+ fake-schema "${MODEL_REPO_LOCATION}/BEACON-V2-Model/cohorts/defaultSchema.json" > "${DATA_FOLDER}/cohorts${i}.json"
+ fake-schema "${MODEL_REPO_LOCATION}/BEACON-V2-Model/datasets/defaultSchema.json" > "${DATA_FOLDER}/datasets${i}.json"
+ fake-schema "${MODEL_REPO_LOCATION}/BEACON-V2-Model/genomicVariations/defaultSchema.json" > "${DATA_FOLDER}/genomicVariations${i}.json"
+ fake-schema "${MODEL_REPO_LOCATION}/BEACON-V2-Model/individuals/defaultSchema.json" > "${DATA_FOLDER}/individuals${i}.json"
+ fake-schema "${MODEL_REPO_LOCATION}/BEACON-V2-Model/runs/defaultSchema.json" > "${DATA_FOLDER}/runs${i}.json"
+done
diff --git a/deploy/load_json.py b/deploy/load_json.py
new file mode 100644
index 0000000..7a6c8ac
--- /dev/null
+++ b/deploy/load_json.py
@@ -0,0 +1,36 @@
+import json
+import argparse
+from pymongo.mongo_client import MongoClient
+
+entities = ["analyses", "biosamples", "cohorts", "datasets", "genomicVariations", "individuals", "runs"]
+
+def main():
+ parser = argparse.ArgumentParser("JSON MongoDB Loader")
+
+ parser.add_argument("--db", dest="db", action="store", help="Database URI", required=True)
+ parser.add_argument("--files", dest="files", action="store", help="JSON Files path", required=True, nargs='+')
+ parser.add_argument("--collection", dest="collection", action="store", help="Collection to store the data", required=True, choices=entities)
+
+ args = parser.parse_args()
+
+ print(args.files, "->", args.db, "[", args.collection, "]")
+
+ all_instances = []
+
+ for file in args.files:
+ with open(file, 'r') as json_file:
+ data = json.load(json_file)
+ if isinstance(data, dict):
+ print("Loading multiple files with one instance each")
+ all_instances.append(data)
+ else:
+ print("Loading only one file with multiple instances")
+ all_instances = data
+ break
+
+ client = MongoClient(args.db)
+ client.beacon.get_collection(args.collection).insert_many(all_instances)
+ print("DONE!")
+
+if __name__ == "__main__":
+ main()
diff --git a/deploy/logger.yml b/deploy/logger.yml
new file mode 100644
index 0000000..fc735f0
--- /dev/null
+++ b/deploy/logger.yml
@@ -0,0 +1,32 @@
+---
+version: 1
+#disable_existing_loggers: True
+root:
+ level: NOTSET
+ handlers: [ noHandler ]
+
+loggers:
+ __main__:
+ level: DEBUG
+ handlers: [ console ]
+ beacon:
+ level: DEBUG
+ handlers: [ console ]
+ propagate: True
+ aiohttp:
+ level: INFO
+ handlers: [ console ]
+
+handlers:
+ noHandler:
+ class: logging.NullHandler
+ level: NOTSET
+ console:
+ class: logging.StreamHandler
+ formatter: simple
+ stream: ext://sys.stderr
+
+formatters:
+ simple:
+ format: "[{name:^10}][{levelname:^6}] (L{lineno}) {message}"
+ style: "{"
diff --git a/deploy/mongo-init/init.js b/deploy/mongo-init/init.js
new file mode 100644
index 0000000..a4112e9
--- /dev/null
+++ b/deploy/mongo-init/init.js
@@ -0,0 +1,27 @@
+conn = new Mongo({Â useUnifiedTopology: true });
+db = conn.getDB("beacon");
+
+
+// db.beacon.createIndex({ "address.zip": 1 }, { unique: false });
+// db.beacon.insert({ "address": { "city": "Paris", "zip": "123" }, "name": "Mike", "phone": "1234" });
+// db.beacon.insert({ "address": { "city": "Marsel", "zip": "321" }, "name": "Helga", "phone": "4321" });
+
+// Create collections
+
+db.createCollection("analyses");
+db.createCollection("biosamples");
+db.createCollection("cohorts");
+db.createCollection("datasets");
+db.createCollection("genomicVariations");
+db.createCollection("individuals");
+db.createCollection("runs");
+
+// Create indexes for all the entities in the database
+
+db.analyses.createIndex([('$**', 'text')]);
+db.biosamples.createIndex([('$**', 'text')]);
+db.cohorts.createIndex([('$**', 'text')]);
+db.datasets.createIndex([('$**', 'text')]);
+db.genomicVariations.createIndex([('$**', 'text')]);
+db.individuals.createIndex([('$**', 'text')]);
+db.runs.createIndex([('$**', 'text')]);
diff --git a/deploy/nginx.conf b/deploy/nginx.conf
new file mode 100644
index 0000000..c40d68c
--- /dev/null
+++ b/deploy/nginx.conf
@@ -0,0 +1,131 @@
+# user beacon;
+worker_processes auto;
+pid /var/run/beacon/nginx.pid;
+include /etc/nginx/modules-enabled/*.conf;
+
+events {
+ worker_connections 768;
+ # multi_accept on;
+}
+
+http {
+
+ ##
+ # Basic Settings
+ ##
+
+ sendfile on;
+ tcp_nopush on;
+ tcp_nodelay on;
+ keepalive_timeout 65;
+ types_hash_max_size 2048;
+ # server_tokens off;
+
+ # server_names_hash_bucket_size 64;
+ # server_name_in_redirect off;
+
+ include /etc/nginx/mime.types;
+ default_type application/octet-stream;
+
+ ##
+ # SSL Settings
+ ##
+
+ ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
+ ssl_prefer_server_ciphers on;
+
+ ##
+ # Logging Settings
+ ##
+
+ access_log /var/log/nginx/access.log;
+ error_log /var/log/nginx/error.log;
+
+ ##
+ # Gzip Settings
+ ##
+
+ gzip on;
+
+ # gzip_vary on;
+ # gzip_proxied any;
+ # gzip_comp_level 6;
+ # gzip_buffers 16 8k;
+ # gzip_http_version 1.1;
+ # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
+
+ ##
+ # Virtual Host Configs
+ ##
+ upstream beacon {
+ # fail_timeout=0 means we always retry an upstream even if it failed
+ # to return a good HTTP response
+
+ # Unix domain servers
+ server unix:/var/run/beacon/instance_1.sock fail_timeout=0;
+ server unix:/var/run/beacon/instance_2.sock fail_timeout=0;
+ server unix:/var/run/beacon/instance_3.sock fail_timeout=0;
+ server unix:/var/run/beacon/instance_4.sock fail_timeout=0;
+
+ # Unix domain sockets are used in this example due to their high performance,
+ # but TCP/IP sockets could be used instead:
+ # server 127.0.0.1:8081 fail_timeout=0;
+ # server 127.0.0.1:8082 fail_timeout=0;
+ # server 127.0.0.1:8083 fail_timeout=0;
+ # server 127.0.0.1:8084 fail_timeout=0;
+ }
+
+ server {
+ listen 8080 default_server;
+ listen [::]:8080 default_server;
+
+ server_name _;
+ client_max_body_size 4G;
+
+ location /static {
+ root /beacon;
+ expires max;
+ add_header Pragma public;
+ add_header Cache-Control "public, must-revalidate, proxy-revalidate";
+ }
+
+
+ location / {
+
+
+ # Adding the wide-open CORS settings
+ if ($request_method = 'OPTIONS') {
+ add_header 'Access-Control-Allow-Origin' '*';
+ add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
+ #
+ # Custom headers and headers various browsers *should* be OK with but aren't
+ #
+ add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
+ # Tell client that this pre-flight info is valid for 20 days
+ add_header 'Access-Control-Max-Age' 1728000;
+ add_header 'Content-Type' 'text/plain; charset=utf-8';
+ add_header 'Content-Length' 0;
+ return 204;
+ }
+ if ($request_method = 'POST') {
+ add_header 'Access-Control-Allow-Origin' '*';
+ add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
+ add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
+ add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
+ }
+ if ($request_method = 'GET') {
+ add_header 'Access-Control-Allow-Origin' '*';
+ add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
+ add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
+ add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
+ }
+
+ # Forward to the upstream
+ proxy_set_header Host $http_host;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_redirect off;
+ proxy_buffering off;
+ proxy_pass http://beacon;
+ }
+ }
+}
\ No newline at end of file
diff --git a/deploy/reindex.py b/deploy/reindex.py
new file mode 100644
index 0000000..4cac882
--- /dev/null
+++ b/deploy/reindex.py
@@ -0,0 +1,21 @@
+from pymongo.mongo_client import MongoClient
+import conf
+
+client = MongoClient(
+ "mongodb://{}:{}@{}:{}/{}?authSource={}".format(
+ conf.database_user,
+ conf.database_password,
+ conf.database_host,
+ conf.database_port,
+ conf.database_name,
+ conf.database_auth_source,
+ )
+)
+
+client.beacon.analyses.create_index([("$**", "text")])
+client.beacon.biosamples.create_index([("$**", "text")])
+client.beacon.cohorts.create_index([("$**", "text")])
+client.beacon.datasets.create_index([("$**", "text")])
+client.beacon.genomicVariations.create_index([("$**", "text")])
+client.beacon.individuals.create_index([("$**", "text")])
+client.beacon.runs.create_index([("$**", "text")])
diff --git a/deploy/supervisord.conf b/deploy/supervisord.conf
new file mode 100644
index 0000000..120fe6e
--- /dev/null
+++ b/deploy/supervisord.conf
@@ -0,0 +1,28 @@
+; supervisor config file
+
+; [unix_http_server]
+; file=/var/run/supervisor.sock ; (the path to the socket file)
+; chmod=0700 ; sockef file mode (default 0700)
+
+; ; Manager web interface
+; [inet_http_server]
+; port = 9001
+; username = user ; Basic auth username
+; password = pass ; Basic auth password
+
+[supervisord]
+logfile=/var/log/supervisord/supervisord.log ; (main log file;default $CWD/supervisord.log)
+pidfile=/var/run/beacon/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
+childlogdir=/var/log/supervisord ; ('AUTO' child log dir, default $TEMP)
+
+[program:beacon]
+numprocs = 4
+numprocs_start = 1
+process_name = beacon_%(process_num)s
+
+; Unix socket paths are specified by command line.
+command=python -m beacon /var/run/beacon/instance_%(process_num)s.sock
+
+user=beacon
+autostart=true
+autorestart=true
\ No newline at end of file
diff --git a/frontend/.gitignore b/frontend/.gitignore
new file mode 100644
index 0000000..4d29575
--- /dev/null
+++ b/frontend/.gitignore
@@ -0,0 +1,23 @@
+# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
+
+# dependencies
+/node_modules
+/.pnp
+.pnp.js
+
+# testing
+/coverage
+
+# production
+/build
+
+# misc
+.DS_Store
+.env.local
+.env.development.local
+.env.test.local
+.env.production.local
+
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
diff --git a/frontend/README.md b/frontend/README.md
new file mode 100644
index 0000000..c0541f9
--- /dev/null
+++ b/frontend/README.md
@@ -0,0 +1,70 @@
+# Getting Started with Create React App
+
+This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).
+
+## Available Scripts
+
+In the project directory, you can run:
+
+### `yarn start`
+
+Runs the app in the development mode.\
+Open [http://localhost:3000](http://localhost:3000) to view it in your browser.
+
+The page will reload when you make changes.\
+You may also see any lint errors in the console.
+
+### `yarn test`
+
+Launches the test runner in the interactive watch mode.\
+See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information.
+
+### `yarn build`
+
+Builds the app for production to the `build` folder.\
+It correctly bundles React in production mode and optimizes the build for the best performance.
+
+The build is minified and the filenames include the hashes.\
+Your app is ready to be deployed!
+
+See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information.
+
+### `yarn eject`
+
+**Note: this is a one-way operation. Once you `eject`, you can't go back!**
+
+If you aren't satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project.
+
+Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you're on your own.
+
+You don't have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn't feel obligated to use this feature. However we understand that this tool wouldn't be useful if you couldn't customize it when you are ready for it.
+
+## Learn More
+
+You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started).
+
+To learn React, check out the [React documentation](https://reactjs.org/).
+
+### Code Splitting
+
+This section has moved here: [https://facebook.github.io/create-react-app/docs/code-splitting](https://facebook.github.io/create-react-app/docs/code-splitting)
+
+### Analyzing the Bundle Size
+
+This section has moved here: [https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size](https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size)
+
+### Making a Progressive Web App
+
+This section has moved here: [https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app](https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app)
+
+### Advanced Configuration
+
+This section has moved here: [https://facebook.github.io/create-react-app/docs/advanced-configuration](https://facebook.github.io/create-react-app/docs/advanced-configuration)
+
+### Deployment
+
+This section has moved here: [https://facebook.github.io/create-react-app/docs/deployment](https://facebook.github.io/create-react-app/docs/deployment)
+
+### `yarn build` fails to minify
+
+This section has moved here: [https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify](https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify)
diff --git a/frontend/package.json b/frontend/package.json
new file mode 100644
index 0000000..b637426
--- /dev/null
+++ b/frontend/package.json
@@ -0,0 +1,45 @@
+{
+ "name": "frontend",
+ "version": "0.1.0",
+ "private": true,
+ "dependencies": {
+ "@testing-library/jest-dom": "^5.14.1",
+ "@testing-library/react": "^13.0.0",
+ "@testing-library/user-event": "^13.2.1",
+ "axios": "1.1.3",
+ "bootstrap": "5.2.2",
+ "bootswatch": "5.2.2",
+ "formik": "2.2.9",
+ "react": "^18.2.0",
+ "react-bootstrap": "2.6.0",
+ "react-dom": "^18.2.0",
+ "react-router-bootstrap": "0.26.2",
+ "react-router-dom": "6.4.3",
+ "react-scripts": "5.0.1",
+ "web-vitals": "^2.1.0"
+ },
+ "scripts": {
+ "start": "react-scripts start",
+ "build": "react-scripts build",
+ "test": "react-scripts test",
+ "eject": "react-scripts eject"
+ },
+ "eslintConfig": {
+ "extends": [
+ "react-app",
+ "react-app/jest"
+ ]
+ },
+ "browserslist": {
+ "production": [
+ ">0.2%",
+ "not dead",
+ "not op_mini all"
+ ],
+ "development": [
+ "last 1 chrome version",
+ "last 1 firefox version",
+ "last 1 safari version"
+ ]
+ }
+}
diff --git a/frontend/public/favicon.ico b/frontend/public/favicon.ico
new file mode 100644
index 0000000..a11777c
Binary files /dev/null and b/frontend/public/favicon.ico differ
diff --git a/frontend/public/index.html b/frontend/public/index.html
new file mode 100644
index 0000000..aa069f2
--- /dev/null
+++ b/frontend/public/index.html
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ React App
+
+
+ You need to enable JavaScript to run this app.
+
+
+
+
diff --git a/frontend/public/logo192.png b/frontend/public/logo192.png
new file mode 100644
index 0000000..fc44b0a
Binary files /dev/null and b/frontend/public/logo192.png differ
diff --git a/frontend/public/logo512.png b/frontend/public/logo512.png
new file mode 100644
index 0000000..a4e47a6
Binary files /dev/null and b/frontend/public/logo512.png differ
diff --git a/frontend/public/manifest.json b/frontend/public/manifest.json
new file mode 100644
index 0000000..080d6c7
--- /dev/null
+++ b/frontend/public/manifest.json
@@ -0,0 +1,25 @@
+{
+ "short_name": "React App",
+ "name": "Create React App Sample",
+ "icons": [
+ {
+ "src": "favicon.ico",
+ "sizes": "64x64 32x32 24x24 16x16",
+ "type": "image/x-icon"
+ },
+ {
+ "src": "logo192.png",
+ "type": "image/png",
+ "sizes": "192x192"
+ },
+ {
+ "src": "logo512.png",
+ "type": "image/png",
+ "sizes": "512x512"
+ }
+ ],
+ "start_url": ".",
+ "display": "standalone",
+ "theme_color": "#000000",
+ "background_color": "#ffffff"
+}
diff --git a/frontend/public/robots.txt b/frontend/public/robots.txt
new file mode 100644
index 0000000..e9e57dc
--- /dev/null
+++ b/frontend/public/robots.txt
@@ -0,0 +1,3 @@
+# https://www.robotstxt.org/robotstxt.html
+User-agent: *
+Disallow:
diff --git a/frontend/src/App.css b/frontend/src/App.css
new file mode 100644
index 0000000..74b5e05
--- /dev/null
+++ b/frontend/src/App.css
@@ -0,0 +1,38 @@
+.App {
+ text-align: center;
+}
+
+.App-logo {
+ height: 40vmin;
+ pointer-events: none;
+}
+
+@media (prefers-reduced-motion: no-preference) {
+ .App-logo {
+ animation: App-logo-spin infinite 20s linear;
+ }
+}
+
+.App-header {
+ background-color: #282c34;
+ min-height: 100vh;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ font-size: calc(10px + 2vmin);
+ color: white;
+}
+
+.App-link {
+ color: #61dafb;
+}
+
+@keyframes App-logo-spin {
+ from {
+ transform: rotate(0deg);
+ }
+ to {
+ transform: rotate(360deg);
+ }
+}
diff --git a/frontend/src/App.js b/frontend/src/App.js
new file mode 100644
index 0000000..3784575
--- /dev/null
+++ b/frontend/src/App.js
@@ -0,0 +1,25 @@
+import logo from './logo.svg';
+import './App.css';
+
+function App() {
+ return (
+
+ );
+}
+
+export default App;
diff --git a/frontend/src/App.test.js b/frontend/src/App.test.js
new file mode 100644
index 0000000..1f03afe
--- /dev/null
+++ b/frontend/src/App.test.js
@@ -0,0 +1,8 @@
+import { render, screen } from '@testing-library/react';
+import App from './App';
+
+test('renders learn react link', () => {
+ render( );
+ const linkElement = screen.getByText(/learn react/i);
+ expect(linkElement).toBeInTheDocument();
+});
diff --git a/frontend/src/index.css b/frontend/src/index.css
new file mode 100644
index 0000000..ec2585e
--- /dev/null
+++ b/frontend/src/index.css
@@ -0,0 +1,13 @@
+body {
+ margin: 0;
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
+ 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
+ sans-serif;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+code {
+ font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
+ monospace;
+}
diff --git a/frontend/src/index.js b/frontend/src/index.js
new file mode 100644
index 0000000..d563c0f
--- /dev/null
+++ b/frontend/src/index.js
@@ -0,0 +1,17 @@
+import React from 'react';
+import ReactDOM from 'react-dom/client';
+import './index.css';
+import App from './App';
+import reportWebVitals from './reportWebVitals';
+
+const root = ReactDOM.createRoot(document.getElementById('root'));
+root.render(
+
+
+
+);
+
+// If you want to start measuring performance in your app, pass a function
+// to log results (for example: reportWebVitals(console.log))
+// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
+reportWebVitals();
diff --git a/frontend/src/logo.svg b/frontend/src/logo.svg
new file mode 100644
index 0000000..9dfc1c0
--- /dev/null
+++ b/frontend/src/logo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/frontend/src/reportWebVitals.js b/frontend/src/reportWebVitals.js
new file mode 100644
index 0000000..5253d3a
--- /dev/null
+++ b/frontend/src/reportWebVitals.js
@@ -0,0 +1,13 @@
+const reportWebVitals = onPerfEntry => {
+ if (onPerfEntry && onPerfEntry instanceof Function) {
+ import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {
+ getCLS(onPerfEntry);
+ getFID(onPerfEntry);
+ getFCP(onPerfEntry);
+ getLCP(onPerfEntry);
+ getTTFB(onPerfEntry);
+ });
+ }
+};
+
+export default reportWebVitals;
diff --git a/frontend/src/setupTests.js b/frontend/src/setupTests.js
new file mode 100644
index 0000000..8f2609b
--- /dev/null
+++ b/frontend/src/setupTests.js
@@ -0,0 +1,5 @@
+// jest-dom adds custom jest matchers for asserting on DOM nodes.
+// allows you to do things like:
+// expect(element).toHaveTextContent(/react/i)
+// learn more: https://github.com/testing-library/jest-dom
+import '@testing-library/jest-dom';
diff --git a/frontend/yarn.lock b/frontend/yarn.lock
new file mode 100644
index 0000000..8183b0e
--- /dev/null
+++ b/frontend/yarn.lock
@@ -0,0 +1,9485 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@adobe/css-tools@^4.0.1":
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.0.2.tgz#bd7d13543a186c3ff3eabb44bec2b22e8fb18ee0"
+ integrity sha512-Fx6tYjk2wKUgLi8uMANZr8GNZx05u44ArIJldn9VxLvolzlJVgHbTUCbwhMd6bcYky178+WUSxPHO3DAtGLWpw==
+
+"@ampproject/remapping@^2.1.0":
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d"
+ integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==
+ dependencies:
+ "@jridgewell/gen-mapping" "^0.1.0"
+ "@jridgewell/trace-mapping" "^0.3.9"
+
+"@apideck/better-ajv-errors@^0.3.1":
+ version "0.3.6"
+ resolved "https://registry.yarnpkg.com/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz#957d4c28e886a64a8141f7522783be65733ff097"
+ integrity sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==
+ dependencies:
+ json-schema "^0.4.0"
+ jsonpointer "^5.0.0"
+ leven "^3.1.0"
+
+"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.18.6", "@babel/code-frame@^7.8.3":
+ version "7.18.6"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a"
+ integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==
+ dependencies:
+ "@babel/highlight" "^7.18.6"
+
+"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.20.1", "@babel/compat-data@^7.20.5":
+ version "7.20.10"
+ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.20.10.tgz#9d92fa81b87542fff50e848ed585b4212c1d34ec"
+ integrity sha512-sEnuDPpOJR/fcafHMjpcpGN5M2jbUGUHwmuWKM/YdPzeEDJg8bgmbcWQFUfE32MQjti1koACvoPVsDe8Uq+idg==
+
+"@babel/core@^7.1.0", "@babel/core@^7.11.1", "@babel/core@^7.12.3", "@babel/core@^7.16.0", "@babel/core@^7.7.2", "@babel/core@^7.8.0":
+ version "7.20.12"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.20.12.tgz#7930db57443c6714ad216953d1356dac0eb8496d"
+ integrity sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==
+ dependencies:
+ "@ampproject/remapping" "^2.1.0"
+ "@babel/code-frame" "^7.18.6"
+ "@babel/generator" "^7.20.7"
+ "@babel/helper-compilation-targets" "^7.20.7"
+ "@babel/helper-module-transforms" "^7.20.11"
+ "@babel/helpers" "^7.20.7"
+ "@babel/parser" "^7.20.7"
+ "@babel/template" "^7.20.7"
+ "@babel/traverse" "^7.20.12"
+ "@babel/types" "^7.20.7"
+ convert-source-map "^1.7.0"
+ debug "^4.1.0"
+ gensync "^1.0.0-beta.2"
+ json5 "^2.2.2"
+ semver "^6.3.0"
+
+"@babel/eslint-parser@^7.16.3":
+ version "7.19.1"
+ resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.19.1.tgz#4f68f6b0825489e00a24b41b6a1ae35414ecd2f4"
+ integrity sha512-AqNf2QWt1rtu2/1rLswy6CDP7H9Oh3mMhk177Y67Rg8d7RD9WfOLLv8CGn6tisFvS2htm86yIe1yLF6I1UDaGQ==
+ dependencies:
+ "@nicolo-ribaudo/eslint-scope-5-internals" "5.1.1-v1"
+ eslint-visitor-keys "^2.1.0"
+ semver "^6.3.0"
+
+"@babel/generator@^7.20.7", "@babel/generator@^7.7.2":
+ version "7.20.7"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.20.7.tgz#f8ef57c8242665c5929fe2e8d82ba75460187b4a"
+ integrity sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw==
+ dependencies:
+ "@babel/types" "^7.20.7"
+ "@jridgewell/gen-mapping" "^0.3.2"
+ jsesc "^2.5.1"
+
+"@babel/helper-annotate-as-pure@^7.18.6":
+ version "7.18.6"
+ resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb"
+ integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==
+ dependencies:
+ "@babel/types" "^7.18.6"
+
+"@babel/helper-builder-binary-assignment-operator-visitor@^7.18.6":
+ version "7.18.9"
+ resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz#acd4edfd7a566d1d51ea975dff38fd52906981bb"
+ integrity sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==
+ dependencies:
+ "@babel/helper-explode-assignable-expression" "^7.18.6"
+ "@babel/types" "^7.18.9"
+
+"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9", "@babel/helper-compilation-targets@^7.20.0", "@babel/helper-compilation-targets@^7.20.7":
+ version "7.20.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz#a6cd33e93629f5eb473b021aac05df62c4cd09bb"
+ integrity sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==
+ dependencies:
+ "@babel/compat-data" "^7.20.5"
+ "@babel/helper-validator-option" "^7.18.6"
+ browserslist "^4.21.3"
+ lru-cache "^5.1.1"
+ semver "^6.3.0"
+
+"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.20.5", "@babel/helper-create-class-features-plugin@^7.20.7":
+ version "7.20.12"
+ resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.12.tgz#4349b928e79be05ed2d1643b20b99bb87c503819"
+ integrity sha512-9OunRkbT0JQcednL0UFvbfXpAsUXiGjUk0a7sN8fUXX7Mue79cUSMjHGDRRi/Vz9vYlpIhLV5fMD5dKoMhhsNQ==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.18.6"
+ "@babel/helper-environment-visitor" "^7.18.9"
+ "@babel/helper-function-name" "^7.19.0"
+ "@babel/helper-member-expression-to-functions" "^7.20.7"
+ "@babel/helper-optimise-call-expression" "^7.18.6"
+ "@babel/helper-replace-supers" "^7.20.7"
+ "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0"
+ "@babel/helper-split-export-declaration" "^7.18.6"
+
+"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.20.5":
+ version "7.20.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.20.5.tgz#5ea79b59962a09ec2acf20a963a01ab4d076ccca"
+ integrity sha512-m68B1lkg3XDGX5yCvGO0kPx3v9WIYLnzjKfPcQiwntEQa5ZeRkPmo2X/ISJc8qxWGfwUr+kvZAeEzAwLec2r2w==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.18.6"
+ regexpu-core "^5.2.1"
+
+"@babel/helper-define-polyfill-provider@^0.3.3":
+ version "0.3.3"
+ resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz#8612e55be5d51f0cd1f36b4a5a83924e89884b7a"
+ integrity sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==
+ dependencies:
+ "@babel/helper-compilation-targets" "^7.17.7"
+ "@babel/helper-plugin-utils" "^7.16.7"
+ debug "^4.1.1"
+ lodash.debounce "^4.0.8"
+ resolve "^1.14.2"
+ semver "^6.1.2"
+
+"@babel/helper-environment-visitor@^7.18.9":
+ version "7.18.9"
+ resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be"
+ integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==
+
+"@babel/helper-explode-assignable-expression@^7.18.6":
+ version "7.18.6"
+ resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz#41f8228ef0a6f1a036b8dfdfec7ce94f9a6bc096"
+ integrity sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==
+ dependencies:
+ "@babel/types" "^7.18.6"
+
+"@babel/helper-function-name@^7.18.9", "@babel/helper-function-name@^7.19.0":
+ version "7.19.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz#941574ed5390682e872e52d3f38ce9d1bef4648c"
+ integrity sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==
+ dependencies:
+ "@babel/template" "^7.18.10"
+ "@babel/types" "^7.19.0"
+
+"@babel/helper-hoist-variables@^7.18.6":
+ version "7.18.6"
+ resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678"
+ integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==
+ dependencies:
+ "@babel/types" "^7.18.6"
+
+"@babel/helper-member-expression-to-functions@^7.20.7":
+ version "7.20.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.20.7.tgz#a6f26e919582275a93c3aa6594756d71b0bb7f05"
+ integrity sha512-9J0CxJLq315fEdi4s7xK5TQaNYjZw+nDVpVqr1axNGKzdrdwYBD5b4uKv3n75aABG0rCCTK8Im8Ww7eYfMrZgw==
+ dependencies:
+ "@babel/types" "^7.20.7"
+
+"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.18.6":
+ version "7.18.6"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e"
+ integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==
+ dependencies:
+ "@babel/types" "^7.18.6"
+
+"@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.20.11":
+ version "7.20.11"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz#df4c7af713c557938c50ea3ad0117a7944b2f1b0"
+ integrity sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==
+ dependencies:
+ "@babel/helper-environment-visitor" "^7.18.9"
+ "@babel/helper-module-imports" "^7.18.6"
+ "@babel/helper-simple-access" "^7.20.2"
+ "@babel/helper-split-export-declaration" "^7.18.6"
+ "@babel/helper-validator-identifier" "^7.19.1"
+ "@babel/template" "^7.20.7"
+ "@babel/traverse" "^7.20.10"
+ "@babel/types" "^7.20.7"
+
+"@babel/helper-optimise-call-expression@^7.18.6":
+ version "7.18.6"
+ resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz#9369aa943ee7da47edab2cb4e838acf09d290ffe"
+ integrity sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==
+ dependencies:
+ "@babel/types" "^7.18.6"
+
+"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3":
+ version "7.20.2"
+ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz#d1b9000752b18d0877cff85a5c376ce5c3121629"
+ integrity sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==
+
+"@babel/helper-remap-async-to-generator@^7.18.9":
+ version "7.18.9"
+ resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz#997458a0e3357080e54e1d79ec347f8a8cd28519"
+ integrity sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.18.6"
+ "@babel/helper-environment-visitor" "^7.18.9"
+ "@babel/helper-wrap-function" "^7.18.9"
+ "@babel/types" "^7.18.9"
+
+"@babel/helper-replace-supers@^7.18.6", "@babel/helper-replace-supers@^7.20.7":
+ version "7.20.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz#243ecd2724d2071532b2c8ad2f0f9f083bcae331"
+ integrity sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==
+ dependencies:
+ "@babel/helper-environment-visitor" "^7.18.9"
+ "@babel/helper-member-expression-to-functions" "^7.20.7"
+ "@babel/helper-optimise-call-expression" "^7.18.6"
+ "@babel/template" "^7.20.7"
+ "@babel/traverse" "^7.20.7"
+ "@babel/types" "^7.20.7"
+
+"@babel/helper-simple-access@^7.20.2":
+ version "7.20.2"
+ resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz#0ab452687fe0c2cfb1e2b9e0015de07fc2d62dd9"
+ integrity sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==
+ dependencies:
+ "@babel/types" "^7.20.2"
+
+"@babel/helper-skip-transparent-expression-wrappers@^7.20.0":
+ version "7.20.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz#fbe4c52f60518cab8140d77101f0e63a8a230684"
+ integrity sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==
+ dependencies:
+ "@babel/types" "^7.20.0"
+
+"@babel/helper-split-export-declaration@^7.18.6":
+ version "7.18.6"
+ resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075"
+ integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==
+ dependencies:
+ "@babel/types" "^7.18.6"
+
+"@babel/helper-string-parser@^7.19.4":
+ version "7.19.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63"
+ integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==
+
+"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1":
+ version "7.19.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2"
+ integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==
+
+"@babel/helper-validator-option@^7.18.6":
+ version "7.18.6"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8"
+ integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==
+
+"@babel/helper-wrap-function@^7.18.9":
+ version "7.20.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz#75e2d84d499a0ab3b31c33bcfe59d6b8a45f62e3"
+ integrity sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==
+ dependencies:
+ "@babel/helper-function-name" "^7.19.0"
+ "@babel/template" "^7.18.10"
+ "@babel/traverse" "^7.20.5"
+ "@babel/types" "^7.20.5"
+
+"@babel/helpers@^7.20.7":
+ version "7.20.7"
+ resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.20.7.tgz#04502ff0feecc9f20ecfaad120a18f011a8e6dce"
+ integrity sha512-PBPjs5BppzsGaxHQCDKnZ6Gd9s6xl8bBCluz3vEInLGRJmnZan4F6BYCeqtyXqkk4W5IlPmjK4JlOuZkpJ3xZA==
+ dependencies:
+ "@babel/template" "^7.20.7"
+ "@babel/traverse" "^7.20.7"
+ "@babel/types" "^7.20.7"
+
+"@babel/highlight@^7.18.6":
+ version "7.18.6"
+ resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf"
+ integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==
+ dependencies:
+ "@babel/helper-validator-identifier" "^7.18.6"
+ chalk "^2.0.0"
+ js-tokens "^4.0.0"
+
+"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7":
+ version "7.20.7"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.7.tgz#66fe23b3c8569220817d5feb8b9dcdc95bb4f71b"
+ integrity sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg==
+
+"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6":
+ version "7.18.6"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz#da5b8f9a580acdfbe53494dba45ea389fb09a4d2"
+ integrity sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.18.6"
+
+"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.18.9":
+ version "7.20.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz#d9c85589258539a22a901033853101a6198d4ef1"
+ integrity sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.20.2"
+ "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0"
+ "@babel/plugin-proposal-optional-chaining" "^7.20.7"
+
+"@babel/plugin-proposal-async-generator-functions@^7.20.1":
+ version "7.20.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz#bfb7276d2d573cb67ba379984a2334e262ba5326"
+ integrity sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==
+ dependencies:
+ "@babel/helper-environment-visitor" "^7.18.9"
+ "@babel/helper-plugin-utils" "^7.20.2"
+ "@babel/helper-remap-async-to-generator" "^7.18.9"
+ "@babel/plugin-syntax-async-generators" "^7.8.4"
+
+"@babel/plugin-proposal-class-properties@^7.16.0", "@babel/plugin-proposal-class-properties@^7.18.6":
+ version "7.18.6"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3"
+ integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==
+ dependencies:
+ "@babel/helper-create-class-features-plugin" "^7.18.6"
+ "@babel/helper-plugin-utils" "^7.18.6"
+
+"@babel/plugin-proposal-class-static-block@^7.18.6":
+ version "7.20.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.20.7.tgz#92592e9029b13b15be0f7ce6a7aedc2879ca45a7"
+ integrity sha512-AveGOoi9DAjUYYuUAG//Ig69GlazLnoyzMw68VCDux+c1tsnnH/OkYcpz/5xzMkEFC6UxjR5Gw1c+iY2wOGVeQ==
+ dependencies:
+ "@babel/helper-create-class-features-plugin" "^7.20.7"
+ "@babel/helper-plugin-utils" "^7.20.2"
+ "@babel/plugin-syntax-class-static-block" "^7.14.5"
+
+"@babel/plugin-proposal-decorators@^7.16.4":
+ version "7.20.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.20.7.tgz#05d37453c2ce818f3e47bbeda9468c8de947eecc"
+ integrity sha512-JB45hbUweYpwAGjkiM7uCyXMENH2lG+9r3G2E+ttc2PRXAoEkpfd/KW5jDg4j8RS6tLtTG1jZi9LbHZVSfs1/A==
+ dependencies:
+ "@babel/helper-create-class-features-plugin" "^7.20.7"
+ "@babel/helper-plugin-utils" "^7.20.2"
+ "@babel/helper-replace-supers" "^7.20.7"
+ "@babel/helper-split-export-declaration" "^7.18.6"
+ "@babel/plugin-syntax-decorators" "^7.19.0"
+
+"@babel/plugin-proposal-dynamic-import@^7.18.6":
+ version "7.18.6"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz#72bcf8d408799f547d759298c3c27c7e7faa4d94"
+ integrity sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.18.6"
+ "@babel/plugin-syntax-dynamic-import" "^7.8.3"
+
+"@babel/plugin-proposal-export-namespace-from@^7.18.9":
+ version "7.18.9"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz#5f7313ab348cdb19d590145f9247540e94761203"
+ integrity sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.18.9"
+ "@babel/plugin-syntax-export-namespace-from" "^7.8.3"
+
+"@babel/plugin-proposal-json-strings@^7.18.6":
+ version "7.18.6"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz#7e8788c1811c393aff762817e7dbf1ebd0c05f0b"
+ integrity sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.18.6"
+ "@babel/plugin-syntax-json-strings" "^7.8.3"
+
+"@babel/plugin-proposal-logical-assignment-operators@^7.18.9":
+ version "7.20.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz#dfbcaa8f7b4d37b51e8bfb46d94a5aea2bb89d83"
+ integrity sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.20.2"
+ "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"
+
+"@babel/plugin-proposal-nullish-coalescing-operator@^7.16.0", "@babel/plugin-proposal-nullish-coalescing-operator@^7.18.6":
+ version "7.18.6"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz#fdd940a99a740e577d6c753ab6fbb43fdb9467e1"
+ integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.18.6"
+ "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
+
+"@babel/plugin-proposal-numeric-separator@^7.16.0", "@babel/plugin-proposal-numeric-separator@^7.18.6":
+ version "7.18.6"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz#899b14fbafe87f053d2c5ff05b36029c62e13c75"
+ integrity sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.18.6"
+ "@babel/plugin-syntax-numeric-separator" "^7.10.4"
+
+"@babel/plugin-proposal-object-rest-spread@^7.20.2":
+ version "7.20.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz#aa662940ef425779c75534a5c41e9d936edc390a"
+ integrity sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==
+ dependencies:
+ "@babel/compat-data" "^7.20.5"
+ "@babel/helper-compilation-targets" "^7.20.7"
+ "@babel/helper-plugin-utils" "^7.20.2"
+ "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
+ "@babel/plugin-transform-parameters" "^7.20.7"
+
+"@babel/plugin-proposal-optional-catch-binding@^7.18.6":
+ version "7.18.6"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz#f9400d0e6a3ea93ba9ef70b09e72dd6da638a2cb"
+ integrity sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.18.6"
+ "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
+
+"@babel/plugin-proposal-optional-chaining@^7.16.0", "@babel/plugin-proposal-optional-chaining@^7.18.9", "@babel/plugin-proposal-optional-chaining@^7.20.7":
+ version "7.20.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.20.7.tgz#49f2b372519ab31728cc14115bb0998b15bfda55"
+ integrity sha512-T+A7b1kfjtRM51ssoOfS1+wbyCVqorfyZhT99TvxxLMirPShD8CzKMRepMlCBGM5RpHMbn8s+5MMHnPstJH6mQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.20.2"
+ "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0"
+ "@babel/plugin-syntax-optional-chaining" "^7.8.3"
+
+"@babel/plugin-proposal-private-methods@^7.16.0", "@babel/plugin-proposal-private-methods@^7.18.6":
+ version "7.18.6"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz#5209de7d213457548a98436fa2882f52f4be6bea"
+ integrity sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==
+ dependencies:
+ "@babel/helper-create-class-features-plugin" "^7.18.6"
+ "@babel/helper-plugin-utils" "^7.18.6"
+
+"@babel/plugin-proposal-private-property-in-object@^7.18.6":
+ version "7.20.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.20.5.tgz#309c7668f2263f1c711aa399b5a9a6291eef6135"
+ integrity sha512-Vq7b9dUA12ByzB4EjQTPo25sFhY+08pQDBSZRtUAkj7lb7jahaHR5igera16QZ+3my1nYR4dKsNdYj5IjPHilQ==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.18.6"
+ "@babel/helper-create-class-features-plugin" "^7.20.5"
+ "@babel/helper-plugin-utils" "^7.20.2"
+ "@babel/plugin-syntax-private-property-in-object" "^7.14.5"
+
+"@babel/plugin-proposal-unicode-property-regex@^7.18.6", "@babel/plugin-proposal-unicode-property-regex@^7.4.4":
+ version "7.18.6"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz#af613d2cd5e643643b65cded64207b15c85cb78e"
+ integrity sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin" "^7.18.6"
+ "@babel/helper-plugin-utils" "^7.18.6"
+
+"@babel/plugin-syntax-async-generators@^7.8.4":
+ version "7.8.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d"
+ integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-bigint@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea"
+ integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-class-properties@^7.12.13", "@babel/plugin-syntax-class-properties@^7.8.3":
+ version "7.12.13"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10"
+ integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.12.13"
+
+"@babel/plugin-syntax-class-static-block@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406"
+ integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-syntax-decorators@^7.19.0":
+ version "7.19.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.19.0.tgz#5f13d1d8fce96951bea01a10424463c9a5b3a599"
+ integrity sha512-xaBZUEDntt4faL1yN8oIFlhfXeQAWJW7CLKYsHTUqriCUbj8xOra8bfxxKGi/UwExPFBuPdH4XfHc9rGQhrVkQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.19.0"
+
+"@babel/plugin-syntax-dynamic-import@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3"
+ integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-export-namespace-from@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a"
+ integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-syntax-flow@^7.18.6":
+ version "7.18.6"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.18.6.tgz#774d825256f2379d06139be0c723c4dd444f3ca1"
+ integrity sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.18.6"
+
+"@babel/plugin-syntax-import-assertions@^7.20.0":
+ version "7.20.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz#bb50e0d4bea0957235390641209394e87bdb9cc4"
+ integrity sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.19.0"
+
+"@babel/plugin-syntax-import-meta@^7.8.3":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51"
+ integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-syntax-json-strings@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a"
+ integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-jsx@^7.18.6":
+ version "7.18.6"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz#a8feef63b010150abd97f1649ec296e849943ca0"
+ integrity sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.18.6"
+
+"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699"
+ integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9"
+ integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97"
+ integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-syntax-object-rest-spread@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871"
+ integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-optional-catch-binding@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1"
+ integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-optional-chaining@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a"
+ integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-private-property-in-object@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad"
+ integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-syntax-top-level-await@^7.14.5", "@babel/plugin-syntax-top-level-await@^7.8.3":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c"
+ integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-syntax-typescript@^7.20.0", "@babel/plugin-syntax-typescript@^7.7.2":
+ version "7.20.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz#4e9a0cfc769c85689b77a2e642d24e9f697fc8c7"
+ integrity sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.19.0"
+
+"@babel/plugin-transform-arrow-functions@^7.18.6":
+ version "7.20.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz#bea332b0e8b2dab3dafe55a163d8227531ab0551"
+ integrity sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.20.2"
+
+"@babel/plugin-transform-async-to-generator@^7.18.6":
+ version "7.20.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz#dfee18623c8cb31deb796aa3ca84dda9cea94354"
+ integrity sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==
+ dependencies:
+ "@babel/helper-module-imports" "^7.18.6"
+ "@babel/helper-plugin-utils" "^7.20.2"
+ "@babel/helper-remap-async-to-generator" "^7.18.9"
+
+"@babel/plugin-transform-block-scoped-functions@^7.18.6":
+ version "7.18.6"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz#9187bf4ba302635b9d70d986ad70f038726216a8"
+ integrity sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.18.6"
+
+"@babel/plugin-transform-block-scoping@^7.20.2":
+ version "7.20.11"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.11.tgz#9f5a3424bd112a3f32fe0cf9364fbb155cff262a"
+ integrity sha512-tA4N427a7fjf1P0/2I4ScsHGc5jcHPbb30xMbaTke2gxDuWpUfXDuX1FEymJwKk4tuGUvGcejAR6HdZVqmmPyw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.20.2"
+
+"@babel/plugin-transform-classes@^7.20.2":
+ version "7.20.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.7.tgz#f438216f094f6bb31dc266ebfab8ff05aecad073"
+ integrity sha512-LWYbsiXTPKl+oBlXUGlwNlJZetXD5Am+CyBdqhPsDVjM9Jc8jwBJFrKhHf900Kfk2eZG1y9MAG3UNajol7A4VQ==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.18.6"
+ "@babel/helper-compilation-targets" "^7.20.7"
+ "@babel/helper-environment-visitor" "^7.18.9"
+ "@babel/helper-function-name" "^7.19.0"
+ "@babel/helper-optimise-call-expression" "^7.18.6"
+ "@babel/helper-plugin-utils" "^7.20.2"
+ "@babel/helper-replace-supers" "^7.20.7"
+ "@babel/helper-split-export-declaration" "^7.18.6"
+ globals "^11.1.0"
+
+"@babel/plugin-transform-computed-properties@^7.18.9":
+ version "7.20.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz#704cc2fd155d1c996551db8276d55b9d46e4d0aa"
+ integrity sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.20.2"
+ "@babel/template" "^7.20.7"
+
+"@babel/plugin-transform-destructuring@^7.20.2":
+ version "7.20.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.7.tgz#8bda578f71620c7de7c93af590154ba331415454"
+ integrity sha512-Xwg403sRrZb81IVB79ZPqNQME23yhugYVqgTxAhT99h485F4f+GMELFhhOsscDUB7HCswepKeCKLn/GZvUKoBA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.20.2"
+
+"@babel/plugin-transform-dotall-regex@^7.18.6", "@babel/plugin-transform-dotall-regex@^7.4.4":
+ version "7.18.6"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz#b286b3e7aae6c7b861e45bed0a2fafd6b1a4fef8"
+ integrity sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin" "^7.18.6"
+ "@babel/helper-plugin-utils" "^7.18.6"
+
+"@babel/plugin-transform-duplicate-keys@^7.18.9":
+ version "7.18.9"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz#687f15ee3cdad6d85191eb2a372c4528eaa0ae0e"
+ integrity sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.18.9"
+
+"@babel/plugin-transform-exponentiation-operator@^7.18.6":
+ version "7.18.6"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz#421c705f4521888c65e91fdd1af951bfefd4dacd"
+ integrity sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==
+ dependencies:
+ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.18.6"
+ "@babel/helper-plugin-utils" "^7.18.6"
+
+"@babel/plugin-transform-flow-strip-types@^7.16.0":
+ version "7.19.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.19.0.tgz#e9e8606633287488216028719638cbbb2f2dde8f"
+ integrity sha512-sgeMlNaQVbCSpgLSKP4ZZKfsJVnFnNQlUSk6gPYzR/q7tzCgQF2t8RBKAP6cKJeZdveei7Q7Jm527xepI8lNLg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.19.0"
+ "@babel/plugin-syntax-flow" "^7.18.6"
+
+"@babel/plugin-transform-for-of@^7.18.8":
+ version "7.18.8"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz#6ef8a50b244eb6a0bdbad0c7c61877e4e30097c1"
+ integrity sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.18.6"
+
+"@babel/plugin-transform-function-name@^7.18.9":
+ version "7.18.9"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz#cc354f8234e62968946c61a46d6365440fc764e0"
+ integrity sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==
+ dependencies:
+ "@babel/helper-compilation-targets" "^7.18.9"
+ "@babel/helper-function-name" "^7.18.9"
+ "@babel/helper-plugin-utils" "^7.18.9"
+
+"@babel/plugin-transform-literals@^7.18.9":
+ version "7.18.9"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz#72796fdbef80e56fba3c6a699d54f0de557444bc"
+ integrity sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.18.9"
+
+"@babel/plugin-transform-member-expression-literals@^7.18.6":
+ version "7.18.6"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz#ac9fdc1a118620ac49b7e7a5d2dc177a1bfee88e"
+ integrity sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.18.6"
+
+"@babel/plugin-transform-modules-amd@^7.19.6":
+ version "7.20.11"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz#3daccca8e4cc309f03c3a0c4b41dc4b26f55214a"
+ integrity sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==
+ dependencies:
+ "@babel/helper-module-transforms" "^7.20.11"
+ "@babel/helper-plugin-utils" "^7.20.2"
+
+"@babel/plugin-transform-modules-commonjs@^7.19.6":
+ version "7.20.11"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.20.11.tgz#8cb23010869bf7669fd4b3098598b6b2be6dc607"
+ integrity sha512-S8e1f7WQ7cimJQ51JkAaDrEtohVEitXjgCGAS2N8S31Y42E+kWwfSz83LYz57QdBm7q9diARVqanIaH2oVgQnw==
+ dependencies:
+ "@babel/helper-module-transforms" "^7.20.11"
+ "@babel/helper-plugin-utils" "^7.20.2"
+ "@babel/helper-simple-access" "^7.20.2"
+
+"@babel/plugin-transform-modules-systemjs@^7.19.6":
+ version "7.20.11"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz#467ec6bba6b6a50634eea61c9c232654d8a4696e"
+ integrity sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==
+ dependencies:
+ "@babel/helper-hoist-variables" "^7.18.6"
+ "@babel/helper-module-transforms" "^7.20.11"
+ "@babel/helper-plugin-utils" "^7.20.2"
+ "@babel/helper-validator-identifier" "^7.19.1"
+
+"@babel/plugin-transform-modules-umd@^7.18.6":
+ version "7.18.6"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz#81d3832d6034b75b54e62821ba58f28ed0aab4b9"
+ integrity sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==
+ dependencies:
+ "@babel/helper-module-transforms" "^7.18.6"
+ "@babel/helper-plugin-utils" "^7.18.6"
+
+"@babel/plugin-transform-named-capturing-groups-regex@^7.19.1":
+ version "7.20.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz#626298dd62ea51d452c3be58b285d23195ba69a8"
+ integrity sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin" "^7.20.5"
+ "@babel/helper-plugin-utils" "^7.20.2"
+
+"@babel/plugin-transform-new-target@^7.18.6":
+ version "7.18.6"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz#d128f376ae200477f37c4ddfcc722a8a1b3246a8"
+ integrity sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.18.6"
+
+"@babel/plugin-transform-object-super@^7.18.6":
+ version "7.18.6"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz#fb3c6ccdd15939b6ff7939944b51971ddc35912c"
+ integrity sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.18.6"
+ "@babel/helper-replace-supers" "^7.18.6"
+
+"@babel/plugin-transform-parameters@^7.20.1", "@babel/plugin-transform-parameters@^7.20.7":
+ version "7.20.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.7.tgz#0ee349e9d1bc96e78e3b37a7af423a4078a7083f"
+ integrity sha512-WiWBIkeHKVOSYPO0pWkxGPfKeWrCJyD3NJ53+Lrp/QMSZbsVPovrVl2aWZ19D/LTVnaDv5Ap7GJ/B2CTOZdrfA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.20.2"
+
+"@babel/plugin-transform-property-literals@^7.18.6":
+ version "7.18.6"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz#e22498903a483448e94e032e9bbb9c5ccbfc93a3"
+ integrity sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.18.6"
+
+"@babel/plugin-transform-react-constant-elements@^7.12.1":
+ version "7.20.2"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.20.2.tgz#3f02c784e0b711970d7d8ccc96c4359d64e27ac7"
+ integrity sha512-KS/G8YI8uwMGKErLFOHS/ekhqdHhpEloxs43NecQHVgo2QuQSyJhGIY1fL8UGl9wy5ItVwwoUL4YxVqsplGq2g==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.20.2"
+
+"@babel/plugin-transform-react-display-name@^7.16.0", "@babel/plugin-transform-react-display-name@^7.18.6":
+ version "7.18.6"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz#8b1125f919ef36ebdfff061d664e266c666b9415"
+ integrity sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.18.6"
+
+"@babel/plugin-transform-react-jsx-development@^7.18.6":
+ version "7.18.6"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz#dbe5c972811e49c7405b630e4d0d2e1380c0ddc5"
+ integrity sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==
+ dependencies:
+ "@babel/plugin-transform-react-jsx" "^7.18.6"
+
+"@babel/plugin-transform-react-jsx@^7.18.6":
+ version "7.20.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.20.7.tgz#025d85a1935fd7e19dfdcb1b1d4df34d4da484f7"
+ integrity sha512-Tfq7qqD+tRj3EoDhY00nn2uP2hsRxgYGi5mLQ5TimKav0a9Lrpd4deE+fcLXU8zFYRjlKPHZhpCvfEA6qnBxqQ==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.18.6"
+ "@babel/helper-module-imports" "^7.18.6"
+ "@babel/helper-plugin-utils" "^7.20.2"
+ "@babel/plugin-syntax-jsx" "^7.18.6"
+ "@babel/types" "^7.20.7"
+
+"@babel/plugin-transform-react-pure-annotations@^7.18.6":
+ version "7.18.6"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz#561af267f19f3e5d59291f9950fd7b9663d0d844"
+ integrity sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.18.6"
+ "@babel/helper-plugin-utils" "^7.18.6"
+
+"@babel/plugin-transform-regenerator@^7.18.6":
+ version "7.20.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz#57cda588c7ffb7f4f8483cc83bdcea02a907f04d"
+ integrity sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.20.2"
+ regenerator-transform "^0.15.1"
+
+"@babel/plugin-transform-reserved-words@^7.18.6":
+ version "7.18.6"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz#b1abd8ebf8edaa5f7fe6bbb8d2133d23b6a6f76a"
+ integrity sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.18.6"
+
+"@babel/plugin-transform-runtime@^7.16.4":
+ version "7.19.6"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz#9d2a9dbf4e12644d6f46e5e75bfbf02b5d6e9194"
+ integrity sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw==
+ dependencies:
+ "@babel/helper-module-imports" "^7.18.6"
+ "@babel/helper-plugin-utils" "^7.19.0"
+ babel-plugin-polyfill-corejs2 "^0.3.3"
+ babel-plugin-polyfill-corejs3 "^0.6.0"
+ babel-plugin-polyfill-regenerator "^0.4.1"
+ semver "^6.3.0"
+
+"@babel/plugin-transform-shorthand-properties@^7.18.6":
+ version "7.18.6"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz#6d6df7983d67b195289be24909e3f12a8f664dc9"
+ integrity sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.18.6"
+
+"@babel/plugin-transform-spread@^7.19.0":
+ version "7.20.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz#c2d83e0b99d3bf83e07b11995ee24bf7ca09401e"
+ integrity sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.20.2"
+ "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0"
+
+"@babel/plugin-transform-sticky-regex@^7.18.6":
+ version "7.18.6"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz#c6706eb2b1524028e317720339583ad0f444adcc"
+ integrity sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.18.6"
+
+"@babel/plugin-transform-template-literals@^7.18.9":
+ version "7.18.9"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz#04ec6f10acdaa81846689d63fae117dd9c243a5e"
+ integrity sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.18.9"
+
+"@babel/plugin-transform-typeof-symbol@^7.18.9":
+ version "7.18.9"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz#c8cea68263e45addcd6afc9091429f80925762c0"
+ integrity sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.18.9"
+
+"@babel/plugin-transform-typescript@^7.18.6":
+ version "7.20.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.20.7.tgz#673f49499cd810ae32a1ea5f3f8fab370987e055"
+ integrity sha512-m3wVKEvf6SoszD8pu4NZz3PvfKRCMgk6D6d0Qi9hNnlM5M6CFS92EgF4EiHVLKbU0r/r7ty1hg7NPZwE7WRbYw==
+ dependencies:
+ "@babel/helper-create-class-features-plugin" "^7.20.7"
+ "@babel/helper-plugin-utils" "^7.20.2"
+ "@babel/plugin-syntax-typescript" "^7.20.0"
+
+"@babel/plugin-transform-unicode-escapes@^7.18.10":
+ version "7.18.10"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz#1ecfb0eda83d09bbcb77c09970c2dd55832aa246"
+ integrity sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.18.9"
+
+"@babel/plugin-transform-unicode-regex@^7.18.6":
+ version "7.18.6"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz#194317225d8c201bbae103364ffe9e2cea36cdca"
+ integrity sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin" "^7.18.6"
+ "@babel/helper-plugin-utils" "^7.18.6"
+
+"@babel/preset-env@^7.11.0", "@babel/preset-env@^7.12.1", "@babel/preset-env@^7.16.4":
+ version "7.20.2"
+ resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.20.2.tgz#9b1642aa47bb9f43a86f9630011780dab7f86506"
+ integrity sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==
+ dependencies:
+ "@babel/compat-data" "^7.20.1"
+ "@babel/helper-compilation-targets" "^7.20.0"
+ "@babel/helper-plugin-utils" "^7.20.2"
+ "@babel/helper-validator-option" "^7.18.6"
+ "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.18.6"
+ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.18.9"
+ "@babel/plugin-proposal-async-generator-functions" "^7.20.1"
+ "@babel/plugin-proposal-class-properties" "^7.18.6"
+ "@babel/plugin-proposal-class-static-block" "^7.18.6"
+ "@babel/plugin-proposal-dynamic-import" "^7.18.6"
+ "@babel/plugin-proposal-export-namespace-from" "^7.18.9"
+ "@babel/plugin-proposal-json-strings" "^7.18.6"
+ "@babel/plugin-proposal-logical-assignment-operators" "^7.18.9"
+ "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.6"
+ "@babel/plugin-proposal-numeric-separator" "^7.18.6"
+ "@babel/plugin-proposal-object-rest-spread" "^7.20.2"
+ "@babel/plugin-proposal-optional-catch-binding" "^7.18.6"
+ "@babel/plugin-proposal-optional-chaining" "^7.18.9"
+ "@babel/plugin-proposal-private-methods" "^7.18.6"
+ "@babel/plugin-proposal-private-property-in-object" "^7.18.6"
+ "@babel/plugin-proposal-unicode-property-regex" "^7.18.6"
+ "@babel/plugin-syntax-async-generators" "^7.8.4"
+ "@babel/plugin-syntax-class-properties" "^7.12.13"
+ "@babel/plugin-syntax-class-static-block" "^7.14.5"
+ "@babel/plugin-syntax-dynamic-import" "^7.8.3"
+ "@babel/plugin-syntax-export-namespace-from" "^7.8.3"
+ "@babel/plugin-syntax-import-assertions" "^7.20.0"
+ "@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/plugin-transform-arrow-functions" "^7.18.6"
+ "@babel/plugin-transform-async-to-generator" "^7.18.6"
+ "@babel/plugin-transform-block-scoped-functions" "^7.18.6"
+ "@babel/plugin-transform-block-scoping" "^7.20.2"
+ "@babel/plugin-transform-classes" "^7.20.2"
+ "@babel/plugin-transform-computed-properties" "^7.18.9"
+ "@babel/plugin-transform-destructuring" "^7.20.2"
+ "@babel/plugin-transform-dotall-regex" "^7.18.6"
+ "@babel/plugin-transform-duplicate-keys" "^7.18.9"
+ "@babel/plugin-transform-exponentiation-operator" "^7.18.6"
+ "@babel/plugin-transform-for-of" "^7.18.8"
+ "@babel/plugin-transform-function-name" "^7.18.9"
+ "@babel/plugin-transform-literals" "^7.18.9"
+ "@babel/plugin-transform-member-expression-literals" "^7.18.6"
+ "@babel/plugin-transform-modules-amd" "^7.19.6"
+ "@babel/plugin-transform-modules-commonjs" "^7.19.6"
+ "@babel/plugin-transform-modules-systemjs" "^7.19.6"
+ "@babel/plugin-transform-modules-umd" "^7.18.6"
+ "@babel/plugin-transform-named-capturing-groups-regex" "^7.19.1"
+ "@babel/plugin-transform-new-target" "^7.18.6"
+ "@babel/plugin-transform-object-super" "^7.18.6"
+ "@babel/plugin-transform-parameters" "^7.20.1"
+ "@babel/plugin-transform-property-literals" "^7.18.6"
+ "@babel/plugin-transform-regenerator" "^7.18.6"
+ "@babel/plugin-transform-reserved-words" "^7.18.6"
+ "@babel/plugin-transform-shorthand-properties" "^7.18.6"
+ "@babel/plugin-transform-spread" "^7.19.0"
+ "@babel/plugin-transform-sticky-regex" "^7.18.6"
+ "@babel/plugin-transform-template-literals" "^7.18.9"
+ "@babel/plugin-transform-typeof-symbol" "^7.18.9"
+ "@babel/plugin-transform-unicode-escapes" "^7.18.10"
+ "@babel/plugin-transform-unicode-regex" "^7.18.6"
+ "@babel/preset-modules" "^0.1.5"
+ "@babel/types" "^7.20.2"
+ babel-plugin-polyfill-corejs2 "^0.3.3"
+ babel-plugin-polyfill-corejs3 "^0.6.0"
+ babel-plugin-polyfill-regenerator "^0.4.1"
+ core-js-compat "^3.25.1"
+ semver "^6.3.0"
+
+"@babel/preset-modules@^0.1.5":
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9"
+ integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/plugin-proposal-unicode-property-regex" "^7.4.4"
+ "@babel/plugin-transform-dotall-regex" "^7.4.4"
+ "@babel/types" "^7.4.4"
+ esutils "^2.0.2"
+
+"@babel/preset-react@^7.12.5", "@babel/preset-react@^7.16.0":
+ version "7.18.6"
+ resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.18.6.tgz#979f76d6277048dc19094c217b507f3ad517dd2d"
+ integrity sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.18.6"
+ "@babel/helper-validator-option" "^7.18.6"
+ "@babel/plugin-transform-react-display-name" "^7.18.6"
+ "@babel/plugin-transform-react-jsx" "^7.18.6"
+ "@babel/plugin-transform-react-jsx-development" "^7.18.6"
+ "@babel/plugin-transform-react-pure-annotations" "^7.18.6"
+
+"@babel/preset-typescript@^7.16.0":
+ version "7.18.6"
+ resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz#ce64be3e63eddc44240c6358daefac17b3186399"
+ integrity sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.18.6"
+ "@babel/helper-validator-option" "^7.18.6"
+ "@babel/plugin-transform-typescript" "^7.18.6"
+
+"@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.16.3", "@babel/runtime@^7.17.2", "@babel/runtime@^7.20.7", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2":
+ version "7.20.7"
+ resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.7.tgz#fcb41a5a70550e04a7b708037c7c32f7f356d8fd"
+ integrity sha512-UF0tvkUtxwAgZ5W/KrkHf0Rn0fdnLDU9ScxBrEVNUprE/MzirjK4MJUX1/BVDv00Sv8cljtukVK1aky++X1SjQ==
+ dependencies:
+ regenerator-runtime "^0.13.11"
+
+"@babel/template@^7.18.10", "@babel/template@^7.20.7", "@babel/template@^7.3.3":
+ version "7.20.7"
+ resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8"
+ integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==
+ dependencies:
+ "@babel/code-frame" "^7.18.6"
+ "@babel/parser" "^7.20.7"
+ "@babel/types" "^7.20.7"
+
+"@babel/traverse@^7.20.10", "@babel/traverse@^7.20.12", "@babel/traverse@^7.20.5", "@babel/traverse@^7.20.7", "@babel/traverse@^7.7.2":
+ version "7.20.12"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.20.12.tgz#7f0f787b3a67ca4475adef1f56cb94f6abd4a4b5"
+ integrity sha512-MsIbFN0u+raeja38qboyF8TIT7K0BFzz/Yd/77ta4MsUsmP2RAnidIlwq7d5HFQrH/OZJecGV6B71C4zAgpoSQ==
+ dependencies:
+ "@babel/code-frame" "^7.18.6"
+ "@babel/generator" "^7.20.7"
+ "@babel/helper-environment-visitor" "^7.18.9"
+ "@babel/helper-function-name" "^7.19.0"
+ "@babel/helper-hoist-variables" "^7.18.6"
+ "@babel/helper-split-export-declaration" "^7.18.6"
+ "@babel/parser" "^7.20.7"
+ "@babel/types" "^7.20.7"
+ debug "^4.1.0"
+ globals "^11.1.0"
+
+"@babel/types@^7.0.0", "@babel/types@^7.12.6", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.19.0", "@babel/types@^7.20.0", "@babel/types@^7.20.2", "@babel/types@^7.20.5", "@babel/types@^7.20.7", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4":
+ version "7.20.7"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.20.7.tgz#54ec75e252318423fc07fb644dc6a58a64c09b7f"
+ integrity sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==
+ dependencies:
+ "@babel/helper-string-parser" "^7.19.4"
+ "@babel/helper-validator-identifier" "^7.19.1"
+ to-fast-properties "^2.0.0"
+
+"@bcoe/v8-coverage@^0.2.3":
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
+ integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
+
+"@csstools/normalize.css@*":
+ version "12.0.0"
+ resolved "https://registry.yarnpkg.com/@csstools/normalize.css/-/normalize.css-12.0.0.tgz#a9583a75c3f150667771f30b60d9f059473e62c4"
+ integrity sha512-M0qqxAcwCsIVfpFQSlGN5XjXWu8l5JDZN+fPt1LeW5SZexQTgnaEvgXAY+CeygRw0EeppWHi12JxESWiWrB0Sg==
+
+"@csstools/postcss-cascade-layers@^1.1.1":
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.1.1.tgz#8a997edf97d34071dd2e37ea6022447dd9e795ad"
+ integrity sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==
+ dependencies:
+ "@csstools/selector-specificity" "^2.0.2"
+ postcss-selector-parser "^6.0.10"
+
+"@csstools/postcss-color-function@^1.1.1":
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-color-function/-/postcss-color-function-1.1.1.tgz#2bd36ab34f82d0497cfacdc9b18d34b5e6f64b6b"
+ integrity sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==
+ dependencies:
+ "@csstools/postcss-progressive-custom-properties" "^1.1.0"
+ postcss-value-parser "^4.2.0"
+
+"@csstools/postcss-font-format-keywords@^1.0.1":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.1.tgz#677b34e9e88ae997a67283311657973150e8b16a"
+ integrity sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==
+ dependencies:
+ postcss-value-parser "^4.2.0"
+
+"@csstools/postcss-hwb-function@^1.0.2":
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.2.tgz#ab54a9fce0ac102c754854769962f2422ae8aa8b"
+ integrity sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==
+ dependencies:
+ postcss-value-parser "^4.2.0"
+
+"@csstools/postcss-ic-unit@^1.0.1":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.1.tgz#28237d812a124d1a16a5acc5c3832b040b303e58"
+ integrity sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==
+ dependencies:
+ "@csstools/postcss-progressive-custom-properties" "^1.1.0"
+ postcss-value-parser "^4.2.0"
+
+"@csstools/postcss-is-pseudo-class@^2.0.7":
+ version "2.0.7"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.7.tgz#846ae6c0d5a1eaa878fce352c544f9c295509cd1"
+ integrity sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==
+ dependencies:
+ "@csstools/selector-specificity" "^2.0.0"
+ postcss-selector-parser "^6.0.10"
+
+"@csstools/postcss-nested-calc@^1.0.0":
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-nested-calc/-/postcss-nested-calc-1.0.0.tgz#d7e9d1d0d3d15cf5ac891b16028af2a1044d0c26"
+ integrity sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ==
+ dependencies:
+ postcss-value-parser "^4.2.0"
+
+"@csstools/postcss-normalize-display-values@^1.0.1":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.1.tgz#15da54a36e867b3ac5163ee12c1d7f82d4d612c3"
+ integrity sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==
+ dependencies:
+ postcss-value-parser "^4.2.0"
+
+"@csstools/postcss-oklab-function@^1.1.1":
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.1.tgz#88cee0fbc8d6df27079ebd2fa016ee261eecf844"
+ integrity sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==
+ dependencies:
+ "@csstools/postcss-progressive-custom-properties" "^1.1.0"
+ postcss-value-parser "^4.2.0"
+
+"@csstools/postcss-progressive-custom-properties@^1.1.0", "@csstools/postcss-progressive-custom-properties@^1.3.0":
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz#542292558384361776b45c85226b9a3a34f276fa"
+ integrity sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==
+ dependencies:
+ postcss-value-parser "^4.2.0"
+
+"@csstools/postcss-stepped-value-functions@^1.0.1":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-1.0.1.tgz#f8772c3681cc2befed695e2b0b1d68e22f08c4f4"
+ integrity sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==
+ dependencies:
+ postcss-value-parser "^4.2.0"
+
+"@csstools/postcss-text-decoration-shorthand@^1.0.0":
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-1.0.0.tgz#ea96cfbc87d921eca914d3ad29340d9bcc4c953f"
+ integrity sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw==
+ dependencies:
+ postcss-value-parser "^4.2.0"
+
+"@csstools/postcss-trigonometric-functions@^1.0.2":
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-1.0.2.tgz#94d3e4774c36d35dcdc88ce091336cb770d32756"
+ integrity sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og==
+ dependencies:
+ postcss-value-parser "^4.2.0"
+
+"@csstools/postcss-unset-value@^1.0.2":
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz#c99bb70e2cdc7312948d1eb41df2412330b81f77"
+ integrity sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==
+
+"@csstools/selector-specificity@^2.0.0", "@csstools/selector-specificity@^2.0.2":
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-2.0.2.tgz#1bfafe4b7ed0f3e4105837e056e0a89b108ebe36"
+ integrity sha512-IkpVW/ehM1hWKln4fCA3NzJU8KwD+kIOvPZA4cqxoJHtE21CCzjyp+Kxbu0i5I4tBNOlXPL9mjwnWlL0VEG4Fg==
+
+"@eslint/eslintrc@^1.4.1":
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.4.1.tgz#af58772019a2d271b7e2d4c23ff4ddcba3ccfb3e"
+ integrity sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==
+ dependencies:
+ ajv "^6.12.4"
+ debug "^4.3.2"
+ espree "^9.4.0"
+ globals "^13.19.0"
+ ignore "^5.2.0"
+ import-fresh "^3.2.1"
+ js-yaml "^4.1.0"
+ minimatch "^3.1.2"
+ strip-json-comments "^3.1.1"
+
+"@humanwhocodes/config-array@^0.11.8":
+ version "0.11.8"
+ resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.8.tgz#03595ac2075a4dc0f191cc2131de14fbd7d410b9"
+ integrity sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==
+ dependencies:
+ "@humanwhocodes/object-schema" "^1.2.1"
+ debug "^4.1.1"
+ minimatch "^3.0.5"
+
+"@humanwhocodes/module-importer@^1.0.1":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c"
+ integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==
+
+"@humanwhocodes/object-schema@^1.2.1":
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45"
+ integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==
+
+"@istanbuljs/load-nyc-config@^1.0.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced"
+ integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==
+ 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"
+
+"@istanbuljs/schema@^0.1.2":
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98"
+ integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==
+
+"@jest/console@^27.5.1":
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.5.1.tgz#260fe7239602fe5130a94f1aa386eff54b014bba"
+ integrity sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==
+ dependencies:
+ "@jest/types" "^27.5.1"
+ "@types/node" "*"
+ chalk "^4.0.0"
+ jest-message-util "^27.5.1"
+ jest-util "^27.5.1"
+ slash "^3.0.0"
+
+"@jest/console@^28.1.3":
+ version "28.1.3"
+ resolved "https://registry.yarnpkg.com/@jest/console/-/console-28.1.3.tgz#2030606ec03a18c31803b8a36382762e447655df"
+ integrity sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==
+ dependencies:
+ "@jest/types" "^28.1.3"
+ "@types/node" "*"
+ chalk "^4.0.0"
+ jest-message-util "^28.1.3"
+ jest-util "^28.1.3"
+ slash "^3.0.0"
+
+"@jest/core@^27.5.1":
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.5.1.tgz#267ac5f704e09dc52de2922cbf3af9edcd64b626"
+ integrity sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==
+ dependencies:
+ "@jest/console" "^27.5.1"
+ "@jest/reporters" "^27.5.1"
+ "@jest/test-result" "^27.5.1"
+ "@jest/transform" "^27.5.1"
+ "@jest/types" "^27.5.1"
+ "@types/node" "*"
+ ansi-escapes "^4.2.1"
+ chalk "^4.0.0"
+ emittery "^0.8.1"
+ exit "^0.1.2"
+ graceful-fs "^4.2.9"
+ jest-changed-files "^27.5.1"
+ jest-config "^27.5.1"
+ jest-haste-map "^27.5.1"
+ jest-message-util "^27.5.1"
+ jest-regex-util "^27.5.1"
+ jest-resolve "^27.5.1"
+ jest-resolve-dependencies "^27.5.1"
+ jest-runner "^27.5.1"
+ jest-runtime "^27.5.1"
+ jest-snapshot "^27.5.1"
+ jest-util "^27.5.1"
+ jest-validate "^27.5.1"
+ jest-watcher "^27.5.1"
+ micromatch "^4.0.4"
+ rimraf "^3.0.0"
+ slash "^3.0.0"
+ strip-ansi "^6.0.0"
+
+"@jest/environment@^27.5.1":
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.5.1.tgz#d7425820511fe7158abbecc010140c3fd3be9c74"
+ integrity sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==
+ dependencies:
+ "@jest/fake-timers" "^27.5.1"
+ "@jest/types" "^27.5.1"
+ "@types/node" "*"
+ jest-mock "^27.5.1"
+
+"@jest/expect-utils@^29.3.1":
+ version "29.3.1"
+ resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.3.1.tgz#531f737039e9b9e27c42449798acb5bba01935b6"
+ integrity sha512-wlrznINZI5sMjwvUoLVk617ll/UYfGIZNxmbU+Pa7wmkL4vYzhV9R2pwVqUh4NWWuLQWkI8+8mOkxs//prKQ3g==
+ dependencies:
+ jest-get-type "^29.2.0"
+
+"@jest/fake-timers@^27.5.1":
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.5.1.tgz#76979745ce0579c8a94a4678af7a748eda8ada74"
+ integrity sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==
+ dependencies:
+ "@jest/types" "^27.5.1"
+ "@sinonjs/fake-timers" "^8.0.1"
+ "@types/node" "*"
+ jest-message-util "^27.5.1"
+ jest-mock "^27.5.1"
+ jest-util "^27.5.1"
+
+"@jest/globals@^27.5.1":
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.5.1.tgz#7ac06ce57ab966566c7963431cef458434601b2b"
+ integrity sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==
+ dependencies:
+ "@jest/environment" "^27.5.1"
+ "@jest/types" "^27.5.1"
+ expect "^27.5.1"
+
+"@jest/reporters@^27.5.1":
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.5.1.tgz#ceda7be96170b03c923c37987b64015812ffec04"
+ integrity sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==
+ dependencies:
+ "@bcoe/v8-coverage" "^0.2.3"
+ "@jest/console" "^27.5.1"
+ "@jest/test-result" "^27.5.1"
+ "@jest/transform" "^27.5.1"
+ "@jest/types" "^27.5.1"
+ "@types/node" "*"
+ chalk "^4.0.0"
+ collect-v8-coverage "^1.0.0"
+ exit "^0.1.2"
+ glob "^7.1.2"
+ graceful-fs "^4.2.9"
+ istanbul-lib-coverage "^3.0.0"
+ istanbul-lib-instrument "^5.1.0"
+ istanbul-lib-report "^3.0.0"
+ istanbul-lib-source-maps "^4.0.0"
+ istanbul-reports "^3.1.3"
+ jest-haste-map "^27.5.1"
+ jest-resolve "^27.5.1"
+ jest-util "^27.5.1"
+ jest-worker "^27.5.1"
+ slash "^3.0.0"
+ source-map "^0.6.0"
+ string-length "^4.0.1"
+ terminal-link "^2.0.0"
+ v8-to-istanbul "^8.1.0"
+
+"@jest/schemas@^28.1.3":
+ version "28.1.3"
+ resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-28.1.3.tgz#ad8b86a66f11f33619e3d7e1dcddd7f2d40ff905"
+ integrity sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==
+ dependencies:
+ "@sinclair/typebox" "^0.24.1"
+
+"@jest/schemas@^29.0.0":
+ version "29.0.0"
+ resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.0.0.tgz#5f47f5994dd4ef067fb7b4188ceac45f77fe952a"
+ integrity sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA==
+ dependencies:
+ "@sinclair/typebox" "^0.24.1"
+
+"@jest/source-map@^27.5.1":
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-27.5.1.tgz#6608391e465add4205eae073b55e7f279e04e8cf"
+ integrity sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==
+ dependencies:
+ callsites "^3.0.0"
+ graceful-fs "^4.2.9"
+ source-map "^0.6.0"
+
+"@jest/test-result@^27.5.1":
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.5.1.tgz#56a6585fa80f7cdab72b8c5fc2e871d03832f5bb"
+ integrity sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==
+ dependencies:
+ "@jest/console" "^27.5.1"
+ "@jest/types" "^27.5.1"
+ "@types/istanbul-lib-coverage" "^2.0.0"
+ collect-v8-coverage "^1.0.0"
+
+"@jest/test-result@^28.1.3":
+ version "28.1.3"
+ resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-28.1.3.tgz#5eae945fd9f4b8fcfce74d239e6f725b6bf076c5"
+ integrity sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==
+ dependencies:
+ "@jest/console" "^28.1.3"
+ "@jest/types" "^28.1.3"
+ "@types/istanbul-lib-coverage" "^2.0.0"
+ collect-v8-coverage "^1.0.0"
+
+"@jest/test-sequencer@^27.5.1":
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz#4057e0e9cea4439e544c6353c6affe58d095745b"
+ integrity sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==
+ dependencies:
+ "@jest/test-result" "^27.5.1"
+ graceful-fs "^4.2.9"
+ jest-haste-map "^27.5.1"
+ jest-runtime "^27.5.1"
+
+"@jest/transform@^27.5.1":
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.5.1.tgz#6c3501dcc00c4c08915f292a600ece5ecfe1f409"
+ integrity sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==
+ dependencies:
+ "@babel/core" "^7.1.0"
+ "@jest/types" "^27.5.1"
+ babel-plugin-istanbul "^6.1.1"
+ chalk "^4.0.0"
+ convert-source-map "^1.4.0"
+ fast-json-stable-stringify "^2.0.0"
+ graceful-fs "^4.2.9"
+ jest-haste-map "^27.5.1"
+ jest-regex-util "^27.5.1"
+ jest-util "^27.5.1"
+ micromatch "^4.0.4"
+ pirates "^4.0.4"
+ slash "^3.0.0"
+ source-map "^0.6.1"
+ write-file-atomic "^3.0.0"
+
+"@jest/types@^27.5.1":
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.5.1.tgz#3c79ec4a8ba61c170bf937bcf9e98a9df175ec80"
+ integrity sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==
+ dependencies:
+ "@types/istanbul-lib-coverage" "^2.0.0"
+ "@types/istanbul-reports" "^3.0.0"
+ "@types/node" "*"
+ "@types/yargs" "^16.0.0"
+ chalk "^4.0.0"
+
+"@jest/types@^28.1.3":
+ version "28.1.3"
+ resolved "https://registry.yarnpkg.com/@jest/types/-/types-28.1.3.tgz#b05de80996ff12512bc5ceb1d208285a7d11748b"
+ integrity sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==
+ dependencies:
+ "@jest/schemas" "^28.1.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"
+
+"@jest/types@^29.3.1":
+ version "29.3.1"
+ resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.3.1.tgz#7c5a80777cb13e703aeec6788d044150341147e3"
+ integrity sha512-d0S0jmmTpjnhCmNpApgX3jrUZgZ22ivKJRvL2lli5hpCRoNnp1f85r2/wpKfXuYu8E7Jjh1hGfhPyup1NM5AmA==
+ dependencies:
+ "@jest/schemas" "^29.0.0"
+ "@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@^0.1.0":
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996"
+ integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==
+ dependencies:
+ "@jridgewell/set-array" "^1.0.0"
+ "@jridgewell/sourcemap-codec" "^1.4.10"
+
+"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2":
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9"
+ integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==
+ dependencies:
+ "@jridgewell/set-array" "^1.0.1"
+ "@jridgewell/sourcemap-codec" "^1.4.10"
+ "@jridgewell/trace-mapping" "^0.3.9"
+
+"@jridgewell/resolve-uri@3.1.0":
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78"
+ integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==
+
+"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1":
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72"
+ integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==
+
+"@jridgewell/source-map@^0.3.2":
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb"
+ integrity sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==
+ dependencies:
+ "@jridgewell/gen-mapping" "^0.3.0"
+ "@jridgewell/trace-mapping" "^0.3.9"
+
+"@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10":
+ version "1.4.14"
+ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24"
+ integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==
+
+"@jridgewell/trace-mapping@^0.3.14", "@jridgewell/trace-mapping@^0.3.9":
+ version "0.3.17"
+ resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985"
+ integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==
+ dependencies:
+ "@jridgewell/resolve-uri" "3.1.0"
+ "@jridgewell/sourcemap-codec" "1.4.14"
+
+"@leichtgewicht/ip-codec@^2.0.1":
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b"
+ integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==
+
+"@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1":
+ version "5.1.1-v1"
+ resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz#dbf733a965ca47b1973177dc0bb6c889edcfb129"
+ integrity sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==
+ dependencies:
+ eslint-scope "5.1.1"
+
+"@nodelib/fs.scandir@2.1.5":
+ version "2.1.5"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
+ integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==
+ dependencies:
+ "@nodelib/fs.stat" "2.0.5"
+ run-parallel "^1.1.9"
+
+"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2":
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b"
+ integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
+
+"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8":
+ version "1.2.8"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a"
+ integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==
+ dependencies:
+ "@nodelib/fs.scandir" "2.1.5"
+ fastq "^1.6.0"
+
+"@pmmmwh/react-refresh-webpack-plugin@^0.5.3":
+ version "0.5.10"
+ resolved "https://registry.yarnpkg.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.10.tgz#2eba163b8e7dbabb4ce3609ab5e32ab63dda3ef8"
+ integrity sha512-j0Ya0hCFZPd4x40qLzbhGsh9TMtdb+CJQiso+WxLOPNasohq9cc5SNUcwsZaRH6++Xh91Xkm/xHCkuIiIu0LUA==
+ dependencies:
+ ansi-html-community "^0.0.8"
+ common-path-prefix "^3.0.0"
+ core-js-pure "^3.23.3"
+ error-stack-parser "^2.0.6"
+ find-up "^5.0.0"
+ html-entities "^2.1.0"
+ loader-utils "^2.0.4"
+ schema-utils "^3.0.0"
+ source-map "^0.7.3"
+
+"@popperjs/core@^2.11.6":
+ version "2.11.6"
+ resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.6.tgz#cee20bd55e68a1720bdab363ecf0c821ded4cd45"
+ integrity sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==
+
+"@react-aria/ssr@^3.4.1":
+ version "3.4.1"
+ resolved "https://registry.yarnpkg.com/@react-aria/ssr/-/ssr-3.4.1.tgz#79e8bb621487e8f52890c917d3c734f448ba95e7"
+ integrity sha512-NmhoilMDyIfQiOSdQgxpVH2tC2u85Y0mVijtBNbI9kcDYLEiW/r6vKYVKtkyU+C4qobXhGMPfZ70PTc0lysSVA==
+ dependencies:
+ "@swc/helpers" "^0.4.14"
+
+"@remix-run/router@1.0.3":
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.0.3.tgz#953b88c20ea00d0eddaffdc1b115c08474aa295d"
+ integrity sha512-ceuyTSs7PZ/tQqi19YZNBc5X7kj1f8p+4DIyrcIYFY9h+hd1OKm4RqtiWldR9eGEvIiJfsqwM4BsuCtRIuEw6Q==
+
+"@restart/hooks@^0.4.6", "@restart/hooks@^0.4.7":
+ version "0.4.7"
+ resolved "https://registry.yarnpkg.com/@restart/hooks/-/hooks-0.4.7.tgz#d79ca6472c01ce04389fc73d4a79af1b5e33cd39"
+ integrity sha512-ZbjlEHcG+FQtpDPHd7i4FzNNvJf2enAwZfJbpM8CW7BhmOAbsHpZe3tsHwfQUrBuyrxWqPYp2x5UMnilWcY22A==
+ dependencies:
+ dequal "^2.0.2"
+
+"@restart/ui@^1.4.1":
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/@restart/ui/-/ui-1.5.1.tgz#ced0d28196b02b3d6ab51e09d81d903ca33e96e0"
+ integrity sha512-uPFE2ALgvtLetlzCQQz02Wa6DoVZ15WnvQmH3DwxC6Lh1BxbpmCR/rkYJKHcYvyJNWfC0AQn3R7xG4NddFiEhA==
+ dependencies:
+ "@babel/runtime" "^7.20.7"
+ "@popperjs/core" "^2.11.6"
+ "@react-aria/ssr" "^3.4.1"
+ "@restart/hooks" "^0.4.7"
+ "@types/warning" "^3.0.0"
+ dequal "^2.0.3"
+ dom-helpers "^5.2.0"
+ uncontrollable "^7.2.1"
+ warning "^4.0.3"
+
+"@rollup/plugin-babel@^5.2.0":
+ version "5.3.1"
+ resolved "https://registry.yarnpkg.com/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz#04bc0608f4aa4b2e4b1aebf284344d0f68fda283"
+ integrity sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==
+ dependencies:
+ "@babel/helper-module-imports" "^7.10.4"
+ "@rollup/pluginutils" "^3.1.0"
+
+"@rollup/plugin-node-resolve@^11.2.1":
+ version "11.2.1"
+ resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz#82aa59397a29cd4e13248b106e6a4a1880362a60"
+ integrity sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==
+ dependencies:
+ "@rollup/pluginutils" "^3.1.0"
+ "@types/resolve" "1.17.1"
+ builtin-modules "^3.1.0"
+ deepmerge "^4.2.2"
+ is-module "^1.0.0"
+ resolve "^1.19.0"
+
+"@rollup/plugin-replace@^2.4.1":
+ version "2.4.2"
+ resolved "https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz#a2d539314fbc77c244858faa523012825068510a"
+ integrity sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==
+ dependencies:
+ "@rollup/pluginutils" "^3.1.0"
+ magic-string "^0.25.7"
+
+"@rollup/pluginutils@^3.1.0":
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b"
+ integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==
+ dependencies:
+ "@types/estree" "0.0.39"
+ estree-walker "^1.0.1"
+ picomatch "^2.2.2"
+
+"@rushstack/eslint-patch@^1.1.0":
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz#8be36a1f66f3265389e90b5f9c9962146758f728"
+ integrity sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==
+
+"@sinclair/typebox@^0.24.1":
+ version "0.24.51"
+ resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.24.51.tgz#645f33fe4e02defe26f2f5c0410e1c094eac7f5f"
+ integrity sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==
+
+"@sinonjs/commons@^1.7.0":
+ version "1.8.6"
+ resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.6.tgz#80c516a4dc264c2a69115e7578d62581ff455ed9"
+ integrity sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==
+ dependencies:
+ type-detect "4.0.8"
+
+"@sinonjs/fake-timers@^8.0.1":
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz#3fdc2b6cb58935b21bfb8d1625eb1300484316e7"
+ integrity sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==
+ dependencies:
+ "@sinonjs/commons" "^1.7.0"
+
+"@surma/rollup-plugin-off-main-thread@^2.2.3":
+ version "2.2.3"
+ resolved "https://registry.yarnpkg.com/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz#ee34985952ca21558ab0d952f00298ad2190c053"
+ integrity sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==
+ dependencies:
+ ejs "^3.1.6"
+ json5 "^2.2.0"
+ magic-string "^0.25.0"
+ string.prototype.matchall "^4.0.6"
+
+"@svgr/babel-plugin-add-jsx-attribute@^5.4.0":
+ version "5.4.0"
+ resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz#81ef61947bb268eb9d50523446f9c638fb355906"
+ integrity sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==
+
+"@svgr/babel-plugin-remove-jsx-attribute@^5.4.0":
+ version "5.4.0"
+ resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz#6b2c770c95c874654fd5e1d5ef475b78a0a962ef"
+ integrity sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==
+
+"@svgr/babel-plugin-remove-jsx-empty-expression@^5.0.1":
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz#25621a8915ed7ad70da6cea3d0a6dbc2ea933efd"
+ integrity sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==
+
+"@svgr/babel-plugin-replace-jsx-attribute-value@^5.0.1":
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz#0b221fc57f9fcd10e91fe219e2cd0dd03145a897"
+ integrity sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==
+
+"@svgr/babel-plugin-svg-dynamic-title@^5.4.0":
+ version "5.4.0"
+ resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz#139b546dd0c3186b6e5db4fefc26cb0baea729d7"
+ integrity sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==
+
+"@svgr/babel-plugin-svg-em-dimensions@^5.4.0":
+ version "5.4.0"
+ resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz#6543f69526632a133ce5cabab965deeaea2234a0"
+ integrity sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==
+
+"@svgr/babel-plugin-transform-react-native-svg@^5.4.0":
+ version "5.4.0"
+ resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz#00bf9a7a73f1cad3948cdab1f8dfb774750f8c80"
+ integrity sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==
+
+"@svgr/babel-plugin-transform-svg-component@^5.5.0":
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz#583a5e2a193e214da2f3afeb0b9e8d3250126b4a"
+ integrity sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==
+
+"@svgr/babel-preset@^5.5.0":
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-5.5.0.tgz#8af54f3e0a8add7b1e2b0fcd5a882c55393df327"
+ integrity sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==
+ dependencies:
+ "@svgr/babel-plugin-add-jsx-attribute" "^5.4.0"
+ "@svgr/babel-plugin-remove-jsx-attribute" "^5.4.0"
+ "@svgr/babel-plugin-remove-jsx-empty-expression" "^5.0.1"
+ "@svgr/babel-plugin-replace-jsx-attribute-value" "^5.0.1"
+ "@svgr/babel-plugin-svg-dynamic-title" "^5.4.0"
+ "@svgr/babel-plugin-svg-em-dimensions" "^5.4.0"
+ "@svgr/babel-plugin-transform-react-native-svg" "^5.4.0"
+ "@svgr/babel-plugin-transform-svg-component" "^5.5.0"
+
+"@svgr/core@^5.5.0":
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/@svgr/core/-/core-5.5.0.tgz#82e826b8715d71083120fe8f2492ec7d7874a579"
+ integrity sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==
+ dependencies:
+ "@svgr/plugin-jsx" "^5.5.0"
+ camelcase "^6.2.0"
+ cosmiconfig "^7.0.0"
+
+"@svgr/hast-util-to-babel-ast@^5.5.0":
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz#5ee52a9c2533f73e63f8f22b779f93cd432a5461"
+ integrity sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==
+ dependencies:
+ "@babel/types" "^7.12.6"
+
+"@svgr/plugin-jsx@^5.5.0":
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz#1aa8cd798a1db7173ac043466d7b52236b369000"
+ integrity sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==
+ dependencies:
+ "@babel/core" "^7.12.3"
+ "@svgr/babel-preset" "^5.5.0"
+ "@svgr/hast-util-to-babel-ast" "^5.5.0"
+ svg-parser "^2.0.2"
+
+"@svgr/plugin-svgo@^5.5.0":
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz#02da55d85320549324e201c7b2e53bf431fcc246"
+ integrity sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==
+ dependencies:
+ cosmiconfig "^7.0.0"
+ deepmerge "^4.2.2"
+ svgo "^1.2.2"
+
+"@svgr/webpack@^5.5.0":
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-5.5.0.tgz#aae858ee579f5fa8ce6c3166ef56c6a1b381b640"
+ integrity sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==
+ dependencies:
+ "@babel/core" "^7.12.3"
+ "@babel/plugin-transform-react-constant-elements" "^7.12.1"
+ "@babel/preset-env" "^7.12.1"
+ "@babel/preset-react" "^7.12.5"
+ "@svgr/core" "^5.5.0"
+ "@svgr/plugin-jsx" "^5.5.0"
+ "@svgr/plugin-svgo" "^5.5.0"
+ loader-utils "^2.0.0"
+
+"@swc/helpers@^0.4.14":
+ version "0.4.14"
+ resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.4.14.tgz#1352ac6d95e3617ccb7c1498ff019654f1e12a74"
+ integrity sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==
+ dependencies:
+ tslib "^2.4.0"
+
+"@testing-library/dom@^8.5.0":
+ version "8.20.0"
+ resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-8.20.0.tgz#914aa862cef0f5e89b98cc48e3445c4c921010f6"
+ integrity sha512-d9ULIT+a4EXLX3UU8FBjauG9NnsZHkHztXoIcTsOKoOw030fyjheN9svkTULjJxtYag9DZz5Jz5qkWZDPxTFwA==
+ dependencies:
+ "@babel/code-frame" "^7.10.4"
+ "@babel/runtime" "^7.12.5"
+ "@types/aria-query" "^5.0.1"
+ aria-query "^5.0.0"
+ chalk "^4.1.0"
+ dom-accessibility-api "^0.5.9"
+ lz-string "^1.4.4"
+ pretty-format "^27.0.2"
+
+"@testing-library/jest-dom@^5.14.1":
+ version "5.16.5"
+ resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-5.16.5.tgz#3912846af19a29b2dbf32a6ae9c31ef52580074e"
+ integrity sha512-N5ixQ2qKpi5OLYfwQmUb/5mSV9LneAcaUfp32pn4yCnpb8r/Yz0pXFPck21dIicKmi+ta5WRAknkZCfA8refMA==
+ dependencies:
+ "@adobe/css-tools" "^4.0.1"
+ "@babel/runtime" "^7.9.2"
+ "@types/testing-library__jest-dom" "^5.9.1"
+ aria-query "^5.0.0"
+ chalk "^3.0.0"
+ css.escape "^1.5.1"
+ dom-accessibility-api "^0.5.6"
+ lodash "^4.17.15"
+ redent "^3.0.0"
+
+"@testing-library/react@^13.0.0":
+ version "13.4.0"
+ resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-13.4.0.tgz#6a31e3bf5951615593ad984e96b9e5e2d9380966"
+ integrity sha512-sXOGON+WNTh3MLE9rve97ftaZukN3oNf2KjDy7YTx6hcTO2uuLHuCGynMDhFwGw/jYf4OJ2Qk0i4i79qMNNkyw==
+ dependencies:
+ "@babel/runtime" "^7.12.5"
+ "@testing-library/dom" "^8.5.0"
+ "@types/react-dom" "^18.0.0"
+
+"@testing-library/user-event@^13.2.1":
+ version "13.5.0"
+ resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-13.5.0.tgz#69d77007f1e124d55314a2b73fd204b333b13295"
+ integrity sha512-5Kwtbo3Y/NowpkbRuSepbyMFkZmHgD+vPzYB/RJ4oxt5Gj/avFFBYjhw27cqSVPVw/3a67NK1PbiIr9k4Gwmdg==
+ dependencies:
+ "@babel/runtime" "^7.12.5"
+
+"@tootallnate/once@1":
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82"
+ integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==
+
+"@trysound/sax@0.2.0":
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad"
+ integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==
+
+"@types/aria-query@^5.0.1":
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-5.0.1.tgz#3286741fb8f1e1580ac28784add4c7a1d49bdfbc"
+ integrity sha512-XTIieEY+gvJ39ChLcB4If5zHtPxt3Syj5rgZR+e1ctpmK8NjPf0zFqsz4JpLJT0xla9GFDKjy8Cpu331nrmE1Q==
+
+"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14":
+ version "7.1.20"
+ resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.20.tgz#e168cdd612c92a2d335029ed62ac94c95b362359"
+ integrity sha512-PVb6Bg2QuscZ30FvOU7z4guG6c926D9YRvOxEaelzndpMsvP+YM74Q/dAFASpg2l6+XLalxSGxcq/lrgYWZtyQ==
+ dependencies:
+ "@babel/parser" "^7.1.0"
+ "@babel/types" "^7.0.0"
+ "@types/babel__generator" "*"
+ "@types/babel__template" "*"
+ "@types/babel__traverse" "*"
+
+"@types/babel__generator@*":
+ version "7.6.4"
+ resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.4.tgz#1f20ce4c5b1990b37900b63f050182d28c2439b7"
+ integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==
+ dependencies:
+ "@babel/types" "^7.0.0"
+
+"@types/babel__template@*":
+ version "7.4.1"
+ resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969"
+ integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==
+ dependencies:
+ "@babel/parser" "^7.1.0"
+ "@babel/types" "^7.0.0"
+
+"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6":
+ version "7.18.3"
+ resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.18.3.tgz#dfc508a85781e5698d5b33443416b6268c4b3e8d"
+ integrity sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==
+ dependencies:
+ "@babel/types" "^7.3.0"
+
+"@types/body-parser@*":
+ version "1.19.2"
+ resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0"
+ integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==
+ dependencies:
+ "@types/connect" "*"
+ "@types/node" "*"
+
+"@types/bonjour@^3.5.9":
+ version "3.5.10"
+ resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.10.tgz#0f6aadfe00ea414edc86f5d106357cda9701e275"
+ integrity sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==
+ dependencies:
+ "@types/node" "*"
+
+"@types/connect-history-api-fallback@^1.3.5":
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz#d1f7a8a09d0ed5a57aee5ae9c18ab9b803205dae"
+ integrity sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==
+ dependencies:
+ "@types/express-serve-static-core" "*"
+ "@types/node" "*"
+
+"@types/connect@*":
+ version "3.4.35"
+ resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1"
+ integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==
+ dependencies:
+ "@types/node" "*"
+
+"@types/eslint-scope@^3.7.3":
+ version "3.7.4"
+ resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz#37fc1223f0786c39627068a12e94d6e6fc61de16"
+ integrity sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==
+ dependencies:
+ "@types/eslint" "*"
+ "@types/estree" "*"
+
+"@types/eslint@*", "@types/eslint@^7.29.0 || ^8.4.1":
+ version "8.4.10"
+ resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.4.10.tgz#19731b9685c19ed1552da7052b6f668ed7eb64bb"
+ integrity sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==
+ dependencies:
+ "@types/estree" "*"
+ "@types/json-schema" "*"
+
+"@types/estree@*":
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2"
+ integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==
+
+"@types/estree@0.0.39":
+ version "0.0.39"
+ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f"
+ integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==
+
+"@types/estree@^0.0.51":
+ version "0.0.51"
+ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40"
+ integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==
+
+"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.31":
+ version "4.17.32"
+ resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.32.tgz#93dda387f5516af616d8d3f05f2c4c79d81e1b82"
+ integrity sha512-aI5h/VOkxOF2Z1saPy0Zsxs5avets/iaiAJYznQFm5By/pamU31xWKL//epiF4OfUA2qTOc9PV6tCUjhO8wlZA==
+ dependencies:
+ "@types/node" "*"
+ "@types/qs" "*"
+ "@types/range-parser" "*"
+
+"@types/express@*", "@types/express@^4.17.13":
+ version "4.17.15"
+ resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.15.tgz#9290e983ec8b054b65a5abccb610411953d417ff"
+ integrity sha512-Yv0k4bXGOH+8a+7bELd2PqHQsuiANB+A8a4gnQrkRWzrkKlb6KHaVvyXhqs04sVW/OWlbPyYxRgYlIXLfrufMQ==
+ dependencies:
+ "@types/body-parser" "*"
+ "@types/express-serve-static-core" "^4.17.31"
+ "@types/qs" "*"
+ "@types/serve-static" "*"
+
+"@types/graceful-fs@^4.1.2":
+ version "4.1.6"
+ resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.6.tgz#e14b2576a1c25026b7f02ede1de3b84c3a1efeae"
+ integrity sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==
+ dependencies:
+ "@types/node" "*"
+
+"@types/html-minifier-terser@^6.0.0":
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35"
+ integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==
+
+"@types/http-proxy@^1.17.8":
+ version "1.17.9"
+ resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.9.tgz#7f0e7931343761efde1e2bf48c40f02f3f75705a"
+ integrity sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==
+ dependencies:
+ "@types/node" "*"
+
+"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1":
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44"
+ integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==
+
+"@types/istanbul-lib-report@*":
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686"
+ integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==
+ dependencies:
+ "@types/istanbul-lib-coverage" "*"
+
+"@types/istanbul-reports@^3.0.0":
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff"
+ integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==
+ dependencies:
+ "@types/istanbul-lib-report" "*"
+
+"@types/jest@*":
+ version "29.2.5"
+ resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.2.5.tgz#c27f41a9d6253f288d1910d3c5f09484a56b73c0"
+ integrity sha512-H2cSxkKgVmqNHXP7TC2L/WUorrZu8ZigyRywfVzv6EyBlxj39n4C00hjXYQWsbwqgElaj/CiAeSRmk5GoaKTgw==
+ dependencies:
+ expect "^29.0.0"
+ pretty-format "^29.0.0"
+
+"@types/json-schema@*", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9":
+ version "7.0.11"
+ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3"
+ integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==
+
+"@types/json5@^0.0.29":
+ version "0.0.29"
+ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
+ integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==
+
+"@types/mime@*":
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.1.tgz#5f8f2bca0a5863cb69bc0b0acd88c96cb1d4ae10"
+ integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==
+
+"@types/node@*":
+ version "18.11.18"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.18.tgz#8dfb97f0da23c2293e554c5a50d61ef134d7697f"
+ integrity sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==
+
+"@types/parse-json@^4.0.0":
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0"
+ integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==
+
+"@types/prettier@^2.1.5":
+ version "2.7.2"
+ resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.2.tgz#6c2324641cc4ba050a8c710b2b251b377581fbf0"
+ integrity sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==
+
+"@types/prop-types@*":
+ version "15.7.5"
+ resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf"
+ integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==
+
+"@types/q@^1.5.1":
+ version "1.5.5"
+ resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.5.tgz#75a2a8e7d8ab4b230414505d92335d1dcb53a6df"
+ integrity sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==
+
+"@types/qs@*":
+ version "6.9.7"
+ resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb"
+ integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==
+
+"@types/range-parser@*":
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc"
+ integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==
+
+"@types/react-dom@^18.0.0":
+ version "18.0.10"
+ resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.0.10.tgz#3b66dec56aa0f16a6cc26da9e9ca96c35c0b4352"
+ integrity sha512-E42GW/JA4Qv15wQdqJq8DL4JhNpB3prJgjgapN3qJT9K2zO5IIAQh4VXvCEDupoqAwnz0cY4RlXeC/ajX5SFHg==
+ dependencies:
+ "@types/react" "*"
+
+"@types/react-transition-group@^4.4.4":
+ version "4.4.5"
+ resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.5.tgz#aae20dcf773c5aa275d5b9f7cdbca638abc5e416"
+ integrity sha512-juKD/eiSM3/xZYzjuzH6ZwpP+/lejltmiS3QEzV/vmb/Q8+HfDmxu+Baga8UEMGBqV88Nbg4l2hY/K2DkyaLLA==
+ dependencies:
+ "@types/react" "*"
+
+"@types/react@*", "@types/react@>=16.9.11":
+ version "18.0.26"
+ resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.26.tgz#8ad59fc01fef8eaf5c74f4ea392621749f0b7917"
+ integrity sha512-hCR3PJQsAIXyxhTNSiDFY//LhnMZWpNNr5etoCqx/iUfGc5gXWtQR2Phl908jVR6uPXacojQWTg4qRpkxTuGug==
+ dependencies:
+ "@types/prop-types" "*"
+ "@types/scheduler" "*"
+ csstype "^3.0.2"
+
+"@types/resolve@1.17.1":
+ version "1.17.1"
+ resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6"
+ integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==
+ dependencies:
+ "@types/node" "*"
+
+"@types/retry@0.12.0":
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d"
+ integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==
+
+"@types/scheduler@*":
+ version "0.16.2"
+ resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39"
+ integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==
+
+"@types/semver@^7.3.12":
+ version "7.3.13"
+ resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91"
+ integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==
+
+"@types/serve-index@^1.9.1":
+ version "1.9.1"
+ resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.1.tgz#1b5e85370a192c01ec6cec4735cf2917337a6278"
+ integrity sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==
+ dependencies:
+ "@types/express" "*"
+
+"@types/serve-static@*", "@types/serve-static@^1.13.10":
+ version "1.15.0"
+ resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.0.tgz#c7930ff61afb334e121a9da780aac0d9b8f34155"
+ integrity sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==
+ dependencies:
+ "@types/mime" "*"
+ "@types/node" "*"
+
+"@types/sockjs@^0.3.33":
+ version "0.3.33"
+ resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.33.tgz#570d3a0b99ac995360e3136fd6045113b1bd236f"
+ integrity sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==
+ dependencies:
+ "@types/node" "*"
+
+"@types/stack-utils@^2.0.0":
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c"
+ integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==
+
+"@types/testing-library__jest-dom@^5.9.1":
+ version "5.14.5"
+ resolved "https://registry.yarnpkg.com/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.5.tgz#d113709c90b3c75fdb127ec338dad7d5f86c974f"
+ integrity sha512-SBwbxYoyPIvxHbeHxTZX2Pe/74F/tX2/D3mMvzabdeJ25bBojfW0TyB8BHrbq/9zaaKICJZjLP+8r6AeZMFCuQ==
+ dependencies:
+ "@types/jest" "*"
+
+"@types/trusted-types@^2.0.2":
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.2.tgz#fc25ad9943bcac11cceb8168db4f275e0e72e756"
+ integrity sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==
+
+"@types/warning@^3.0.0":
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/@types/warning/-/warning-3.0.0.tgz#0d2501268ad8f9962b740d387c4654f5f8e23e52"
+ integrity sha512-t/Tvs5qR47OLOr+4E9ckN8AmP2Tf16gWq+/qA4iUGS/OOyHVO8wv2vjJuX8SNOUTJyWb+2t7wJm6cXILFnOROA==
+
+"@types/ws@^8.5.1":
+ version "8.5.4"
+ resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.4.tgz#bb10e36116d6e570dd943735f86c933c1587b8a5"
+ integrity sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==
+ dependencies:
+ "@types/node" "*"
+
+"@types/yargs-parser@*":
+ version "21.0.0"
+ resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b"
+ integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==
+
+"@types/yargs@^16.0.0":
+ version "16.0.5"
+ resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.5.tgz#12cc86393985735a283e387936398c2f9e5f88e3"
+ integrity sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==
+ dependencies:
+ "@types/yargs-parser" "*"
+
+"@types/yargs@^17.0.8":
+ version "17.0.19"
+ resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.19.tgz#8dbecdc9ab48bee0cb74f6e3327de3fa0d0c98ae"
+ integrity sha512-cAx3qamwaYX9R0fzOIZAlFpo4A+1uBVCxqpKz9D26uTF4srRXaGTTsikQmaotCtNdbhzyUH7ft6p9ktz9s6UNQ==
+ dependencies:
+ "@types/yargs-parser" "*"
+
+"@typescript-eslint/eslint-plugin@^5.5.0":
+ version "5.48.2"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.48.2.tgz#112e6ae1e23a1dc8333ce82bb9c65c2608b4d8a3"
+ integrity sha512-sR0Gja9Ky1teIq4qJOl0nC+Tk64/uYdX+mi+5iB//MH8gwyx8e3SOyhEzeLZEFEEfCaLf8KJq+Bd/6je1t+CAg==
+ dependencies:
+ "@typescript-eslint/scope-manager" "5.48.2"
+ "@typescript-eslint/type-utils" "5.48.2"
+ "@typescript-eslint/utils" "5.48.2"
+ debug "^4.3.4"
+ ignore "^5.2.0"
+ natural-compare-lite "^1.4.0"
+ regexpp "^3.2.0"
+ semver "^7.3.7"
+ tsutils "^3.21.0"
+
+"@typescript-eslint/experimental-utils@^5.0.0":
+ version "5.48.2"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.48.2.tgz#04057cd6e96d225a6ed10e6881086add6c230781"
+ integrity sha512-Iwx8De8dwl6qPaPZWIaEfP1feN/YFlA5FlCxF3zUIm+2AG92C5Tefkugj2L9ytOFrmTYkTE/CqvJFZbYoVZQMg==
+ dependencies:
+ "@typescript-eslint/utils" "5.48.2"
+
+"@typescript-eslint/parser@^5.5.0":
+ version "5.48.2"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.48.2.tgz#c9edef2a0922d26a37dba03be20c5fff378313b3"
+ integrity sha512-38zMsKsG2sIuM5Oi/olurGwYJXzmtdsHhn5mI/pQogP+BjYVkK5iRazCQ8RGS0V+YLk282uWElN70zAAUmaYHw==
+ dependencies:
+ "@typescript-eslint/scope-manager" "5.48.2"
+ "@typescript-eslint/types" "5.48.2"
+ "@typescript-eslint/typescript-estree" "5.48.2"
+ debug "^4.3.4"
+
+"@typescript-eslint/scope-manager@5.48.2":
+ version "5.48.2"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.48.2.tgz#bb7676cb78f1e94921eaab637a4b5d596f838abc"
+ integrity sha512-zEUFfonQid5KRDKoI3O+uP1GnrFd4tIHlvs+sTJXiWuypUWMuDaottkJuR612wQfOkjYbsaskSIURV9xo4f+Fw==
+ dependencies:
+ "@typescript-eslint/types" "5.48.2"
+ "@typescript-eslint/visitor-keys" "5.48.2"
+
+"@typescript-eslint/type-utils@5.48.2":
+ version "5.48.2"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.48.2.tgz#7d3aeca9fa37a7ab7e3d9056a99b42f342c48ad7"
+ integrity sha512-QVWx7J5sPMRiOMJp5dYshPxABRoZV1xbRirqSk8yuIIsu0nvMTZesKErEA3Oix1k+uvsk8Cs8TGJ6kQ0ndAcew==
+ dependencies:
+ "@typescript-eslint/typescript-estree" "5.48.2"
+ "@typescript-eslint/utils" "5.48.2"
+ debug "^4.3.4"
+ tsutils "^3.21.0"
+
+"@typescript-eslint/types@5.48.2":
+ version "5.48.2"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.48.2.tgz#635706abb1ec164137f92148f06f794438c97b8e"
+ integrity sha512-hE7dA77xxu7ByBc6KCzikgfRyBCTst6dZQpwaTy25iMYOnbNljDT4hjhrGEJJ0QoMjrfqrx+j1l1B9/LtKeuqA==
+
+"@typescript-eslint/typescript-estree@5.48.2":
+ version "5.48.2"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.48.2.tgz#6e206b462942b32383582a6c9251c05021cc21b0"
+ integrity sha512-bibvD3z6ilnoVxUBFEgkO0k0aFvUc4Cttt0dAreEr+nrAHhWzkO83PEVVuieK3DqcgL6VAK5dkzK8XUVja5Zcg==
+ dependencies:
+ "@typescript-eslint/types" "5.48.2"
+ "@typescript-eslint/visitor-keys" "5.48.2"
+ debug "^4.3.4"
+ globby "^11.1.0"
+ is-glob "^4.0.3"
+ semver "^7.3.7"
+ tsutils "^3.21.0"
+
+"@typescript-eslint/utils@5.48.2", "@typescript-eslint/utils@^5.13.0":
+ version "5.48.2"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.48.2.tgz#3777a91dcb22b8499a25519e06eef2e9569295a3"
+ integrity sha512-2h18c0d7jgkw6tdKTlNaM7wyopbLRBiit8oAxoP89YnuBOzCZ8g8aBCaCqq7h208qUTroL7Whgzam7UY3HVLow==
+ dependencies:
+ "@types/json-schema" "^7.0.9"
+ "@types/semver" "^7.3.12"
+ "@typescript-eslint/scope-manager" "5.48.2"
+ "@typescript-eslint/types" "5.48.2"
+ "@typescript-eslint/typescript-estree" "5.48.2"
+ eslint-scope "^5.1.1"
+ eslint-utils "^3.0.0"
+ semver "^7.3.7"
+
+"@typescript-eslint/visitor-keys@5.48.2":
+ version "5.48.2"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.48.2.tgz#c247582a0bcce467461d7b696513bf9455000060"
+ integrity sha512-z9njZLSkwmjFWUelGEwEbdf4NwKvfHxvGC0OcGN1Hp/XNDIcJ7D5DpPNPv6x6/mFvc1tQHsaWmpD/a4gOvvCJQ==
+ dependencies:
+ "@typescript-eslint/types" "5.48.2"
+ eslint-visitor-keys "^3.3.0"
+
+"@webassemblyjs/ast@1.11.1":
+ version "1.11.1"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7"
+ integrity sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==
+ dependencies:
+ "@webassemblyjs/helper-numbers" "1.11.1"
+ "@webassemblyjs/helper-wasm-bytecode" "1.11.1"
+
+"@webassemblyjs/floating-point-hex-parser@1.11.1":
+ version "1.11.1"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz#f6c61a705f0fd7a6aecaa4e8198f23d9dc179e4f"
+ integrity sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==
+
+"@webassemblyjs/helper-api-error@1.11.1":
+ version "1.11.1"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz#1a63192d8788e5c012800ba6a7a46c705288fd16"
+ integrity sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==
+
+"@webassemblyjs/helper-buffer@1.11.1":
+ version "1.11.1"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz#832a900eb444884cde9a7cad467f81500f5e5ab5"
+ integrity sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==
+
+"@webassemblyjs/helper-numbers@1.11.1":
+ version "1.11.1"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz#64d81da219fbbba1e3bd1bfc74f6e8c4e10a62ae"
+ integrity sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==
+ dependencies:
+ "@webassemblyjs/floating-point-hex-parser" "1.11.1"
+ "@webassemblyjs/helper-api-error" "1.11.1"
+ "@xtuc/long" "4.2.2"
+
+"@webassemblyjs/helper-wasm-bytecode@1.11.1":
+ version "1.11.1"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz#f328241e41e7b199d0b20c18e88429c4433295e1"
+ integrity sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==
+
+"@webassemblyjs/helper-wasm-section@1.11.1":
+ version "1.11.1"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz#21ee065a7b635f319e738f0dd73bfbda281c097a"
+ integrity sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==
+ dependencies:
+ "@webassemblyjs/ast" "1.11.1"
+ "@webassemblyjs/helper-buffer" "1.11.1"
+ "@webassemblyjs/helper-wasm-bytecode" "1.11.1"
+ "@webassemblyjs/wasm-gen" "1.11.1"
+
+"@webassemblyjs/ieee754@1.11.1":
+ version "1.11.1"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz#963929e9bbd05709e7e12243a099180812992614"
+ integrity sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==
+ dependencies:
+ "@xtuc/ieee754" "^1.2.0"
+
+"@webassemblyjs/leb128@1.11.1":
+ version "1.11.1"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.1.tgz#ce814b45574e93d76bae1fb2644ab9cdd9527aa5"
+ integrity sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==
+ dependencies:
+ "@xtuc/long" "4.2.2"
+
+"@webassemblyjs/utf8@1.11.1":
+ version "1.11.1"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.1.tgz#d1f8b764369e7c6e6bae350e854dec9a59f0a3ff"
+ integrity sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==
+
+"@webassemblyjs/wasm-edit@1.11.1":
+ version "1.11.1"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz#ad206ebf4bf95a058ce9880a8c092c5dec8193d6"
+ integrity sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==
+ dependencies:
+ "@webassemblyjs/ast" "1.11.1"
+ "@webassemblyjs/helper-buffer" "1.11.1"
+ "@webassemblyjs/helper-wasm-bytecode" "1.11.1"
+ "@webassemblyjs/helper-wasm-section" "1.11.1"
+ "@webassemblyjs/wasm-gen" "1.11.1"
+ "@webassemblyjs/wasm-opt" "1.11.1"
+ "@webassemblyjs/wasm-parser" "1.11.1"
+ "@webassemblyjs/wast-printer" "1.11.1"
+
+"@webassemblyjs/wasm-gen@1.11.1":
+ version "1.11.1"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz#86c5ea304849759b7d88c47a32f4f039ae3c8f76"
+ integrity sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==
+ dependencies:
+ "@webassemblyjs/ast" "1.11.1"
+ "@webassemblyjs/helper-wasm-bytecode" "1.11.1"
+ "@webassemblyjs/ieee754" "1.11.1"
+ "@webassemblyjs/leb128" "1.11.1"
+ "@webassemblyjs/utf8" "1.11.1"
+
+"@webassemblyjs/wasm-opt@1.11.1":
+ version "1.11.1"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz#657b4c2202f4cf3b345f8a4c6461c8c2418985f2"
+ integrity sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==
+ dependencies:
+ "@webassemblyjs/ast" "1.11.1"
+ "@webassemblyjs/helper-buffer" "1.11.1"
+ "@webassemblyjs/wasm-gen" "1.11.1"
+ "@webassemblyjs/wasm-parser" "1.11.1"
+
+"@webassemblyjs/wasm-parser@1.11.1":
+ version "1.11.1"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz#86ca734534f417e9bd3c67c7a1c75d8be41fb199"
+ integrity sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==
+ dependencies:
+ "@webassemblyjs/ast" "1.11.1"
+ "@webassemblyjs/helper-api-error" "1.11.1"
+ "@webassemblyjs/helper-wasm-bytecode" "1.11.1"
+ "@webassemblyjs/ieee754" "1.11.1"
+ "@webassemblyjs/leb128" "1.11.1"
+ "@webassemblyjs/utf8" "1.11.1"
+
+"@webassemblyjs/wast-printer@1.11.1":
+ version "1.11.1"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz#d0c73beda8eec5426f10ae8ef55cee5e7084c2f0"
+ integrity sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==
+ dependencies:
+ "@webassemblyjs/ast" "1.11.1"
+ "@xtuc/long" "4.2.2"
+
+"@xtuc/ieee754@^1.2.0":
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790"
+ integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==
+
+"@xtuc/long@4.2.2":
+ version "4.2.2"
+ resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d"
+ integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==
+
+abab@^2.0.3, abab@^2.0.5:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291"
+ integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==
+
+accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8:
+ version "1.3.8"
+ resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e"
+ integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==
+ dependencies:
+ mime-types "~2.1.34"
+ negotiator "0.6.3"
+
+acorn-globals@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45"
+ integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==
+ dependencies:
+ acorn "^7.1.1"
+ acorn-walk "^7.1.1"
+
+acorn-import-assertions@^1.7.6:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz#ba2b5939ce62c238db6d93d81c9b111b29b855e9"
+ integrity sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==
+
+acorn-jsx@^5.3.2:
+ version "5.3.2"
+ resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
+ integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
+
+acorn-node@^1.8.2:
+ version "1.8.2"
+ resolved "https://registry.yarnpkg.com/acorn-node/-/acorn-node-1.8.2.tgz#114c95d64539e53dede23de8b9d96df7c7ae2af8"
+ integrity sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==
+ dependencies:
+ acorn "^7.0.0"
+ acorn-walk "^7.0.0"
+ xtend "^4.0.2"
+
+acorn-walk@^7.0.0, acorn-walk@^7.1.1:
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc"
+ integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==
+
+acorn@^7.0.0, acorn@^7.1.1:
+ version "7.4.1"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa"
+ integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
+
+acorn@^8.2.4, acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8.0:
+ version "8.8.1"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73"
+ integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==
+
+address@^1.0.1, address@^1.1.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/address/-/address-1.2.2.tgz#2b5248dac5485a6390532c6a517fda2e3faac89e"
+ integrity sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==
+
+adjust-sourcemap-loader@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz#fc4a0fd080f7d10471f30a7320f25560ade28c99"
+ integrity sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==
+ dependencies:
+ loader-utils "^2.0.0"
+ regex-parser "^2.2.11"
+
+agent-base@6:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"
+ integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==
+ dependencies:
+ debug "4"
+
+ajv-formats@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520"
+ integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==
+ dependencies:
+ ajv "^8.0.0"
+
+ajv-keywords@^3.4.1, ajv-keywords@^3.5.2:
+ version "3.5.2"
+ resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d"
+ integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==
+
+ajv-keywords@^5.0.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16"
+ integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==
+ dependencies:
+ fast-deep-equal "^3.1.3"
+
+ajv@^6.10.0, ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5:
+ version "6.12.6"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
+ integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
+ dependencies:
+ fast-deep-equal "^3.1.1"
+ fast-json-stable-stringify "^2.0.0"
+ json-schema-traverse "^0.4.1"
+ uri-js "^4.2.2"
+
+ajv@^8.0.0, ajv@^8.6.0, ajv@^8.8.0:
+ version "8.12.0"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1"
+ integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==
+ dependencies:
+ fast-deep-equal "^3.1.1"
+ json-schema-traverse "^1.0.0"
+ require-from-string "^2.0.2"
+ uri-js "^4.2.2"
+
+ansi-escapes@^4.2.1, ansi-escapes@^4.3.1:
+ version "4.3.2"
+ resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e"
+ integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==
+ dependencies:
+ type-fest "^0.21.3"
+
+ansi-html-community@^0.0.8:
+ version "0.0.8"
+ resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41"
+ integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==
+
+ansi-regex@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
+ integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
+
+ansi-regex@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a"
+ integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==
+
+ansi-styles@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
+ integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
+ dependencies:
+ color-convert "^1.9.0"
+
+ansi-styles@^4.0.0, ansi-styles@^4.1.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
+ integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
+ dependencies:
+ color-convert "^2.0.1"
+
+ansi-styles@^5.0.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b"
+ integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==
+
+anymatch@^3.0.3, anymatch@~3.1.2:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e"
+ integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==
+ dependencies:
+ normalize-path "^3.0.0"
+ picomatch "^2.0.4"
+
+arg@^5.0.2:
+ version "5.0.2"
+ resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c"
+ integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==
+
+argparse@^1.0.7:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
+ integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
+ dependencies:
+ sprintf-js "~1.0.2"
+
+argparse@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
+ integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
+
+aria-query@^5.0.0, aria-query@^5.1.3:
+ version "5.1.3"
+ resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.1.3.tgz#19db27cd101152773631396f7a95a3b58c22c35e"
+ integrity sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==
+ dependencies:
+ deep-equal "^2.0.5"
+
+array-flatten@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
+ integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==
+
+array-flatten@^2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099"
+ integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==
+
+array-includes@^3.1.5, array-includes@^3.1.6:
+ version "3.1.6"
+ resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f"
+ integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.4"
+ es-abstract "^1.20.4"
+ get-intrinsic "^1.1.3"
+ is-string "^1.0.7"
+
+array-union@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
+ integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
+
+array.prototype.flat@^1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2"
+ integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.4"
+ es-abstract "^1.20.4"
+ es-shim-unscopables "^1.0.0"
+
+array.prototype.flatmap@^1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183"
+ integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.4"
+ es-abstract "^1.20.4"
+ es-shim-unscopables "^1.0.0"
+
+array.prototype.reduce@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz#6b20b0daa9d9734dd6bc7ea66b5bbce395471eac"
+ integrity sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.4"
+ es-abstract "^1.20.4"
+ es-array-method-boxes-properly "^1.0.0"
+ is-string "^1.0.7"
+
+array.prototype.tosorted@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz#ccf44738aa2b5ac56578ffda97c03fd3e23dd532"
+ integrity sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.4"
+ es-abstract "^1.20.4"
+ es-shim-unscopables "^1.0.0"
+ get-intrinsic "^1.1.3"
+
+asap@~2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
+ integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==
+
+ast-types-flow@^0.0.7:
+ version "0.0.7"
+ resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad"
+ integrity sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==
+
+async@^3.2.3:
+ version "3.2.4"
+ resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c"
+ integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==
+
+asynckit@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+ integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
+
+at-least-node@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2"
+ integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==
+
+autoprefixer@^10.4.13:
+ version "10.4.13"
+ resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.13.tgz#b5136b59930209a321e9fa3dca2e7c4d223e83a8"
+ integrity sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==
+ dependencies:
+ browserslist "^4.21.4"
+ caniuse-lite "^1.0.30001426"
+ fraction.js "^4.2.0"
+ normalize-range "^0.1.2"
+ picocolors "^1.0.0"
+ postcss-value-parser "^4.2.0"
+
+available-typed-arrays@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7"
+ integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==
+
+axe-core@^4.6.2:
+ version "4.6.2"
+ resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.6.2.tgz#6e566ab2a3d29e415f5115bc0fd2597a5eb3e5e3"
+ integrity sha512-b1WlTV8+XKLj9gZy2DZXgQiyDp9xkkoe2a6U6UbYccScq2wgH/YwCeI2/Jq2mgo0HzQxqJOjWZBLeA/mqsk5Mg==
+
+axios@1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/axios/-/axios-1.1.3.tgz#8274250dada2edf53814ed7db644b9c2866c1e35"
+ integrity sha512-00tXVRwKx/FZr/IDVFt4C+f9FYairX517WoGCL6dpOntqLkZofjhu43F/Xl44UOpqa+9sLFDrG/XAnFsUYgkDA==
+ dependencies:
+ follow-redirects "^1.15.0"
+ form-data "^4.0.0"
+ proxy-from-env "^1.1.0"
+
+axobject-query@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.1.1.tgz#3b6e5c6d4e43ca7ba51c5babf99d22a9c68485e1"
+ integrity sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==
+ dependencies:
+ deep-equal "^2.0.5"
+
+babel-jest@^27.4.2, babel-jest@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.5.1.tgz#a1bf8d61928edfefd21da27eb86a695bfd691444"
+ integrity sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==
+ dependencies:
+ "@jest/transform" "^27.5.1"
+ "@jest/types" "^27.5.1"
+ "@types/babel__core" "^7.1.14"
+ babel-plugin-istanbul "^6.1.1"
+ babel-preset-jest "^27.5.1"
+ chalk "^4.0.0"
+ graceful-fs "^4.2.9"
+ slash "^3.0.0"
+
+babel-loader@^8.2.3:
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.3.0.tgz#124936e841ba4fe8176786d6ff28add1f134d6a8"
+ integrity sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==
+ dependencies:
+ find-cache-dir "^3.3.1"
+ loader-utils "^2.0.0"
+ make-dir "^3.1.0"
+ schema-utils "^2.6.5"
+
+babel-plugin-istanbul@^6.1.1:
+ version "6.1.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73"
+ integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==
+ 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"
+
+babel-plugin-jest-hoist@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz#9be98ecf28c331eb9f5df9c72d6f89deb8181c2e"
+ integrity sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==
+ dependencies:
+ "@babel/template" "^7.3.3"
+ "@babel/types" "^7.3.3"
+ "@types/babel__core" "^7.0.0"
+ "@types/babel__traverse" "^7.0.6"
+
+babel-plugin-macros@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz#9ef6dc74deb934b4db344dc973ee851d148c50c1"
+ integrity sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==
+ dependencies:
+ "@babel/runtime" "^7.12.5"
+ cosmiconfig "^7.0.0"
+ resolve "^1.19.0"
+
+babel-plugin-named-asset-import@^0.3.8:
+ version "0.3.8"
+ resolved "https://registry.yarnpkg.com/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz#6b7fa43c59229685368683c28bc9734f24524cc2"
+ integrity sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==
+
+babel-plugin-polyfill-corejs2@^0.3.3:
+ version "0.3.3"
+ resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz#5d1bd3836d0a19e1b84bbf2d9640ccb6f951c122"
+ integrity sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==
+ dependencies:
+ "@babel/compat-data" "^7.17.7"
+ "@babel/helper-define-polyfill-provider" "^0.3.3"
+ semver "^6.1.1"
+
+babel-plugin-polyfill-corejs3@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz#56ad88237137eade485a71b52f72dbed57c6230a"
+ integrity sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==
+ dependencies:
+ "@babel/helper-define-polyfill-provider" "^0.3.3"
+ core-js-compat "^3.25.1"
+
+babel-plugin-polyfill-regenerator@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz#390f91c38d90473592ed43351e801a9d3e0fd747"
+ integrity sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==
+ dependencies:
+ "@babel/helper-define-polyfill-provider" "^0.3.3"
+
+babel-plugin-transform-react-remove-prop-types@^0.4.24:
+ version "0.4.24"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz#f2edaf9b4c6a5fbe5c1d678bfb531078c1555f3a"
+ integrity sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==
+
+babel-preset-current-node-syntax@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b"
+ integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==
+ dependencies:
+ "@babel/plugin-syntax-async-generators" "^7.8.4"
+ "@babel/plugin-syntax-bigint" "^7.8.3"
+ "@babel/plugin-syntax-class-properties" "^7.8.3"
+ "@babel/plugin-syntax-import-meta" "^7.8.3"
+ "@babel/plugin-syntax-json-strings" "^7.8.3"
+ "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3"
+ "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
+ "@babel/plugin-syntax-numeric-separator" "^7.8.3"
+ "@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-top-level-await" "^7.8.3"
+
+babel-preset-jest@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz#91f10f58034cb7989cb4f962b69fa6eef6a6bc81"
+ integrity sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==
+ dependencies:
+ babel-plugin-jest-hoist "^27.5.1"
+ babel-preset-current-node-syntax "^1.0.0"
+
+babel-preset-react-app@^10.0.1:
+ version "10.0.1"
+ resolved "https://registry.yarnpkg.com/babel-preset-react-app/-/babel-preset-react-app-10.0.1.tgz#ed6005a20a24f2c88521809fa9aea99903751584"
+ integrity sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg==
+ dependencies:
+ "@babel/core" "^7.16.0"
+ "@babel/plugin-proposal-class-properties" "^7.16.0"
+ "@babel/plugin-proposal-decorators" "^7.16.4"
+ "@babel/plugin-proposal-nullish-coalescing-operator" "^7.16.0"
+ "@babel/plugin-proposal-numeric-separator" "^7.16.0"
+ "@babel/plugin-proposal-optional-chaining" "^7.16.0"
+ "@babel/plugin-proposal-private-methods" "^7.16.0"
+ "@babel/plugin-transform-flow-strip-types" "^7.16.0"
+ "@babel/plugin-transform-react-display-name" "^7.16.0"
+ "@babel/plugin-transform-runtime" "^7.16.4"
+ "@babel/preset-env" "^7.16.4"
+ "@babel/preset-react" "^7.16.0"
+ "@babel/preset-typescript" "^7.16.0"
+ "@babel/runtime" "^7.16.3"
+ babel-plugin-macros "^3.1.0"
+ babel-plugin-transform-react-remove-prop-types "^0.4.24"
+
+balanced-match@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
+ integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
+
+batch@0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16"
+ integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==
+
+bfj@^7.0.2:
+ version "7.0.2"
+ resolved "https://registry.yarnpkg.com/bfj/-/bfj-7.0.2.tgz#1988ce76f3add9ac2913fd8ba47aad9e651bfbb2"
+ integrity sha512-+e/UqUzwmzJamNF50tBV6tZPTORow7gQ96iFow+8b562OdMpEK0BcJEq2OSPEDmAbSMBQ7PKZ87ubFkgxpYWgw==
+ dependencies:
+ bluebird "^3.5.5"
+ check-types "^11.1.1"
+ hoopy "^0.1.4"
+ tryer "^1.0.1"
+
+big.js@^5.2.2:
+ version "5.2.2"
+ resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328"
+ integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==
+
+binary-extensions@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
+ integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
+
+bluebird@^3.5.5:
+ version "3.7.2"
+ resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
+ integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
+
+body-parser@1.20.1:
+ version "1.20.1"
+ resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668"
+ integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==
+ dependencies:
+ bytes "3.1.2"
+ content-type "~1.0.4"
+ 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.1"
+ type-is "~1.6.18"
+ unpipe "1.0.0"
+
+bonjour-service@^1.0.11:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.1.0.tgz#424170268d68af26ff83a5c640b95def01803a13"
+ integrity sha512-LVRinRB3k1/K0XzZ2p58COnWvkQknIY6sf0zF2rpErvcJXpMBttEPQSxK+HEXSS9VmpZlDoDnQWv8ftJT20B0Q==
+ dependencies:
+ array-flatten "^2.1.2"
+ dns-equal "^1.0.0"
+ fast-deep-equal "^3.1.3"
+ multicast-dns "^7.2.5"
+
+boolbase@^1.0.0, boolbase@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
+ integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==
+
+bootstrap@5.2.2:
+ version "5.2.2"
+ resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-5.2.2.tgz#834e053eed584a65e244d8aa112a6959f56e27a0"
+ integrity sha512-dEtzMTV71n6Fhmbg4fYJzQsw1N29hJKO1js5ackCgIpDcGid2ETMGC6zwSYw09v05Y+oRdQ9loC54zB1La3hHQ==
+
+bootswatch@5.2.2:
+ version "5.2.2"
+ resolved "https://registry.yarnpkg.com/bootswatch/-/bootswatch-5.2.2.tgz#4d3d15dffd8de16112b64fa37c1164cca1543110"
+ integrity sha512-ByybawTUbMzzsdIb+5lYjme088UBYtNBhJCBt4W77PKG57fzjd2Y11rdGDgHgFGXVTMD2Oaci3/qJon4L0ceTQ==
+
+brace-expansion@^1.1.7:
+ version "1.1.11"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
+ integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
+ dependencies:
+ balanced-match "^1.0.0"
+ concat-map "0.0.1"
+
+brace-expansion@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae"
+ integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==
+ dependencies:
+ balanced-match "^1.0.0"
+
+braces@^3.0.2, braces@~3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
+ integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
+ dependencies:
+ fill-range "^7.0.1"
+
+browser-process-hrtime@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626"
+ integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==
+
+browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.16.6, browserslist@^4.18.1, browserslist@^4.21.3, browserslist@^4.21.4:
+ version "4.21.4"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.4.tgz#e7496bbc67b9e39dd0f98565feccdcb0d4ff6987"
+ integrity sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==
+ dependencies:
+ caniuse-lite "^1.0.30001400"
+ electron-to-chromium "^1.4.251"
+ node-releases "^2.0.6"
+ update-browserslist-db "^1.0.9"
+
+bser@2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05"
+ integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==
+ dependencies:
+ node-int64 "^0.4.0"
+
+buffer-from@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
+ integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
+
+builtin-modules@^3.1.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6"
+ integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==
+
+bytes@3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
+ integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==
+
+bytes@3.1.2:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5"
+ integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==
+
+call-bind@^1.0.0, call-bind@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
+ integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==
+ dependencies:
+ function-bind "^1.1.1"
+ get-intrinsic "^1.0.2"
+
+callsites@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
+ integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
+
+camel-case@^4.1.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a"
+ integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==
+ dependencies:
+ pascal-case "^3.1.2"
+ tslib "^2.0.3"
+
+camelcase-css@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5"
+ integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==
+
+camelcase@^5.3.1:
+ version "5.3.1"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
+ integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
+
+camelcase@^6.2.0, camelcase@^6.2.1:
+ version "6.3.0"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a"
+ integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==
+
+caniuse-api@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0"
+ integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==
+ dependencies:
+ browserslist "^4.0.0"
+ caniuse-lite "^1.0.0"
+ lodash.memoize "^4.1.2"
+ lodash.uniq "^4.5.0"
+
+caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001400, caniuse-lite@^1.0.30001426:
+ version "1.0.30001445"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001445.tgz#cf2d4eb93f2bcdf0310de9dd6d18be271bc0b447"
+ integrity sha512-8sdQIdMztYmzfTMO6KfLny878Ln9c2M0fc7EH60IjlP4Dc4PiCy7K2Vl3ITmWgOyPgVQKa5x+UP/KqFsxj4mBg==
+
+case-sensitive-paths-webpack-plugin@^2.4.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz#db64066c6422eed2e08cc14b986ca43796dbc6d4"
+ integrity sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==
+
+chalk@^2.0.0, chalk@^2.4.1:
+ version "2.4.2"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
+ integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
+ dependencies:
+ ansi-styles "^3.2.1"
+ escape-string-regexp "^1.0.5"
+ supports-color "^5.3.0"
+
+chalk@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4"
+ integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==
+ dependencies:
+ ansi-styles "^4.1.0"
+ supports-color "^7.1.0"
+
+chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
+ integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
+ dependencies:
+ ansi-styles "^4.1.0"
+ supports-color "^7.1.0"
+
+char-regex@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf"
+ integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==
+
+char-regex@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-2.0.1.tgz#6dafdb25f9d3349914079f010ba8d0e6ff9cd01e"
+ integrity sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw==
+
+check-types@^11.1.1:
+ version "11.2.2"
+ resolved "https://registry.yarnpkg.com/check-types/-/check-types-11.2.2.tgz#7afc0b6a860d686885062f2dba888ba5710335b4"
+ integrity sha512-HBiYvXvn9Z70Z88XKjz3AEKd4HJhBXsa3j7xFnITAzoS8+q6eIGi8qDB8FKPBAjtuxjI/zFpwuiCb8oDtKOYrA==
+
+chokidar@^3.4.2, chokidar@^3.5.3:
+ version "3.5.3"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd"
+ integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==
+ 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"
+ optionalDependencies:
+ fsevents "~2.3.2"
+
+chrome-trace-event@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac"
+ integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==
+
+ci-info@^3.2.0:
+ version "3.7.1"
+ resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.7.1.tgz#708a6cdae38915d597afdf3b145f2f8e1ff55f3f"
+ integrity sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==
+
+cjs-module-lexer@^1.0.0:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40"
+ integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==
+
+classnames@^2.3.1:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.2.tgz#351d813bf0137fcc6a76a16b88208d2560a0d924"
+ integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==
+
+clean-css@^5.2.2:
+ version "5.3.1"
+ resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.1.tgz#d0610b0b90d125196a2894d35366f734e5d7aa32"
+ integrity sha512-lCr8OHhiWCTw4v8POJovCoh4T7I9U11yVsPjMWWnnMmp9ZowCxyad1Pathle/9HjaDp+fdQKjO9fQydE6RHTZg==
+ dependencies:
+ source-map "~0.6.0"
+
+cliui@^7.0.2:
+ version "7.0.4"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f"
+ integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==
+ dependencies:
+ string-width "^4.2.0"
+ strip-ansi "^6.0.0"
+ wrap-ansi "^7.0.0"
+
+co@^4.6.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
+ integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==
+
+coa@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3"
+ integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==
+ dependencies:
+ "@types/q" "^1.5.1"
+ chalk "^2.4.1"
+ q "^1.1.2"
+
+collect-v8-coverage@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59"
+ integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==
+
+color-convert@^1.9.0:
+ version "1.9.3"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
+ integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
+ dependencies:
+ color-name "1.1.3"
+
+color-convert@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
+ integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
+ dependencies:
+ color-name "~1.1.4"
+
+color-name@1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
+ integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==
+
+color-name@^1.1.4, color-name@~1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
+ integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
+
+colord@^2.9.1:
+ version "2.9.3"
+ resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43"
+ integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==
+
+colorette@^2.0.10:
+ version "2.0.19"
+ resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798"
+ integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==
+
+combined-stream@^1.0.8:
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
+ integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
+ dependencies:
+ delayed-stream "~1.0.0"
+
+commander@^2.20.0:
+ version "2.20.3"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
+ integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
+
+commander@^7.2.0:
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7"
+ integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==
+
+commander@^8.3.0:
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66"
+ integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==
+
+common-path-prefix@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-3.0.0.tgz#7d007a7e07c58c4b4d5f433131a19141b29f11e0"
+ integrity sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==
+
+common-tags@^1.8.0:
+ version "1.8.2"
+ resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.2.tgz#94ebb3c076d26032745fd54face7f688ef5ac9c6"
+ integrity sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==
+
+commondir@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
+ integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==
+
+compressible@~2.0.16:
+ version "2.0.18"
+ resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba"
+ integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==
+ dependencies:
+ mime-db ">= 1.43.0 < 2"
+
+compression@^1.7.4:
+ version "1.7.4"
+ resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f"
+ integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==
+ dependencies:
+ accepts "~1.3.5"
+ bytes "3.0.0"
+ compressible "~2.0.16"
+ debug "2.6.9"
+ on-headers "~1.0.2"
+ safe-buffer "5.1.2"
+ vary "~1.1.2"
+
+concat-map@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+ integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
+
+confusing-browser-globals@^1.0.11:
+ version "1.0.11"
+ resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz#ae40e9b57cdd3915408a2805ebd3a5585608dc81"
+ integrity sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==
+
+connect-history-api-fallback@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz#647264845251a0daf25b97ce87834cace0f5f1c8"
+ integrity sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==
+
+content-disposition@0.5.4:
+ version "0.5.4"
+ resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe"
+ integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==
+ dependencies:
+ safe-buffer "5.2.1"
+
+content-type@~1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
+ integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==
+
+convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0:
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f"
+ integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==
+
+cookie-signature@1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
+ integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==
+
+cookie@0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b"
+ integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==
+
+core-js-compat@^3.25.1:
+ version "3.27.1"
+ resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.27.1.tgz#b5695eb25c602d72b1d30cbfba3cb7e5e4cf0a67"
+ integrity sha512-Dg91JFeCDA17FKnneN7oCMz4BkQ4TcffkgHP4OWwp9yx3pi7ubqMDXXSacfNak1PQqjc95skyt+YBLHQJnkJwA==
+ dependencies:
+ browserslist "^4.21.4"
+
+core-js-pure@^3.23.3:
+ version "3.27.1"
+ resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.27.1.tgz#ede4a6b8440585c7190062757069c01d37a19dca"
+ integrity sha512-BS2NHgwwUppfeoqOXqi08mUqS5FiZpuRuJJpKsaME7kJz0xxuk0xkhDdfMIlP/zLa80krBqss1LtD7f889heAw==
+
+core-js@^3.19.2:
+ version "3.27.1"
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.27.1.tgz#23cc909b315a6bb4e418bf40a52758af2103ba46"
+ integrity sha512-GutwJLBChfGCpwwhbYoqfv03LAfmiz7e7D/BNxzeMxwQf10GRSzqiOjx7AmtEk+heiD/JWmBuyBPgFtx0Sg1ww==
+
+core-util-is@~1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85"
+ integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==
+
+cosmiconfig@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982"
+ integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==
+ dependencies:
+ "@types/parse-json" "^4.0.0"
+ import-fresh "^3.1.0"
+ parse-json "^5.0.0"
+ path-type "^4.0.0"
+ yaml "^1.7.2"
+
+cosmiconfig@^7.0.0:
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6"
+ integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==
+ dependencies:
+ "@types/parse-json" "^4.0.0"
+ import-fresh "^3.2.1"
+ parse-json "^5.0.0"
+ path-type "^4.0.0"
+ yaml "^1.10.0"
+
+cross-spawn@^7.0.2, cross-spawn@^7.0.3:
+ version "7.0.3"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
+ integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
+ dependencies:
+ path-key "^3.1.0"
+ shebang-command "^2.0.0"
+ which "^2.0.1"
+
+crypto-random-string@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5"
+ integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==
+
+css-blank-pseudo@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz#36523b01c12a25d812df343a32c322d2a2324561"
+ integrity sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==
+ dependencies:
+ postcss-selector-parser "^6.0.9"
+
+css-declaration-sorter@^6.3.1:
+ version "6.3.1"
+ resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.3.1.tgz#be5e1d71b7a992433fb1c542c7a1b835e45682ec"
+ integrity sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w==
+
+css-has-pseudo@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz#57f6be91ca242d5c9020ee3e51bbb5b89fc7af73"
+ integrity sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==
+ dependencies:
+ postcss-selector-parser "^6.0.9"
+
+css-loader@^6.5.1:
+ version "6.7.3"
+ resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.7.3.tgz#1e8799f3ccc5874fdd55461af51137fcc5befbcd"
+ integrity sha512-qhOH1KlBMnZP8FzRO6YCH9UHXQhVMcEGLyNdb7Hv2cpcmJbW0YrddO+tG1ab5nT41KpHIYGsbeHqxB9xPu1pKQ==
+ dependencies:
+ icss-utils "^5.1.0"
+ postcss "^8.4.19"
+ postcss-modules-extract-imports "^3.0.0"
+ postcss-modules-local-by-default "^4.0.0"
+ postcss-modules-scope "^3.0.0"
+ postcss-modules-values "^4.0.0"
+ postcss-value-parser "^4.2.0"
+ semver "^7.3.8"
+
+css-minimizer-webpack-plugin@^3.2.0:
+ version "3.4.1"
+ resolved "https://registry.yarnpkg.com/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz#ab78f781ced9181992fe7b6e4f3422e76429878f"
+ integrity sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==
+ dependencies:
+ cssnano "^5.0.6"
+ jest-worker "^27.0.2"
+ postcss "^8.3.5"
+ schema-utils "^4.0.0"
+ serialize-javascript "^6.0.0"
+ source-map "^0.6.1"
+
+css-prefers-color-scheme@^6.0.3:
+ version "6.0.3"
+ resolved "https://registry.yarnpkg.com/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz#ca8a22e5992c10a5b9d315155e7caee625903349"
+ integrity sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==
+
+css-select-base-adapter@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7"
+ integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==
+
+css-select@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef"
+ integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==
+ dependencies:
+ boolbase "^1.0.0"
+ css-what "^3.2.1"
+ domutils "^1.7.0"
+ nth-check "^1.0.2"
+
+css-select@^4.1.3:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b"
+ integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==
+ dependencies:
+ boolbase "^1.0.0"
+ css-what "^6.0.1"
+ domhandler "^4.3.1"
+ domutils "^2.8.0"
+ nth-check "^2.0.1"
+
+css-tree@1.0.0-alpha.37:
+ version "1.0.0-alpha.37"
+ resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22"
+ integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==
+ dependencies:
+ mdn-data "2.0.4"
+ source-map "^0.6.1"
+
+css-tree@^1.1.2, css-tree@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d"
+ integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==
+ dependencies:
+ mdn-data "2.0.14"
+ source-map "^0.6.1"
+
+css-what@^3.2.1:
+ version "3.4.2"
+ resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4"
+ integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==
+
+css-what@^6.0.1:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4"
+ integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==
+
+css.escape@^1.5.1:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb"
+ integrity sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==
+
+cssdb@^7.1.0:
+ version "7.2.1"
+ resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-7.2.1.tgz#f6f59e2c4249bcb5ca5606fc4ab6f9a808d55486"
+ integrity sha512-btohrCpVaLqOoMt90aumHe6HU4c06duiYA8ymwtpGfwuZAhWKDBve/c2k+E85Jeq5iojPkeonqiKV+aLeY8QlA==
+
+cssesc@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee"
+ integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==
+
+cssnano-preset-default@^5.2.13:
+ version "5.2.13"
+ resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-5.2.13.tgz#e7353b0c57975d1bdd97ac96e68e5c1b8c68e990"
+ integrity sha512-PX7sQ4Pb+UtOWuz8A1d+Rbi+WimBIxJTRyBdgGp1J75VU0r/HFQeLnMYgHiCAp6AR4rqrc7Y4R+1Rjk3KJz6DQ==
+ dependencies:
+ css-declaration-sorter "^6.3.1"
+ cssnano-utils "^3.1.0"
+ postcss-calc "^8.2.3"
+ postcss-colormin "^5.3.0"
+ postcss-convert-values "^5.1.3"
+ postcss-discard-comments "^5.1.2"
+ postcss-discard-duplicates "^5.1.0"
+ postcss-discard-empty "^5.1.1"
+ postcss-discard-overridden "^5.1.0"
+ postcss-merge-longhand "^5.1.7"
+ postcss-merge-rules "^5.1.3"
+ postcss-minify-font-values "^5.1.0"
+ postcss-minify-gradients "^5.1.1"
+ postcss-minify-params "^5.1.4"
+ postcss-minify-selectors "^5.2.1"
+ postcss-normalize-charset "^5.1.0"
+ postcss-normalize-display-values "^5.1.0"
+ postcss-normalize-positions "^5.1.1"
+ postcss-normalize-repeat-style "^5.1.1"
+ postcss-normalize-string "^5.1.0"
+ postcss-normalize-timing-functions "^5.1.0"
+ postcss-normalize-unicode "^5.1.1"
+ postcss-normalize-url "^5.1.0"
+ postcss-normalize-whitespace "^5.1.1"
+ postcss-ordered-values "^5.1.3"
+ postcss-reduce-initial "^5.1.1"
+ postcss-reduce-transforms "^5.1.0"
+ postcss-svgo "^5.1.0"
+ postcss-unique-selectors "^5.1.1"
+
+cssnano-utils@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-3.1.0.tgz#95684d08c91511edfc70d2636338ca37ef3a6861"
+ integrity sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==
+
+cssnano@^5.0.6:
+ version "5.1.14"
+ resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-5.1.14.tgz#07b0af6da73641276fe5a6d45757702ebae2eb05"
+ integrity sha512-Oou7ihiTocbKqi0J1bB+TRJIQX5RMR3JghA8hcWSw9mjBLQ5Y3RWqEDoYG3sRNlAbCIXpqMoZGbq5KDR3vdzgw==
+ dependencies:
+ cssnano-preset-default "^5.2.13"
+ lilconfig "^2.0.3"
+ yaml "^1.10.2"
+
+csso@^4.0.2, csso@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529"
+ integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==
+ dependencies:
+ css-tree "^1.1.2"
+
+cssom@^0.4.4:
+ version "0.4.4"
+ resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10"
+ integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==
+
+cssom@~0.3.6:
+ version "0.3.8"
+ resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a"
+ integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==
+
+cssstyle@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852"
+ integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==
+ dependencies:
+ cssom "~0.3.6"
+
+csstype@^3.0.2:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.1.tgz#841b532c45c758ee546a11d5bd7b7b473c8c30b9"
+ integrity sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==
+
+damerau-levenshtein@^1.0.8:
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7"
+ integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==
+
+data-urls@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b"
+ integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==
+ dependencies:
+ abab "^2.0.3"
+ whatwg-mimetype "^2.3.0"
+ whatwg-url "^8.0.0"
+
+debug@2.6.9, debug@^2.6.0:
+ version "2.6.9"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
+ integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
+ dependencies:
+ ms "2.0.0"
+
+debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4:
+ version "4.3.4"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
+ integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
+ dependencies:
+ ms "2.1.2"
+
+debug@^3.2.7:
+ version "3.2.7"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
+ integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
+ dependencies:
+ ms "^2.1.1"
+
+decimal.js@^10.2.1:
+ version "10.4.3"
+ resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23"
+ integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==
+
+dedent@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c"
+ integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==
+
+deep-equal@^2.0.5:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.2.0.tgz#5caeace9c781028b9ff459f33b779346637c43e6"
+ integrity sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==
+ dependencies:
+ call-bind "^1.0.2"
+ es-get-iterator "^1.1.2"
+ get-intrinsic "^1.1.3"
+ is-arguments "^1.1.1"
+ is-array-buffer "^3.0.1"
+ is-date-object "^1.0.5"
+ is-regex "^1.1.4"
+ is-shared-array-buffer "^1.0.2"
+ isarray "^2.0.5"
+ object-is "^1.1.5"
+ object-keys "^1.1.1"
+ object.assign "^4.1.4"
+ regexp.prototype.flags "^1.4.3"
+ side-channel "^1.0.4"
+ which-boxed-primitive "^1.0.2"
+ which-collection "^1.0.1"
+ which-typed-array "^1.1.9"
+
+deep-is@^0.1.3, deep-is@~0.1.3:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
+ integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
+
+deepmerge@^2.1.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-2.2.1.tgz#5d3ff22a01c00f645405a2fbc17d0778a1801170"
+ integrity sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==
+
+deepmerge@^4.2.2:
+ version "4.2.2"
+ resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955"
+ integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==
+
+default-gateway@^6.0.3:
+ version "6.0.3"
+ resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-6.0.3.tgz#819494c888053bdb743edbf343d6cdf7f2943a71"
+ integrity sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==
+ dependencies:
+ execa "^5.0.0"
+
+define-lazy-prop@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f"
+ integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==
+
+define-properties@^1.1.3, define-properties@^1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1"
+ integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==
+ dependencies:
+ has-property-descriptors "^1.0.0"
+ object-keys "^1.1.1"
+
+defined@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.1.tgz#c0b9db27bfaffd95d6f61399419b893df0f91ebf"
+ integrity sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==
+
+delayed-stream@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+ integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
+
+depd@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df"
+ integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==
+
+depd@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
+ integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==
+
+dequal@^2.0.2, dequal@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be"
+ integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==
+
+destroy@1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015"
+ integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==
+
+detect-newline@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651"
+ integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==
+
+detect-node@^2.0.4:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1"
+ integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==
+
+detect-port-alt@^1.1.6:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/detect-port-alt/-/detect-port-alt-1.1.6.tgz#24707deabe932d4a3cf621302027c2b266568275"
+ integrity sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==
+ dependencies:
+ address "^1.0.1"
+ debug "^2.6.0"
+
+detective@^5.2.1:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/detective/-/detective-5.2.1.tgz#6af01eeda11015acb0e73f933242b70f24f91034"
+ integrity sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==
+ dependencies:
+ acorn-node "^1.8.2"
+ defined "^1.0.0"
+ minimist "^1.2.6"
+
+didyoumean@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037"
+ integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==
+
+diff-sequences@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327"
+ integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==
+
+diff-sequences@^29.3.1:
+ version "29.3.1"
+ resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.3.1.tgz#104b5b95fe725932421a9c6e5b4bef84c3f2249e"
+ integrity sha512-hlM3QR272NXCi4pq+N4Kok4kOp6EsgOM3ZSpJI7Da3UAs+Ttsi8MRmB6trM/lhyzUxGfOgnpkHtgqm5Q/CTcfQ==
+
+dir-glob@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
+ integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==
+ dependencies:
+ path-type "^4.0.0"
+
+dlv@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79"
+ integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==
+
+dns-equal@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d"
+ integrity sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==
+
+dns-packet@^5.2.2:
+ version "5.4.0"
+ resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.4.0.tgz#1f88477cf9f27e78a213fb6d118ae38e759a879b"
+ integrity sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==
+ dependencies:
+ "@leichtgewicht/ip-codec" "^2.0.1"
+
+doctrine@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
+ integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==
+ dependencies:
+ esutils "^2.0.2"
+
+doctrine@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
+ integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
+ dependencies:
+ esutils "^2.0.2"
+
+dom-accessibility-api@^0.5.6, dom-accessibility-api@^0.5.9:
+ version "0.5.15"
+ resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.15.tgz#357e74338704f36fada8b2e01a4bfc11ef436ac9"
+ integrity sha512-8o+oVqLQZoruQPYy3uAAQtc6YbtSiRq5aPJBhJ82YTJRHvI6ofhYAkC81WmjFTnfUbqg6T3aCglIpU9p/5e7Cw==
+
+dom-converter@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768"
+ integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==
+ dependencies:
+ utila "~0.4"
+
+dom-helpers@^5.0.1, dom-helpers@^5.2.0, dom-helpers@^5.2.1:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902"
+ integrity sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==
+ dependencies:
+ "@babel/runtime" "^7.8.7"
+ csstype "^3.0.2"
+
+dom-serializer@0:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51"
+ integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==
+ dependencies:
+ domelementtype "^2.0.1"
+ entities "^2.0.0"
+
+dom-serializer@^1.0.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30"
+ integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==
+ dependencies:
+ domelementtype "^2.0.1"
+ domhandler "^4.2.0"
+ entities "^2.0.0"
+
+domelementtype@1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f"
+ integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==
+
+domelementtype@^2.0.1, domelementtype@^2.2.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d"
+ integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==
+
+domexception@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304"
+ integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==
+ dependencies:
+ webidl-conversions "^5.0.0"
+
+domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c"
+ integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==
+ dependencies:
+ domelementtype "^2.2.0"
+
+domutils@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a"
+ integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==
+ dependencies:
+ dom-serializer "0"
+ domelementtype "1"
+
+domutils@^2.5.2, domutils@^2.8.0:
+ version "2.8.0"
+ resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135"
+ integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==
+ dependencies:
+ dom-serializer "^1.0.1"
+ domelementtype "^2.2.0"
+ domhandler "^4.2.0"
+
+dot-case@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751"
+ integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==
+ dependencies:
+ no-case "^3.0.4"
+ tslib "^2.0.3"
+
+dotenv-expand@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0"
+ integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==
+
+dotenv@^10.0.0:
+ version "10.0.0"
+ resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81"
+ integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==
+
+duplexer@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6"
+ integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==
+
+ee-first@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
+ integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==
+
+ejs@^3.1.6:
+ version "3.1.8"
+ resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.8.tgz#758d32910c78047585c7ef1f92f9ee041c1c190b"
+ integrity sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==
+ dependencies:
+ jake "^10.8.5"
+
+electron-to-chromium@^1.4.251:
+ version "1.4.284"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz#61046d1e4cab3a25238f6bf7413795270f125592"
+ integrity sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==
+
+emittery@^0.10.2:
+ version "0.10.2"
+ resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.10.2.tgz#902eec8aedb8c41938c46e9385e9db7e03182933"
+ integrity sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==
+
+emittery@^0.8.1:
+ version "0.8.1"
+ resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.8.1.tgz#bb23cc86d03b30aa75a7f734819dee2e1ba70860"
+ integrity sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==
+
+emoji-regex@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
+ integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
+
+emoji-regex@^9.2.2:
+ version "9.2.2"
+ resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72"
+ integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==
+
+emojis-list@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78"
+ integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==
+
+encodeurl@~1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
+ integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==
+
+enhanced-resolve@^5.10.0:
+ version "5.12.0"
+ resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz#300e1c90228f5b570c4d35babf263f6da7155634"
+ integrity sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==
+ dependencies:
+ graceful-fs "^4.2.4"
+ tapable "^2.2.0"
+
+entities@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55"
+ integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==
+
+error-ex@^1.3.1:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
+ integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
+ dependencies:
+ is-arrayish "^0.2.1"
+
+error-stack-parser@^2.0.6:
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.1.4.tgz#229cb01cdbfa84440bfa91876285b94680188286"
+ integrity sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==
+ dependencies:
+ stackframe "^1.3.4"
+
+es-abstract@^1.17.2, es-abstract@^1.19.0, es-abstract@^1.20.4:
+ version "1.21.1"
+ resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.21.1.tgz#e6105a099967c08377830a0c9cb589d570dd86c6"
+ integrity sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==
+ dependencies:
+ available-typed-arrays "^1.0.5"
+ call-bind "^1.0.2"
+ es-set-tostringtag "^2.0.1"
+ es-to-primitive "^1.2.1"
+ function-bind "^1.1.1"
+ function.prototype.name "^1.1.5"
+ get-intrinsic "^1.1.3"
+ get-symbol-description "^1.0.0"
+ globalthis "^1.0.3"
+ gopd "^1.0.1"
+ has "^1.0.3"
+ has-property-descriptors "^1.0.0"
+ has-proto "^1.0.1"
+ has-symbols "^1.0.3"
+ internal-slot "^1.0.4"
+ is-array-buffer "^3.0.1"
+ is-callable "^1.2.7"
+ is-negative-zero "^2.0.2"
+ is-regex "^1.1.4"
+ is-shared-array-buffer "^1.0.2"
+ is-string "^1.0.7"
+ is-typed-array "^1.1.10"
+ is-weakref "^1.0.2"
+ object-inspect "^1.12.2"
+ object-keys "^1.1.1"
+ object.assign "^4.1.4"
+ regexp.prototype.flags "^1.4.3"
+ safe-regex-test "^1.0.0"
+ string.prototype.trimend "^1.0.6"
+ string.prototype.trimstart "^1.0.6"
+ typed-array-length "^1.0.4"
+ unbox-primitive "^1.0.2"
+ which-typed-array "^1.1.9"
+
+es-array-method-boxes-properly@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e"
+ integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==
+
+es-get-iterator@^1.1.2:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.3.tgz#3ef87523c5d464d41084b2c3c9c214f1199763d6"
+ integrity sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==
+ dependencies:
+ call-bind "^1.0.2"
+ get-intrinsic "^1.1.3"
+ has-symbols "^1.0.3"
+ is-arguments "^1.1.1"
+ is-map "^2.0.2"
+ is-set "^2.0.2"
+ is-string "^1.0.7"
+ isarray "^2.0.5"
+ stop-iteration-iterator "^1.0.0"
+
+es-module-lexer@^0.9.0:
+ version "0.9.3"
+ resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19"
+ integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==
+
+es-set-tostringtag@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8"
+ integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==
+ dependencies:
+ get-intrinsic "^1.1.3"
+ has "^1.0.3"
+ has-tostringtag "^1.0.0"
+
+es-shim-unscopables@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241"
+ integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==
+ dependencies:
+ has "^1.0.3"
+
+es-to-primitive@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a"
+ integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==
+ dependencies:
+ is-callable "^1.1.4"
+ is-date-object "^1.0.1"
+ is-symbol "^1.0.2"
+
+escalade@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
+ integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
+
+escape-html@~1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
+ integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==
+
+escape-string-regexp@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+ integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==
+
+escape-string-regexp@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344"
+ integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==
+
+escape-string-regexp@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
+ integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
+
+escodegen@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd"
+ integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==
+ dependencies:
+ esprima "^4.0.1"
+ estraverse "^5.2.0"
+ esutils "^2.0.2"
+ optionator "^0.8.1"
+ optionalDependencies:
+ source-map "~0.6.1"
+
+eslint-config-react-app@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-7.0.1.tgz#73ba3929978001c5c86274c017ea57eb5fa644b4"
+ integrity sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==
+ dependencies:
+ "@babel/core" "^7.16.0"
+ "@babel/eslint-parser" "^7.16.3"
+ "@rushstack/eslint-patch" "^1.1.0"
+ "@typescript-eslint/eslint-plugin" "^5.5.0"
+ "@typescript-eslint/parser" "^5.5.0"
+ babel-preset-react-app "^10.0.1"
+ confusing-browser-globals "^1.0.11"
+ eslint-plugin-flowtype "^8.0.3"
+ eslint-plugin-import "^2.25.3"
+ eslint-plugin-jest "^25.3.0"
+ eslint-plugin-jsx-a11y "^6.5.1"
+ eslint-plugin-react "^7.27.1"
+ eslint-plugin-react-hooks "^4.3.0"
+ eslint-plugin-testing-library "^5.0.1"
+
+eslint-import-resolver-node@^0.3.7:
+ version "0.3.7"
+ resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz#83b375187d412324a1963d84fa664377a23eb4d7"
+ integrity sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==
+ dependencies:
+ debug "^3.2.7"
+ is-core-module "^2.11.0"
+ resolve "^1.22.1"
+
+eslint-module-utils@^2.7.4:
+ version "2.7.4"
+ resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz#4f3e41116aaf13a20792261e61d3a2e7e0583974"
+ integrity sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==
+ dependencies:
+ debug "^3.2.7"
+
+eslint-plugin-flowtype@^8.0.3:
+ version "8.0.3"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz#e1557e37118f24734aa3122e7536a038d34a4912"
+ integrity sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==
+ dependencies:
+ lodash "^4.17.21"
+ string-natural-compare "^3.0.1"
+
+eslint-plugin-import@^2.25.3:
+ version "2.27.5"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz#876a6d03f52608a3e5bb439c2550588e51dd6c65"
+ integrity sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==
+ dependencies:
+ array-includes "^3.1.6"
+ array.prototype.flat "^1.3.1"
+ array.prototype.flatmap "^1.3.1"
+ debug "^3.2.7"
+ doctrine "^2.1.0"
+ eslint-import-resolver-node "^0.3.7"
+ eslint-module-utils "^2.7.4"
+ has "^1.0.3"
+ is-core-module "^2.11.0"
+ is-glob "^4.0.3"
+ minimatch "^3.1.2"
+ object.values "^1.1.6"
+ resolve "^1.22.1"
+ semver "^6.3.0"
+ tsconfig-paths "^3.14.1"
+
+eslint-plugin-jest@^25.3.0:
+ version "25.7.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz#ff4ac97520b53a96187bad9c9814e7d00de09a6a"
+ integrity sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==
+ dependencies:
+ "@typescript-eslint/experimental-utils" "^5.0.0"
+
+eslint-plugin-jsx-a11y@^6.5.1:
+ version "6.7.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz#fca5e02d115f48c9a597a6894d5bcec2f7a76976"
+ integrity sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==
+ dependencies:
+ "@babel/runtime" "^7.20.7"
+ aria-query "^5.1.3"
+ array-includes "^3.1.6"
+ array.prototype.flatmap "^1.3.1"
+ ast-types-flow "^0.0.7"
+ axe-core "^4.6.2"
+ axobject-query "^3.1.1"
+ damerau-levenshtein "^1.0.8"
+ emoji-regex "^9.2.2"
+ has "^1.0.3"
+ jsx-ast-utils "^3.3.3"
+ language-tags "=1.0.5"
+ minimatch "^3.1.2"
+ object.entries "^1.1.6"
+ object.fromentries "^2.0.6"
+ semver "^6.3.0"
+
+eslint-plugin-react-hooks@^4.3.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3"
+ integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==
+
+eslint-plugin-react@^7.27.1:
+ version "7.32.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.32.1.tgz#88cdeb4065da8ca0b64e1274404f53a0f9890200"
+ integrity sha512-vOjdgyd0ZHBXNsmvU+785xY8Bfe57EFbTYYk8XrROzWpr9QBvpjITvAXt9xqcE6+8cjR/g1+mfumPToxsl1www==
+ dependencies:
+ array-includes "^3.1.6"
+ array.prototype.flatmap "^1.3.1"
+ array.prototype.tosorted "^1.1.1"
+ doctrine "^2.1.0"
+ estraverse "^5.3.0"
+ jsx-ast-utils "^2.4.1 || ^3.0.0"
+ minimatch "^3.1.2"
+ object.entries "^1.1.6"
+ object.fromentries "^2.0.6"
+ object.hasown "^1.1.2"
+ object.values "^1.1.6"
+ prop-types "^15.8.1"
+ resolve "^2.0.0-next.4"
+ semver "^6.3.0"
+ string.prototype.matchall "^4.0.8"
+
+eslint-plugin-testing-library@^5.0.1:
+ version "5.9.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.9.1.tgz#12e4bd34c48683ee98af4df2e3318ec9f51dcf8a"
+ integrity sha512-6BQp3tmb79jLLasPHJmy8DnxREe+2Pgf7L+7o09TSWPfdqqtQfRZmZNetr5mOs3yqZk/MRNxpN3RUpJe0wB4LQ==
+ dependencies:
+ "@typescript-eslint/utils" "^5.13.0"
+
+eslint-scope@5.1.1, eslint-scope@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c"
+ integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==
+ dependencies:
+ esrecurse "^4.3.0"
+ estraverse "^4.1.1"
+
+eslint-scope@^7.1.1:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642"
+ integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==
+ dependencies:
+ esrecurse "^4.3.0"
+ estraverse "^5.2.0"
+
+eslint-utils@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672"
+ integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==
+ dependencies:
+ eslint-visitor-keys "^2.0.0"
+
+eslint-visitor-keys@^2.0.0, eslint-visitor-keys@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303"
+ integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==
+
+eslint-visitor-keys@^3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826"
+ integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==
+
+eslint-webpack-plugin@^3.1.1:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/eslint-webpack-plugin/-/eslint-webpack-plugin-3.2.0.tgz#1978cdb9edc461e4b0195a20da950cf57988347c"
+ integrity sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==
+ dependencies:
+ "@types/eslint" "^7.29.0 || ^8.4.1"
+ jest-worker "^28.0.2"
+ micromatch "^4.0.5"
+ normalize-path "^3.0.0"
+ schema-utils "^4.0.0"
+
+eslint@^8.3.0:
+ version "8.32.0"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.32.0.tgz#d9690056bb6f1a302bd991e7090f5b68fbaea861"
+ integrity sha512-nETVXpnthqKPFyuY2FNjz/bEd6nbosRgKbkgS/y1C7LJop96gYHWpiguLecMHQ2XCPxn77DS0P+68WzG6vkZSQ==
+ dependencies:
+ "@eslint/eslintrc" "^1.4.1"
+ "@humanwhocodes/config-array" "^0.11.8"
+ "@humanwhocodes/module-importer" "^1.0.1"
+ "@nodelib/fs.walk" "^1.2.8"
+ ajv "^6.10.0"
+ chalk "^4.0.0"
+ cross-spawn "^7.0.2"
+ debug "^4.3.2"
+ doctrine "^3.0.0"
+ escape-string-regexp "^4.0.0"
+ eslint-scope "^7.1.1"
+ eslint-utils "^3.0.0"
+ eslint-visitor-keys "^3.3.0"
+ espree "^9.4.0"
+ esquery "^1.4.0"
+ esutils "^2.0.2"
+ fast-deep-equal "^3.1.3"
+ file-entry-cache "^6.0.1"
+ find-up "^5.0.0"
+ glob-parent "^6.0.2"
+ globals "^13.19.0"
+ grapheme-splitter "^1.0.4"
+ ignore "^5.2.0"
+ import-fresh "^3.0.0"
+ imurmurhash "^0.1.4"
+ is-glob "^4.0.0"
+ is-path-inside "^3.0.3"
+ js-sdsl "^4.1.4"
+ js-yaml "^4.1.0"
+ json-stable-stringify-without-jsonify "^1.0.1"
+ levn "^0.4.1"
+ lodash.merge "^4.6.2"
+ minimatch "^3.1.2"
+ natural-compare "^1.4.0"
+ optionator "^0.9.1"
+ regexpp "^3.2.0"
+ strip-ansi "^6.0.1"
+ strip-json-comments "^3.1.0"
+ text-table "^0.2.0"
+
+espree@^9.4.0:
+ version "9.4.1"
+ resolved "https://registry.yarnpkg.com/espree/-/espree-9.4.1.tgz#51d6092615567a2c2cff7833445e37c28c0065bd"
+ integrity sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==
+ dependencies:
+ acorn "^8.8.0"
+ acorn-jsx "^5.3.2"
+ eslint-visitor-keys "^3.3.0"
+
+esprima@^4.0.0, esprima@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
+ integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
+
+esquery@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5"
+ integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==
+ dependencies:
+ estraverse "^5.1.0"
+
+esrecurse@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"
+ integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
+ dependencies:
+ estraverse "^5.2.0"
+
+estraverse@^4.1.1:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
+ integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
+
+estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123"
+ integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
+
+estree-walker@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700"
+ integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==
+
+esutils@^2.0.2:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
+ integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
+
+etag@~1.8.1:
+ version "1.8.1"
+ resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
+ integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==
+
+eventemitter3@^4.0.0:
+ version "4.0.7"
+ resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f"
+ integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==
+
+events@^3.2.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400"
+ integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==
+
+execa@^5.0.0:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd"
+ integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==
+ 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"
+
+exit@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c"
+ integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==
+
+expect@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/expect/-/expect-27.5.1.tgz#83ce59f1e5bdf5f9d2b94b61d2050db48f3fef74"
+ integrity sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==
+ dependencies:
+ "@jest/types" "^27.5.1"
+ jest-get-type "^27.5.1"
+ jest-matcher-utils "^27.5.1"
+ jest-message-util "^27.5.1"
+
+expect@^29.0.0:
+ version "29.3.1"
+ resolved "https://registry.yarnpkg.com/expect/-/expect-29.3.1.tgz#92877aad3f7deefc2e3f6430dd195b92295554a6"
+ integrity sha512-gGb1yTgU30Q0O/tQq+z30KBWv24ApkMgFUpvKBkyLUBL68Wv8dHdJxTBZFl/iT8K/bqDHvUYRH6IIN3rToopPA==
+ dependencies:
+ "@jest/expect-utils" "^29.3.1"
+ jest-get-type "^29.2.0"
+ jest-matcher-utils "^29.3.1"
+ jest-message-util "^29.3.1"
+ jest-util "^29.3.1"
+
+express@^4.17.3:
+ version "4.18.2"
+ resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59"
+ integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==
+ dependencies:
+ accepts "~1.3.8"
+ array-flatten "1.1.1"
+ body-parser "1.20.1"
+ content-disposition "0.5.4"
+ content-type "~1.0.4"
+ cookie "0.5.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-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
+ integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
+
+fast-glob@^3.2.12, fast-glob@^3.2.9:
+ version "3.2.12"
+ resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80"
+ integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==
+ dependencies:
+ "@nodelib/fs.stat" "^2.0.2"
+ "@nodelib/fs.walk" "^1.2.3"
+ glob-parent "^5.1.2"
+ merge2 "^1.3.0"
+ micromatch "^4.0.4"
+
+fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
+ integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
+
+fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
+ integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==
+
+fastq@^1.6.0:
+ version "1.15.0"
+ resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a"
+ integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==
+ dependencies:
+ reusify "^1.0.4"
+
+faye-websocket@^0.11.3:
+ version "0.11.4"
+ resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da"
+ integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==
+ dependencies:
+ websocket-driver ">=0.5.1"
+
+fb-watchman@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c"
+ integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==
+ dependencies:
+ bser "2.1.1"
+
+file-entry-cache@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027"
+ integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==
+ dependencies:
+ flat-cache "^3.0.4"
+
+file-loader@^6.2.0:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.2.0.tgz#baef7cf8e1840df325e4390b4484879480eebe4d"
+ integrity sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==
+ dependencies:
+ loader-utils "^2.0.0"
+ schema-utils "^3.0.0"
+
+filelist@^1.0.1:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5"
+ integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==
+ dependencies:
+ minimatch "^5.0.1"
+
+filesize@^8.0.6:
+ version "8.0.7"
+ resolved "https://registry.yarnpkg.com/filesize/-/filesize-8.0.7.tgz#695e70d80f4e47012c132d57a059e80c6b580bd8"
+ integrity sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==
+
+fill-range@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
+ integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
+ dependencies:
+ to-regex-range "^5.0.1"
+
+finalhandler@1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32"
+ 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"
+
+find-cache-dir@^3.3.1:
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b"
+ integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==
+ dependencies:
+ commondir "^1.0.1"
+ make-dir "^3.0.2"
+ pkg-dir "^4.1.0"
+
+find-up@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
+ integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==
+ dependencies:
+ locate-path "^3.0.0"
+
+find-up@^4.0.0, find-up@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
+ integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
+ dependencies:
+ locate-path "^5.0.0"
+ path-exists "^4.0.0"
+
+find-up@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc"
+ integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==
+ dependencies:
+ locate-path "^6.0.0"
+ path-exists "^4.0.0"
+
+flat-cache@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11"
+ integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==
+ dependencies:
+ flatted "^3.1.0"
+ rimraf "^3.0.2"
+
+flatted@^3.1.0:
+ version "3.2.7"
+ resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787"
+ integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==
+
+follow-redirects@^1.0.0, follow-redirects@^1.15.0:
+ version "1.15.2"
+ resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13"
+ integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==
+
+for-each@^0.3.3:
+ version "0.3.3"
+ resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e"
+ integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==
+ dependencies:
+ is-callable "^1.1.3"
+
+fork-ts-checker-webpack-plugin@^6.5.0:
+ version "6.5.2"
+ resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz#4f67183f2f9eb8ba7df7177ce3cf3e75cdafb340"
+ integrity sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA==
+ dependencies:
+ "@babel/code-frame" "^7.8.3"
+ "@types/json-schema" "^7.0.5"
+ chalk "^4.1.0"
+ chokidar "^3.4.2"
+ cosmiconfig "^6.0.0"
+ deepmerge "^4.2.2"
+ fs-extra "^9.0.0"
+ glob "^7.1.6"
+ memfs "^3.1.2"
+ minimatch "^3.0.4"
+ schema-utils "2.7.0"
+ semver "^7.3.2"
+ tapable "^1.0.0"
+
+form-data@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f"
+ integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.8"
+ mime-types "^2.1.12"
+
+form-data@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452"
+ integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.8"
+ mime-types "^2.1.12"
+
+formik@2.2.9:
+ version "2.2.9"
+ resolved "https://registry.yarnpkg.com/formik/-/formik-2.2.9.tgz#8594ba9c5e2e5cf1f42c5704128e119fc46232d0"
+ integrity sha512-LQLcISMmf1r5at4/gyJigGn0gOwFbeEAlji+N9InZF6LIMXnFNkO42sCI8Jt84YZggpD4cPWObAZaxpEFtSzNA==
+ dependencies:
+ deepmerge "^2.1.1"
+ hoist-non-react-statics "^3.3.0"
+ lodash "^4.17.21"
+ lodash-es "^4.17.21"
+ react-fast-compare "^2.0.1"
+ tiny-warning "^1.0.2"
+ tslib "^1.10.0"
+
+forwarded@0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811"
+ integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==
+
+fraction.js@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.2.0.tgz#448e5109a313a3527f5a3ab2119ec4cf0e0e2950"
+ integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==
+
+fresh@0.5.2:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
+ integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==
+
+fs-extra@^10.0.0:
+ version "10.1.0"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf"
+ integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==
+ dependencies:
+ graceful-fs "^4.2.0"
+ jsonfile "^6.0.1"
+ universalify "^2.0.0"
+
+fs-extra@^9.0.0, fs-extra@^9.0.1:
+ version "9.1.0"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d"
+ integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==
+ dependencies:
+ at-least-node "^1.0.0"
+ graceful-fs "^4.2.0"
+ jsonfile "^6.0.1"
+ universalify "^2.0.0"
+
+fs-monkey@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.3.tgz#ae3ac92d53bb328efe0e9a1d9541f6ad8d48e2d3"
+ integrity sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==
+
+fs.realpath@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+ integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
+
+fsevents@^2.3.2, fsevents@~2.3.2:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
+ integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
+
+function-bind@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
+ integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
+
+function.prototype.name@^1.1.5:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621"
+ integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.3"
+ es-abstract "^1.19.0"
+ functions-have-names "^1.2.2"
+
+functions-have-names@^1.2.2:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834"
+ integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==
+
+gensync@^1.0.0-beta.2:
+ version "1.0.0-beta.2"
+ resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
+ integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==
+
+get-caller-file@^2.0.5:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
+ integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
+
+get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385"
+ integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==
+ dependencies:
+ function-bind "^1.1.1"
+ has "^1.0.3"
+ has-symbols "^1.0.3"
+
+get-own-enumerable-property-symbols@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664"
+ integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==
+
+get-package-type@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a"
+ integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==
+
+get-stream@^6.0.0:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7"
+ integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==
+
+get-symbol-description@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6"
+ integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==
+ dependencies:
+ call-bind "^1.0.2"
+ get-intrinsic "^1.1.1"
+
+glob-parent@^5.1.2, glob-parent@~5.1.2:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
+ integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
+ dependencies:
+ is-glob "^4.0.1"
+
+glob-parent@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3"
+ integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==
+ dependencies:
+ is-glob "^4.0.3"
+
+glob-to-regexp@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e"
+ integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==
+
+glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6:
+ version "7.2.3"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
+ integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
+ 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"
+
+global-modules@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780"
+ integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==
+ dependencies:
+ global-prefix "^3.0.0"
+
+global-prefix@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97"
+ integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==
+ dependencies:
+ ini "^1.3.5"
+ kind-of "^6.0.2"
+ which "^1.3.1"
+
+globals@^11.1.0:
+ version "11.12.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
+ integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
+
+globals@^13.19.0:
+ version "13.19.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-13.19.0.tgz#7a42de8e6ad4f7242fbcca27ea5b23aca367b5c8"
+ integrity sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==
+ dependencies:
+ type-fest "^0.20.2"
+
+globalthis@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf"
+ integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==
+ dependencies:
+ define-properties "^1.1.3"
+
+globby@^11.0.4, globby@^11.1.0:
+ version "11.1.0"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b"
+ integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==
+ dependencies:
+ array-union "^2.1.0"
+ dir-glob "^3.0.1"
+ fast-glob "^3.2.9"
+ ignore "^5.2.0"
+ merge2 "^1.4.1"
+ slash "^3.0.0"
+
+gopd@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c"
+ integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==
+ dependencies:
+ get-intrinsic "^1.1.3"
+
+graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9:
+ version "4.2.10"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c"
+ integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==
+
+grapheme-splitter@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e"
+ integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==
+
+gzip-size@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462"
+ integrity sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==
+ dependencies:
+ duplexer "^0.1.2"
+
+handle-thing@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e"
+ integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==
+
+harmony-reflect@^1.4.6:
+ version "1.6.2"
+ resolved "https://registry.yarnpkg.com/harmony-reflect/-/harmony-reflect-1.6.2.tgz#31ecbd32e648a34d030d86adb67d4d47547fe710"
+ integrity sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==
+
+has-bigints@^1.0.1, has-bigints@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa"
+ integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==
+
+has-flag@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
+ integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==
+
+has-flag@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
+ integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
+
+has-property-descriptors@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861"
+ integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==
+ dependencies:
+ get-intrinsic "^1.1.1"
+
+has-proto@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0"
+ integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==
+
+has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8"
+ integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
+
+has-tostringtag@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25"
+ integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==
+ dependencies:
+ has-symbols "^1.0.2"
+
+has@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
+ integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
+ dependencies:
+ function-bind "^1.1.1"
+
+he@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
+ integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
+
+hoist-non-react-statics@^3.3.0:
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45"
+ integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==
+ dependencies:
+ react-is "^16.7.0"
+
+hoopy@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/hoopy/-/hoopy-0.1.4.tgz#609207d661100033a9a9402ad3dea677381c1b1d"
+ integrity sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==
+
+hpack.js@^2.1.6:
+ version "2.1.6"
+ resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2"
+ integrity sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==
+ dependencies:
+ inherits "^2.0.1"
+ obuf "^1.0.0"
+ readable-stream "^2.0.1"
+ wbuf "^1.1.0"
+
+html-encoding-sniffer@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3"
+ integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==
+ dependencies:
+ whatwg-encoding "^1.0.5"
+
+html-entities@^2.1.0, html-entities@^2.3.2:
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.3.tgz#117d7626bece327fc8baace8868fa6f5ef856e46"
+ integrity sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==
+
+html-escaper@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453"
+ integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==
+
+html-minifier-terser@^6.0.2:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#bfc818934cc07918f6b3669f5774ecdfd48f32ab"
+ integrity sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==
+ dependencies:
+ camel-case "^4.1.2"
+ clean-css "^5.2.2"
+ commander "^8.3.0"
+ he "^1.2.0"
+ param-case "^3.0.4"
+ relateurl "^0.2.7"
+ terser "^5.10.0"
+
+html-webpack-plugin@^5.5.0:
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz#c3911936f57681c1f9f4d8b68c158cd9dfe52f50"
+ integrity sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==
+ dependencies:
+ "@types/html-minifier-terser" "^6.0.0"
+ html-minifier-terser "^6.0.2"
+ lodash "^4.17.21"
+ pretty-error "^4.0.0"
+ tapable "^2.0.0"
+
+htmlparser2@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7"
+ integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==
+ dependencies:
+ domelementtype "^2.0.1"
+ domhandler "^4.0.0"
+ domutils "^2.5.2"
+ entities "^2.0.0"
+
+http-deceiver@^1.2.7:
+ version "1.2.7"
+ resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87"
+ integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==
+
+http-errors@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3"
+ 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"
+
+http-errors@~1.6.2:
+ version "1.6.3"
+ resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d"
+ integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==
+ dependencies:
+ depd "~1.1.2"
+ inherits "2.0.3"
+ setprototypeof "1.1.0"
+ statuses ">= 1.4.0 < 2"
+
+http-parser-js@>=0.5.1:
+ version "0.5.8"
+ resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.8.tgz#af23090d9ac4e24573de6f6aecc9d84a48bf20e3"
+ integrity sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==
+
+http-proxy-agent@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a"
+ integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==
+ dependencies:
+ "@tootallnate/once" "1"
+ agent-base "6"
+ debug "4"
+
+http-proxy-middleware@^2.0.3:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz#e1a4dd6979572c7ab5a4e4b55095d1f32a74963f"
+ integrity sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==
+ dependencies:
+ "@types/http-proxy" "^1.17.8"
+ http-proxy "^1.18.1"
+ is-glob "^4.0.1"
+ is-plain-obj "^3.0.0"
+ micromatch "^4.0.2"
+
+http-proxy@^1.18.1:
+ version "1.18.1"
+ resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549"
+ integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==
+ dependencies:
+ eventemitter3 "^4.0.0"
+ follow-redirects "^1.0.0"
+ requires-port "^1.0.0"
+
+https-proxy-agent@^5.0.0:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6"
+ integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==
+ dependencies:
+ agent-base "6"
+ debug "4"
+
+human-signals@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0"
+ integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==
+
+iconv-lite@0.4.24:
+ version "0.4.24"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
+ integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
+ dependencies:
+ safer-buffer ">= 2.1.2 < 3"
+
+iconv-lite@^0.6.3:
+ version "0.6.3"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501"
+ integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
+ dependencies:
+ safer-buffer ">= 2.1.2 < 3.0.0"
+
+icss-utils@^5.0.0, icss-utils@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae"
+ integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==
+
+idb@^7.0.1:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/idb/-/idb-7.1.1.tgz#d910ded866d32c7ced9befc5bfdf36f572ced72b"
+ integrity sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==
+
+identity-obj-proxy@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz#94d2bda96084453ef36fbc5aaec37e0f79f1fc14"
+ integrity sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==
+ dependencies:
+ harmony-reflect "^1.4.6"
+
+ignore@^5.2.0:
+ version "5.2.4"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324"
+ integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==
+
+immer@^9.0.7:
+ version "9.0.18"
+ resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.18.tgz#d2faee58fd0e34f017f329b98cdab37826fa31b8"
+ integrity sha512-eAPNpsj7Ax1q6Y/3lm2PmlwRcFzpON7HSNQ3ru5WQH1/PSpnyed/HpNOELl2CxLKoj4r+bAHgdyKqW5gc2Se1A==
+
+import-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
+ integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
+ dependencies:
+ parent-module "^1.0.0"
+ resolve-from "^4.0.0"
+
+import-local@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4"
+ integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==
+ dependencies:
+ pkg-dir "^4.2.0"
+ resolve-cwd "^3.0.0"
+
+imurmurhash@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
+ integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==
+
+indent-string@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251"
+ integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==
+
+inflight@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+ integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==
+ dependencies:
+ once "^1.3.0"
+ wrappy "1"
+
+inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
+ integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
+
+inherits@2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
+ integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==
+
+ini@^1.3.5:
+ version "1.3.8"
+ resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
+ integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
+
+internal-slot@^1.0.3, internal-slot@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.4.tgz#8551e7baf74a7a6ba5f749cfb16aa60722f0d6f3"
+ integrity sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==
+ dependencies:
+ get-intrinsic "^1.1.3"
+ has "^1.0.3"
+ side-channel "^1.0.4"
+
+invariant@^2.2.4:
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
+ integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==
+ dependencies:
+ loose-envify "^1.0.0"
+
+ipaddr.js@1.9.1:
+ version "1.9.1"
+ resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3"
+ integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==
+
+ipaddr.js@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.0.1.tgz#eca256a7a877e917aeb368b0a7497ddf42ef81c0"
+ integrity sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==
+
+is-arguments@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b"
+ integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==
+ dependencies:
+ call-bind "^1.0.2"
+ has-tostringtag "^1.0.0"
+
+is-array-buffer@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.1.tgz#deb1db4fcae48308d54ef2442706c0393997052a"
+ integrity sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==
+ dependencies:
+ call-bind "^1.0.2"
+ get-intrinsic "^1.1.3"
+ is-typed-array "^1.1.10"
+
+is-arrayish@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
+ integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==
+
+is-bigint@^1.0.1:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3"
+ integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==
+ dependencies:
+ has-bigints "^1.0.1"
+
+is-binary-path@~2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
+ integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
+ dependencies:
+ binary-extensions "^2.0.0"
+
+is-boolean-object@^1.1.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719"
+ integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==
+ dependencies:
+ call-bind "^1.0.2"
+ has-tostringtag "^1.0.0"
+
+is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7:
+ version "1.2.7"
+ resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055"
+ integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==
+
+is-core-module@^2.11.0, is-core-module@^2.9.0:
+ version "2.11.0"
+ resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144"
+ integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==
+ dependencies:
+ has "^1.0.3"
+
+is-date-object@^1.0.1, is-date-object@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f"
+ integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==
+ dependencies:
+ has-tostringtag "^1.0.0"
+
+is-docker@^2.0.0, is-docker@^2.1.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa"
+ integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==
+
+is-extglob@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
+ integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
+
+is-fullwidth-code-point@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
+ integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
+
+is-generator-fn@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118"
+ integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==
+
+is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
+ integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
+ dependencies:
+ is-extglob "^2.1.1"
+
+is-map@^2.0.1, is-map@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127"
+ integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==
+
+is-module@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591"
+ integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==
+
+is-negative-zero@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150"
+ integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==
+
+is-number-object@^1.0.4:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc"
+ integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==
+ dependencies:
+ has-tostringtag "^1.0.0"
+
+is-number@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
+ integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
+
+is-obj@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
+ integrity sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==
+
+is-path-inside@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283"
+ integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==
+
+is-plain-obj@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7"
+ integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==
+
+is-potential-custom-element-name@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5"
+ integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==
+
+is-regex@^1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958"
+ integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==
+ dependencies:
+ call-bind "^1.0.2"
+ has-tostringtag "^1.0.0"
+
+is-regexp@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069"
+ integrity sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==
+
+is-root@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c"
+ integrity sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==
+
+is-set@^2.0.1, is-set@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec"
+ integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==
+
+is-shared-array-buffer@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79"
+ integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==
+ dependencies:
+ call-bind "^1.0.2"
+
+is-stream@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077"
+ integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==
+
+is-string@^1.0.5, is-string@^1.0.7:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd"
+ integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==
+ dependencies:
+ has-tostringtag "^1.0.0"
+
+is-symbol@^1.0.2, is-symbol@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c"
+ integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==
+ dependencies:
+ has-symbols "^1.0.2"
+
+is-typed-array@^1.1.10, is-typed-array@^1.1.9:
+ version "1.1.10"
+ resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f"
+ integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==
+ dependencies:
+ available-typed-arrays "^1.0.5"
+ call-bind "^1.0.2"
+ for-each "^0.3.3"
+ gopd "^1.0.1"
+ has-tostringtag "^1.0.0"
+
+is-typedarray@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
+ integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==
+
+is-weakmap@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2"
+ integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==
+
+is-weakref@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2"
+ integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==
+ dependencies:
+ call-bind "^1.0.2"
+
+is-weakset@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.2.tgz#4569d67a747a1ce5a994dfd4ef6dcea76e7c0a1d"
+ integrity sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==
+ dependencies:
+ call-bind "^1.0.2"
+ get-intrinsic "^1.1.1"
+
+is-wsl@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271"
+ integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==
+ dependencies:
+ is-docker "^2.0.0"
+
+isarray@^2.0.5:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723"
+ integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==
+
+isarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+ integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==
+
+isexe@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
+ integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
+
+istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3"
+ integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==
+
+istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d"
+ integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==
+ 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"
+
+istanbul-lib-report@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6"
+ integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==
+ dependencies:
+ istanbul-lib-coverage "^3.0.0"
+ make-dir "^3.0.0"
+ supports-color "^7.1.0"
+
+istanbul-lib-source-maps@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551"
+ integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==
+ dependencies:
+ debug "^4.1.1"
+ istanbul-lib-coverage "^3.0.0"
+ source-map "^0.6.1"
+
+istanbul-reports@^3.1.3:
+ version "3.1.5"
+ resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.5.tgz#cc9a6ab25cb25659810e4785ed9d9fb742578bae"
+ integrity sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==
+ dependencies:
+ html-escaper "^2.0.0"
+ istanbul-lib-report "^3.0.0"
+
+jake@^10.8.5:
+ version "10.8.5"
+ resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.5.tgz#f2183d2c59382cb274226034543b9c03b8164c46"
+ integrity sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==
+ dependencies:
+ async "^3.2.3"
+ chalk "^4.0.2"
+ filelist "^1.0.1"
+ minimatch "^3.0.4"
+
+jest-changed-files@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.5.1.tgz#a348aed00ec9bf671cc58a66fcbe7c3dfd6a68f5"
+ integrity sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==
+ dependencies:
+ "@jest/types" "^27.5.1"
+ execa "^5.0.0"
+ throat "^6.0.1"
+
+jest-circus@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.5.1.tgz#37a5a4459b7bf4406e53d637b49d22c65d125ecc"
+ integrity sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==
+ dependencies:
+ "@jest/environment" "^27.5.1"
+ "@jest/test-result" "^27.5.1"
+ "@jest/types" "^27.5.1"
+ "@types/node" "*"
+ chalk "^4.0.0"
+ co "^4.6.0"
+ dedent "^0.7.0"
+ expect "^27.5.1"
+ is-generator-fn "^2.0.0"
+ jest-each "^27.5.1"
+ jest-matcher-utils "^27.5.1"
+ jest-message-util "^27.5.1"
+ jest-runtime "^27.5.1"
+ jest-snapshot "^27.5.1"
+ jest-util "^27.5.1"
+ pretty-format "^27.5.1"
+ slash "^3.0.0"
+ stack-utils "^2.0.3"
+ throat "^6.0.1"
+
+jest-cli@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.5.1.tgz#278794a6e6458ea8029547e6c6cbf673bd30b145"
+ integrity sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==
+ dependencies:
+ "@jest/core" "^27.5.1"
+ "@jest/test-result" "^27.5.1"
+ "@jest/types" "^27.5.1"
+ chalk "^4.0.0"
+ exit "^0.1.2"
+ graceful-fs "^4.2.9"
+ import-local "^3.0.2"
+ jest-config "^27.5.1"
+ jest-util "^27.5.1"
+ jest-validate "^27.5.1"
+ prompts "^2.0.1"
+ yargs "^16.2.0"
+
+jest-config@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.5.1.tgz#5c387de33dca3f99ad6357ddeccd91bf3a0e4a41"
+ integrity sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==
+ dependencies:
+ "@babel/core" "^7.8.0"
+ "@jest/test-sequencer" "^27.5.1"
+ "@jest/types" "^27.5.1"
+ babel-jest "^27.5.1"
+ chalk "^4.0.0"
+ ci-info "^3.2.0"
+ deepmerge "^4.2.2"
+ glob "^7.1.1"
+ graceful-fs "^4.2.9"
+ jest-circus "^27.5.1"
+ jest-environment-jsdom "^27.5.1"
+ jest-environment-node "^27.5.1"
+ jest-get-type "^27.5.1"
+ jest-jasmine2 "^27.5.1"
+ jest-regex-util "^27.5.1"
+ jest-resolve "^27.5.1"
+ jest-runner "^27.5.1"
+ jest-util "^27.5.1"
+ jest-validate "^27.5.1"
+ micromatch "^4.0.4"
+ parse-json "^5.2.0"
+ pretty-format "^27.5.1"
+ slash "^3.0.0"
+ strip-json-comments "^3.1.1"
+
+jest-diff@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.5.1.tgz#a07f5011ac9e6643cf8a95a462b7b1ecf6680def"
+ integrity sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==
+ dependencies:
+ chalk "^4.0.0"
+ diff-sequences "^27.5.1"
+ jest-get-type "^27.5.1"
+ pretty-format "^27.5.1"
+
+jest-diff@^29.3.1:
+ version "29.3.1"
+ resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.3.1.tgz#d8215b72fed8f1e647aed2cae6c752a89e757527"
+ integrity sha512-vU8vyiO7568tmin2lA3r2DP8oRvzhvRcD4DjpXc6uGveQodyk7CKLhQlCSiwgx3g0pFaE88/KLZ0yaTWMc4Uiw==
+ dependencies:
+ chalk "^4.0.0"
+ diff-sequences "^29.3.1"
+ jest-get-type "^29.2.0"
+ pretty-format "^29.3.1"
+
+jest-docblock@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-27.5.1.tgz#14092f364a42c6108d42c33c8cf30e058e25f6c0"
+ integrity sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==
+ dependencies:
+ detect-newline "^3.0.0"
+
+jest-each@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.5.1.tgz#5bc87016f45ed9507fed6e4702a5b468a5b2c44e"
+ integrity sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==
+ dependencies:
+ "@jest/types" "^27.5.1"
+ chalk "^4.0.0"
+ jest-get-type "^27.5.1"
+ jest-util "^27.5.1"
+ pretty-format "^27.5.1"
+
+jest-environment-jsdom@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz#ea9ccd1fc610209655a77898f86b2b559516a546"
+ integrity sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==
+ dependencies:
+ "@jest/environment" "^27.5.1"
+ "@jest/fake-timers" "^27.5.1"
+ "@jest/types" "^27.5.1"
+ "@types/node" "*"
+ jest-mock "^27.5.1"
+ jest-util "^27.5.1"
+ jsdom "^16.6.0"
+
+jest-environment-node@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.5.1.tgz#dedc2cfe52fab6b8f5714b4808aefa85357a365e"
+ integrity sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==
+ dependencies:
+ "@jest/environment" "^27.5.1"
+ "@jest/fake-timers" "^27.5.1"
+ "@jest/types" "^27.5.1"
+ "@types/node" "*"
+ jest-mock "^27.5.1"
+ jest-util "^27.5.1"
+
+jest-get-type@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.5.1.tgz#3cd613c507b0f7ace013df407a1c1cd578bcb4f1"
+ integrity sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==
+
+jest-get-type@^29.2.0:
+ version "29.2.0"
+ resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.2.0.tgz#726646f927ef61d583a3b3adb1ab13f3a5036408"
+ integrity sha512-uXNJlg8hKFEnDgFsrCjznB+sTxdkuqiCL6zMgA75qEbAJjJYTs9XPrvDctrEig2GDow22T/LvHgO57iJhXB/UA==
+
+jest-haste-map@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.5.1.tgz#9fd8bd7e7b4fa502d9c6164c5640512b4e811e7f"
+ integrity sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==
+ dependencies:
+ "@jest/types" "^27.5.1"
+ "@types/graceful-fs" "^4.1.2"
+ "@types/node" "*"
+ anymatch "^3.0.3"
+ fb-watchman "^2.0.0"
+ graceful-fs "^4.2.9"
+ jest-regex-util "^27.5.1"
+ jest-serializer "^27.5.1"
+ jest-util "^27.5.1"
+ jest-worker "^27.5.1"
+ micromatch "^4.0.4"
+ walker "^1.0.7"
+ optionalDependencies:
+ fsevents "^2.3.2"
+
+jest-jasmine2@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz#a037b0034ef49a9f3d71c4375a796f3b230d1ac4"
+ integrity sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==
+ dependencies:
+ "@jest/environment" "^27.5.1"
+ "@jest/source-map" "^27.5.1"
+ "@jest/test-result" "^27.5.1"
+ "@jest/types" "^27.5.1"
+ "@types/node" "*"
+ chalk "^4.0.0"
+ co "^4.6.0"
+ expect "^27.5.1"
+ is-generator-fn "^2.0.0"
+ jest-each "^27.5.1"
+ jest-matcher-utils "^27.5.1"
+ jest-message-util "^27.5.1"
+ jest-runtime "^27.5.1"
+ jest-snapshot "^27.5.1"
+ jest-util "^27.5.1"
+ pretty-format "^27.5.1"
+ throat "^6.0.1"
+
+jest-leak-detector@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz#6ec9d54c3579dd6e3e66d70e3498adf80fde3fb8"
+ integrity sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==
+ dependencies:
+ jest-get-type "^27.5.1"
+ pretty-format "^27.5.1"
+
+jest-matcher-utils@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz#9c0cdbda8245bc22d2331729d1091308b40cf8ab"
+ integrity sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==
+ dependencies:
+ chalk "^4.0.0"
+ jest-diff "^27.5.1"
+ jest-get-type "^27.5.1"
+ pretty-format "^27.5.1"
+
+jest-matcher-utils@^29.3.1:
+ version "29.3.1"
+ resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.3.1.tgz#6e7f53512f80e817dfa148672bd2d5d04914a572"
+ integrity sha512-fkRMZUAScup3txIKfMe3AIZZmPEjWEdsPJFK3AIy5qRohWqQFg1qrmKfYXR9qEkNc7OdAu2N4KPHibEmy4HPeQ==
+ dependencies:
+ chalk "^4.0.0"
+ jest-diff "^29.3.1"
+ jest-get-type "^29.2.0"
+ pretty-format "^29.3.1"
+
+jest-message-util@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.5.1.tgz#bdda72806da10d9ed6425e12afff38cd1458b6cf"
+ integrity sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==
+ dependencies:
+ "@babel/code-frame" "^7.12.13"
+ "@jest/types" "^27.5.1"
+ "@types/stack-utils" "^2.0.0"
+ chalk "^4.0.0"
+ graceful-fs "^4.2.9"
+ micromatch "^4.0.4"
+ pretty-format "^27.5.1"
+ slash "^3.0.0"
+ stack-utils "^2.0.3"
+
+jest-message-util@^28.1.3:
+ version "28.1.3"
+ resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-28.1.3.tgz#232def7f2e333f1eecc90649b5b94b0055e7c43d"
+ integrity sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==
+ dependencies:
+ "@babel/code-frame" "^7.12.13"
+ "@jest/types" "^28.1.3"
+ "@types/stack-utils" "^2.0.0"
+ chalk "^4.0.0"
+ graceful-fs "^4.2.9"
+ micromatch "^4.0.4"
+ pretty-format "^28.1.3"
+ slash "^3.0.0"
+ stack-utils "^2.0.3"
+
+jest-message-util@^29.3.1:
+ version "29.3.1"
+ resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.3.1.tgz#37bc5c468dfe5120712053dd03faf0f053bd6adb"
+ integrity sha512-lMJTbgNcDm5z+6KDxWtqOFWlGQxD6XaYwBqHR8kmpkP+WWWG90I35kdtQHY67Ay5CSuydkTBbJG+tH9JShFCyA==
+ dependencies:
+ "@babel/code-frame" "^7.12.13"
+ "@jest/types" "^29.3.1"
+ "@types/stack-utils" "^2.0.0"
+ chalk "^4.0.0"
+ graceful-fs "^4.2.9"
+ micromatch "^4.0.4"
+ pretty-format "^29.3.1"
+ slash "^3.0.0"
+ stack-utils "^2.0.3"
+
+jest-mock@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.5.1.tgz#19948336d49ef4d9c52021d34ac7b5f36ff967d6"
+ integrity sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==
+ dependencies:
+ "@jest/types" "^27.5.1"
+ "@types/node" "*"
+
+jest-pnp-resolver@^1.2.2:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e"
+ integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==
+
+jest-regex-util@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.5.1.tgz#4da143f7e9fd1e542d4aa69617b38e4a78365b95"
+ integrity sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==
+
+jest-regex-util@^28.0.0:
+ version "28.0.2"
+ resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-28.0.2.tgz#afdc377a3b25fb6e80825adcf76c854e5bf47ead"
+ integrity sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==
+
+jest-resolve-dependencies@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz#d811ecc8305e731cc86dd79741ee98fed06f1da8"
+ integrity sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==
+ dependencies:
+ "@jest/types" "^27.5.1"
+ jest-regex-util "^27.5.1"
+ jest-snapshot "^27.5.1"
+
+jest-resolve@^27.4.2, jest-resolve@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.5.1.tgz#a2f1c5a0796ec18fe9eb1536ac3814c23617b384"
+ integrity sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==
+ dependencies:
+ "@jest/types" "^27.5.1"
+ chalk "^4.0.0"
+ graceful-fs "^4.2.9"
+ jest-haste-map "^27.5.1"
+ jest-pnp-resolver "^1.2.2"
+ jest-util "^27.5.1"
+ jest-validate "^27.5.1"
+ resolve "^1.20.0"
+ resolve.exports "^1.1.0"
+ slash "^3.0.0"
+
+jest-runner@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.5.1.tgz#071b27c1fa30d90540805c5645a0ec167c7b62e5"
+ integrity sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==
+ dependencies:
+ "@jest/console" "^27.5.1"
+ "@jest/environment" "^27.5.1"
+ "@jest/test-result" "^27.5.1"
+ "@jest/transform" "^27.5.1"
+ "@jest/types" "^27.5.1"
+ "@types/node" "*"
+ chalk "^4.0.0"
+ emittery "^0.8.1"
+ graceful-fs "^4.2.9"
+ jest-docblock "^27.5.1"
+ jest-environment-jsdom "^27.5.1"
+ jest-environment-node "^27.5.1"
+ jest-haste-map "^27.5.1"
+ jest-leak-detector "^27.5.1"
+ jest-message-util "^27.5.1"
+ jest-resolve "^27.5.1"
+ jest-runtime "^27.5.1"
+ jest-util "^27.5.1"
+ jest-worker "^27.5.1"
+ source-map-support "^0.5.6"
+ throat "^6.0.1"
+
+jest-runtime@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.5.1.tgz#4896003d7a334f7e8e4a53ba93fb9bcd3db0a1af"
+ integrity sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==
+ dependencies:
+ "@jest/environment" "^27.5.1"
+ "@jest/fake-timers" "^27.5.1"
+ "@jest/globals" "^27.5.1"
+ "@jest/source-map" "^27.5.1"
+ "@jest/test-result" "^27.5.1"
+ "@jest/transform" "^27.5.1"
+ "@jest/types" "^27.5.1"
+ chalk "^4.0.0"
+ cjs-module-lexer "^1.0.0"
+ collect-v8-coverage "^1.0.0"
+ execa "^5.0.0"
+ glob "^7.1.3"
+ graceful-fs "^4.2.9"
+ jest-haste-map "^27.5.1"
+ jest-message-util "^27.5.1"
+ jest-mock "^27.5.1"
+ jest-regex-util "^27.5.1"
+ jest-resolve "^27.5.1"
+ jest-snapshot "^27.5.1"
+ jest-util "^27.5.1"
+ slash "^3.0.0"
+ strip-bom "^4.0.0"
+
+jest-serializer@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-27.5.1.tgz#81438410a30ea66fd57ff730835123dea1fb1f64"
+ integrity sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==
+ dependencies:
+ "@types/node" "*"
+ graceful-fs "^4.2.9"
+
+jest-snapshot@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.5.1.tgz#b668d50d23d38054a51b42c4039cab59ae6eb6a1"
+ integrity sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==
+ dependencies:
+ "@babel/core" "^7.7.2"
+ "@babel/generator" "^7.7.2"
+ "@babel/plugin-syntax-typescript" "^7.7.2"
+ "@babel/traverse" "^7.7.2"
+ "@babel/types" "^7.0.0"
+ "@jest/transform" "^27.5.1"
+ "@jest/types" "^27.5.1"
+ "@types/babel__traverse" "^7.0.4"
+ "@types/prettier" "^2.1.5"
+ babel-preset-current-node-syntax "^1.0.0"
+ chalk "^4.0.0"
+ expect "^27.5.1"
+ graceful-fs "^4.2.9"
+ jest-diff "^27.5.1"
+ jest-get-type "^27.5.1"
+ jest-haste-map "^27.5.1"
+ jest-matcher-utils "^27.5.1"
+ jest-message-util "^27.5.1"
+ jest-util "^27.5.1"
+ natural-compare "^1.4.0"
+ pretty-format "^27.5.1"
+ semver "^7.3.2"
+
+jest-util@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.5.1.tgz#3ba9771e8e31a0b85da48fe0b0891fb86c01c2f9"
+ integrity sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==
+ dependencies:
+ "@jest/types" "^27.5.1"
+ "@types/node" "*"
+ chalk "^4.0.0"
+ ci-info "^3.2.0"
+ graceful-fs "^4.2.9"
+ picomatch "^2.2.3"
+
+jest-util@^28.1.3:
+ version "28.1.3"
+ resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-28.1.3.tgz#f4f932aa0074f0679943220ff9cbba7e497028b0"
+ integrity sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==
+ dependencies:
+ "@jest/types" "^28.1.3"
+ "@types/node" "*"
+ chalk "^4.0.0"
+ ci-info "^3.2.0"
+ graceful-fs "^4.2.9"
+ picomatch "^2.2.3"
+
+jest-util@^29.3.1:
+ version "29.3.1"
+ resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.3.1.tgz#1dda51e378bbcb7e3bc9d8ab651445591ed373e1"
+ integrity sha512-7YOVZaiX7RJLv76ZfHt4nbNEzzTRiMW/IiOG7ZOKmTXmoGBxUDefgMAxQubu6WPVqP5zSzAdZG0FfLcC7HOIFQ==
+ dependencies:
+ "@jest/types" "^29.3.1"
+ "@types/node" "*"
+ chalk "^4.0.0"
+ ci-info "^3.2.0"
+ graceful-fs "^4.2.9"
+ picomatch "^2.2.3"
+
+jest-validate@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.5.1.tgz#9197d54dc0bdb52260b8db40b46ae668e04df067"
+ integrity sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==
+ dependencies:
+ "@jest/types" "^27.5.1"
+ camelcase "^6.2.0"
+ chalk "^4.0.0"
+ jest-get-type "^27.5.1"
+ leven "^3.1.0"
+ pretty-format "^27.5.1"
+
+jest-watch-typeahead@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/jest-watch-typeahead/-/jest-watch-typeahead-1.1.0.tgz#b4a6826dfb9c9420da2f7bc900de59dad11266a9"
+ integrity sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw==
+ dependencies:
+ ansi-escapes "^4.3.1"
+ chalk "^4.0.0"
+ jest-regex-util "^28.0.0"
+ jest-watcher "^28.0.0"
+ slash "^4.0.0"
+ string-length "^5.0.1"
+ strip-ansi "^7.0.1"
+
+jest-watcher@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.5.1.tgz#71bd85fb9bde3a2c2ec4dc353437971c43c642a2"
+ integrity sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==
+ dependencies:
+ "@jest/test-result" "^27.5.1"
+ "@jest/types" "^27.5.1"
+ "@types/node" "*"
+ ansi-escapes "^4.2.1"
+ chalk "^4.0.0"
+ jest-util "^27.5.1"
+ string-length "^4.0.1"
+
+jest-watcher@^28.0.0:
+ version "28.1.3"
+ resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-28.1.3.tgz#c6023a59ba2255e3b4c57179fc94164b3e73abd4"
+ integrity sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==
+ dependencies:
+ "@jest/test-result" "^28.1.3"
+ "@jest/types" "^28.1.3"
+ "@types/node" "*"
+ ansi-escapes "^4.2.1"
+ chalk "^4.0.0"
+ emittery "^0.10.2"
+ jest-util "^28.1.3"
+ string-length "^4.0.1"
+
+jest-worker@^26.2.1:
+ version "26.6.2"
+ resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed"
+ integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==
+ dependencies:
+ "@types/node" "*"
+ merge-stream "^2.0.0"
+ supports-color "^7.0.0"
+
+jest-worker@^27.0.2, jest-worker@^27.4.5, jest-worker@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0"
+ integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==
+ dependencies:
+ "@types/node" "*"
+ merge-stream "^2.0.0"
+ supports-color "^8.0.0"
+
+jest-worker@^28.0.2:
+ version "28.1.3"
+ resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-28.1.3.tgz#7e3c4ce3fa23d1bb6accb169e7f396f98ed4bb98"
+ integrity sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==
+ dependencies:
+ "@types/node" "*"
+ merge-stream "^2.0.0"
+ supports-color "^8.0.0"
+
+jest@^27.4.3:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest/-/jest-27.5.1.tgz#dadf33ba70a779be7a6fc33015843b51494f63fc"
+ integrity sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==
+ dependencies:
+ "@jest/core" "^27.5.1"
+ import-local "^3.0.2"
+ jest-cli "^27.5.1"
+
+js-sdsl@^4.1.4:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.2.0.tgz#278e98b7bea589b8baaf048c20aeb19eb7ad09d0"
+ integrity sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==
+
+"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
+ integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
+
+js-yaml@^3.13.1:
+ version "3.14.1"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537"
+ integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==
+ dependencies:
+ argparse "^1.0.7"
+ esprima "^4.0.0"
+
+js-yaml@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
+ integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
+ dependencies:
+ argparse "^2.0.1"
+
+jsdom@^16.6.0:
+ version "16.7.0"
+ resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710"
+ integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==
+ dependencies:
+ abab "^2.0.5"
+ acorn "^8.2.4"
+ acorn-globals "^6.0.0"
+ cssom "^0.4.4"
+ cssstyle "^2.3.0"
+ data-urls "^2.0.0"
+ decimal.js "^10.2.1"
+ domexception "^2.0.1"
+ escodegen "^2.0.0"
+ form-data "^3.0.0"
+ html-encoding-sniffer "^2.0.1"
+ http-proxy-agent "^4.0.1"
+ https-proxy-agent "^5.0.0"
+ is-potential-custom-element-name "^1.0.1"
+ nwsapi "^2.2.0"
+ parse5 "6.0.1"
+ saxes "^5.0.1"
+ symbol-tree "^3.2.4"
+ tough-cookie "^4.0.0"
+ w3c-hr-time "^1.0.2"
+ w3c-xmlserializer "^2.0.0"
+ webidl-conversions "^6.1.0"
+ whatwg-encoding "^1.0.5"
+ whatwg-mimetype "^2.3.0"
+ whatwg-url "^8.5.0"
+ ws "^7.4.6"
+ xml-name-validator "^3.0.0"
+
+jsesc@^2.5.1:
+ version "2.5.2"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
+ integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
+
+jsesc@~0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
+ integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==
+
+json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"
+ integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==
+
+json-schema-traverse@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
+ integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
+
+json-schema-traverse@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2"
+ integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==
+
+json-schema@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5"
+ integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==
+
+json-stable-stringify-without-jsonify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
+ integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==
+
+json5@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593"
+ integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==
+ dependencies:
+ minimist "^1.2.0"
+
+json5@^2.1.2, json5@^2.2.0, json5@^2.2.2:
+ version "2.2.3"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283"
+ integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
+
+jsonfile@^6.0.1:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae"
+ integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==
+ dependencies:
+ universalify "^2.0.0"
+ optionalDependencies:
+ graceful-fs "^4.1.6"
+
+jsonpointer@^5.0.0:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-5.0.1.tgz#2110e0af0900fd37467b5907ecd13a7884a1b559"
+ integrity sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==
+
+"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.3:
+ version "3.3.3"
+ resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz#76b3e6e6cece5c69d49a5792c3d01bd1a0cdc7ea"
+ integrity sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==
+ dependencies:
+ array-includes "^3.1.5"
+ object.assign "^4.1.3"
+
+kind-of@^6.0.2:
+ version "6.0.3"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
+ integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
+
+kleur@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e"
+ integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==
+
+klona@^2.0.4, klona@^2.0.5:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.6.tgz#85bffbf819c03b2f53270412420a4555ef882e22"
+ integrity sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==
+
+language-subtag-registry@~0.3.2:
+ version "0.3.22"
+ resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d"
+ integrity sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==
+
+language-tags@=1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a"
+ integrity sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==
+ dependencies:
+ language-subtag-registry "~0.3.2"
+
+leven@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2"
+ integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==
+
+levn@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade"
+ integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==
+ dependencies:
+ prelude-ls "^1.2.1"
+ type-check "~0.4.0"
+
+levn@~0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
+ integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==
+ dependencies:
+ prelude-ls "~1.1.2"
+ type-check "~0.3.2"
+
+lilconfig@^2.0.3, lilconfig@^2.0.5, lilconfig@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.6.tgz#32a384558bd58af3d4c6e077dd1ad1d397bc69d4"
+ integrity sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==
+
+lines-and-columns@^1.1.6:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632"
+ integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==
+
+loader-runner@^4.2.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1"
+ integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==
+
+loader-utils@^2.0.0, loader-utils@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.4.tgz#8b5cb38b5c34a9a018ee1fc0e6a066d1dfcc528c"
+ integrity sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==
+ dependencies:
+ big.js "^5.2.2"
+ emojis-list "^3.0.0"
+ json5 "^2.1.2"
+
+loader-utils@^3.2.0:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-3.2.1.tgz#4fb104b599daafd82ef3e1a41fb9265f87e1f576"
+ integrity sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==
+
+locate-path@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e"
+ integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==
+ dependencies:
+ p-locate "^3.0.0"
+ path-exists "^3.0.0"
+
+locate-path@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
+ integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==
+ dependencies:
+ p-locate "^4.1.0"
+
+locate-path@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286"
+ integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==
+ dependencies:
+ p-locate "^5.0.0"
+
+lodash-es@^4.17.21:
+ version "4.17.21"
+ resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee"
+ integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==
+
+lodash.debounce@^4.0.8:
+ version "4.0.8"
+ resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
+ integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==
+
+lodash.memoize@^4.1.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
+ integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==
+
+lodash.merge@^4.6.2:
+ version "4.6.2"
+ resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
+ integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
+
+lodash.sortby@^4.7.0:
+ version "4.7.0"
+ resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
+ integrity sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==
+
+lodash.uniq@^4.5.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
+ integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==
+
+lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.7.0:
+ version "4.17.21"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
+ integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
+
+loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
+ integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
+ dependencies:
+ js-tokens "^3.0.0 || ^4.0.0"
+
+lower-case@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28"
+ integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==
+ dependencies:
+ tslib "^2.0.3"
+
+lru-cache@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
+ integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
+ dependencies:
+ yallist "^3.0.2"
+
+lru-cache@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
+ integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
+ dependencies:
+ yallist "^4.0.0"
+
+lz-string@^1.4.4:
+ version "1.4.4"
+ resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.4.4.tgz#c0d8eaf36059f705796e1e344811cf4c498d3a26"
+ integrity sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ==
+
+magic-string@^0.25.0, magic-string@^0.25.7:
+ version "0.25.9"
+ resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c"
+ integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==
+ dependencies:
+ sourcemap-codec "^1.4.8"
+
+make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f"
+ integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==
+ dependencies:
+ semver "^6.0.0"
+
+makeerror@1.0.12:
+ version "1.0.12"
+ resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a"
+ integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==
+ dependencies:
+ tmpl "1.0.5"
+
+mdn-data@2.0.14:
+ version "2.0.14"
+ resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50"
+ integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==
+
+mdn-data@2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b"
+ integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==
+
+media-typer@0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
+ integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==
+
+memfs@^3.1.2, memfs@^3.4.3:
+ version "3.4.13"
+ resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.4.13.tgz#248a8bd239b3c240175cd5ec548de5227fc4f345"
+ integrity sha512-omTM41g3Skpvx5dSYeZIbXKcXoAVc/AoMNwn9TKx++L/gaen/+4TTttmu8ZSch5vfVJ8uJvGbroTsIlslRg6lg==
+ dependencies:
+ fs-monkey "^1.0.3"
+
+merge-descriptors@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
+ integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==
+
+merge-stream@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
+ integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
+
+merge2@^1.3.0, merge2@^1.4.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
+ integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
+
+methods@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
+ integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==
+
+micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5:
+ version "4.0.5"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6"
+ integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==
+ dependencies:
+ braces "^3.0.2"
+ picomatch "^2.3.1"
+
+mime-db@1.52.0, "mime-db@>= 1.43.0 < 2":
+ version "1.52.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
+ integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
+
+mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34:
+ version "2.1.35"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
+ integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
+ dependencies:
+ mime-db "1.52.0"
+
+mime@1.6.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
+ integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
+
+mimic-fn@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
+ integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
+
+min-indent@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869"
+ integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==
+
+mini-css-extract-plugin@^2.4.5:
+ version "2.7.2"
+ resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.2.tgz#e049d3ea7d3e4e773aad585c6cb329ce0c7b72d7"
+ integrity sha512-EdlUizq13o0Pd+uCp+WO/JpkLvHRVGt97RqfeGhXqAcorYo1ypJSpkV+WDT0vY/kmh/p7wRdJNJtuyK540PXDw==
+ dependencies:
+ schema-utils "^4.0.0"
+
+minimalistic-assert@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
+ integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==
+
+minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
+ integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
+ dependencies:
+ brace-expansion "^1.1.7"
+
+minimatch@^5.0.1:
+ version "5.1.6"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96"
+ integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==
+ dependencies:
+ brace-expansion "^2.0.1"
+
+minimist@^1.2.0, minimist@^1.2.6:
+ version "1.2.7"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18"
+ integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==
+
+mkdirp@~0.5.1:
+ version "0.5.6"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6"
+ integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==
+ dependencies:
+ minimist "^1.2.6"
+
+ms@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
+ integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==
+
+ms@2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
+ integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+
+ms@2.1.3, ms@^2.1.1:
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
+ integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
+
+multicast-dns@^7.2.5:
+ version "7.2.5"
+ resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-7.2.5.tgz#77eb46057f4d7adbd16d9290fa7299f6fa64cced"
+ integrity sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==
+ dependencies:
+ dns-packet "^5.2.2"
+ thunky "^1.0.2"
+
+nanoid@^3.3.4:
+ version "3.3.4"
+ resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab"
+ integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==
+
+natural-compare-lite@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4"
+ integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==
+
+natural-compare@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
+ integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==
+
+negotiator@0.6.3:
+ version "0.6.3"
+ resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd"
+ integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==
+
+neo-async@^2.6.2:
+ version "2.6.2"
+ resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
+ integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==
+
+no-case@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d"
+ integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==
+ dependencies:
+ lower-case "^2.0.2"
+ tslib "^2.0.3"
+
+node-forge@^1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3"
+ integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==
+
+node-int64@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
+ integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==
+
+node-releases@^2.0.6:
+ version "2.0.8"
+ resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.8.tgz#0f349cdc8fcfa39a92ac0be9bc48b7706292b9ae"
+ integrity sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A==
+
+normalize-path@^3.0.0, normalize-path@~3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
+ integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
+
+normalize-range@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
+ integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==
+
+normalize-url@^6.0.1:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a"
+ integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==
+
+npm-run-path@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea"
+ integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==
+ dependencies:
+ path-key "^3.0.0"
+
+nth-check@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c"
+ integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==
+ dependencies:
+ boolbase "~1.0.0"
+
+nth-check@^2.0.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d"
+ integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==
+ dependencies:
+ boolbase "^1.0.0"
+
+nwsapi@^2.2.0:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.2.tgz#e5418863e7905df67d51ec95938d67bf801f0bb0"
+ integrity sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==
+
+object-assign@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
+ integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
+
+object-hash@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9"
+ integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==
+
+object-inspect@^1.12.2, object-inspect@^1.9.0:
+ version "1.12.3"
+ resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9"
+ integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==
+
+object-is@^1.1.5:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac"
+ integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.3"
+
+object-keys@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
+ integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
+
+object.assign@^4.1.3, object.assign@^4.1.4:
+ version "4.1.4"
+ resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f"
+ integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.4"
+ has-symbols "^1.0.3"
+ object-keys "^1.1.1"
+
+object.entries@^1.1.6:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.6.tgz#9737d0e5b8291edd340a3e3264bb8a3b00d5fa23"
+ integrity sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.4"
+ es-abstract "^1.20.4"
+
+object.fromentries@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.6.tgz#cdb04da08c539cffa912dcd368b886e0904bfa73"
+ integrity sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.4"
+ es-abstract "^1.20.4"
+
+object.getownpropertydescriptors@^2.1.0:
+ version "2.1.5"
+ resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.5.tgz#db5a9002489b64eef903df81d6623c07e5b4b4d3"
+ integrity sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw==
+ dependencies:
+ array.prototype.reduce "^1.0.5"
+ call-bind "^1.0.2"
+ define-properties "^1.1.4"
+ es-abstract "^1.20.4"
+
+object.hasown@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.2.tgz#f919e21fad4eb38a57bc6345b3afd496515c3f92"
+ integrity sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==
+ dependencies:
+ define-properties "^1.1.4"
+ es-abstract "^1.20.4"
+
+object.values@^1.1.0, object.values@^1.1.6:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d"
+ integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.4"
+ es-abstract "^1.20.4"
+
+obuf@^1.0.0, obuf@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e"
+ integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==
+
+on-finished@2.4.1:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f"
+ integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==
+ dependencies:
+ ee-first "1.1.1"
+
+on-headers@~1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f"
+ integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==
+
+once@^1.3.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+ integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
+ dependencies:
+ wrappy "1"
+
+onetime@^5.1.2:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"
+ integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==
+ dependencies:
+ mimic-fn "^2.1.0"
+
+open@^8.0.9, open@^8.4.0:
+ version "8.4.0"
+ resolved "https://registry.yarnpkg.com/open/-/open-8.4.0.tgz#345321ae18f8138f82565a910fdc6b39e8c244f8"
+ integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==
+ dependencies:
+ define-lazy-prop "^2.0.0"
+ is-docker "^2.1.1"
+ is-wsl "^2.2.0"
+
+optionator@^0.8.1:
+ version "0.8.3"
+ resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495"
+ integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==
+ dependencies:
+ deep-is "~0.1.3"
+ fast-levenshtein "~2.0.6"
+ levn "~0.3.0"
+ prelude-ls "~1.1.2"
+ type-check "~0.3.2"
+ word-wrap "~1.2.3"
+
+optionator@^0.9.1:
+ version "0.9.1"
+ resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499"
+ integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==
+ dependencies:
+ deep-is "^0.1.3"
+ fast-levenshtein "^2.0.6"
+ levn "^0.4.1"
+ prelude-ls "^1.2.1"
+ type-check "^0.4.0"
+ word-wrap "^1.2.3"
+
+p-limit@^2.0.0, p-limit@^2.2.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
+ integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
+ dependencies:
+ p-try "^2.0.0"
+
+p-limit@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"
+ integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
+ dependencies:
+ yocto-queue "^0.1.0"
+
+p-locate@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4"
+ integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==
+ dependencies:
+ p-limit "^2.0.0"
+
+p-locate@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
+ integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==
+ dependencies:
+ p-limit "^2.2.0"
+
+p-locate@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834"
+ integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==
+ dependencies:
+ p-limit "^3.0.2"
+
+p-retry@^4.5.0:
+ version "4.6.2"
+ resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.6.2.tgz#9baae7184057edd4e17231cee04264106e092a16"
+ integrity sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==
+ dependencies:
+ "@types/retry" "0.12.0"
+ retry "^0.13.1"
+
+p-try@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
+ integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
+
+param-case@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5"
+ integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==
+ dependencies:
+ dot-case "^3.0.4"
+ tslib "^2.0.3"
+
+parent-module@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
+ integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
+ dependencies:
+ callsites "^3.0.0"
+
+parse-json@^5.0.0, parse-json@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd"
+ integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==
+ 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"
+
+parse5@6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b"
+ integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==
+
+parseurl@~1.3.2, parseurl@~1.3.3:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
+ integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
+
+pascal-case@^3.1.2:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb"
+ integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==
+ dependencies:
+ no-case "^3.0.4"
+ tslib "^2.0.3"
+
+path-exists@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
+ integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==
+
+path-exists@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
+ integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
+
+path-is-absolute@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+ integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
+
+path-key@^3.0.0, path-key@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
+ integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
+
+path-parse@^1.0.7:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
+ integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
+
+path-to-regexp@0.1.7:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
+ integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==
+
+path-type@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
+ integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
+
+performance-now@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
+ integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==
+
+picocolors@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-0.2.1.tgz#570670f793646851d1ba135996962abad587859f"
+ integrity sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==
+
+picocolors@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
+ integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
+
+picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3, picomatch@^2.3.1:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
+ integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
+
+pify@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
+ integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==
+
+pirates@^4.0.4:
+ version "4.0.5"
+ resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b"
+ integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==
+
+pkg-dir@^4.1.0, pkg-dir@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
+ integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==
+ dependencies:
+ find-up "^4.0.0"
+
+pkg-up@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5"
+ integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==
+ dependencies:
+ find-up "^3.0.0"
+
+postcss-attribute-case-insensitive@^5.0.2:
+ version "5.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz#03d761b24afc04c09e757e92ff53716ae8ea2741"
+ integrity sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==
+ dependencies:
+ postcss-selector-parser "^6.0.10"
+
+postcss-browser-comments@^4:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-browser-comments/-/postcss-browser-comments-4.0.0.tgz#bcfc86134df5807f5d3c0eefa191d42136b5e72a"
+ integrity sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==
+
+postcss-calc@^8.2.3:
+ version "8.2.4"
+ resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-8.2.4.tgz#77b9c29bfcbe8a07ff6693dc87050828889739a5"
+ integrity sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==
+ dependencies:
+ postcss-selector-parser "^6.0.9"
+ postcss-value-parser "^4.2.0"
+
+postcss-clamp@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/postcss-clamp/-/postcss-clamp-4.1.0.tgz#7263e95abadd8c2ba1bd911b0b5a5c9c93e02363"
+ integrity sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==
+ dependencies:
+ postcss-value-parser "^4.2.0"
+
+postcss-color-functional-notation@^4.2.4:
+ version "4.2.4"
+ resolved "https://registry.yarnpkg.com/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.4.tgz#21a909e8d7454d3612d1659e471ce4696f28caec"
+ integrity sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==
+ dependencies:
+ postcss-value-parser "^4.2.0"
+
+postcss-color-hex-alpha@^8.0.4:
+ version "8.0.4"
+ resolved "https://registry.yarnpkg.com/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.4.tgz#c66e2980f2fbc1a63f5b079663340ce8b55f25a5"
+ integrity sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==
+ dependencies:
+ postcss-value-parser "^4.2.0"
+
+postcss-color-rebeccapurple@^7.1.1:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.1.1.tgz#63fdab91d878ebc4dd4b7c02619a0c3d6a56ced0"
+ integrity sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==
+ dependencies:
+ postcss-value-parser "^4.2.0"
+
+postcss-colormin@^5.3.0:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-5.3.0.tgz#3cee9e5ca62b2c27e84fce63affc0cfb5901956a"
+ integrity sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg==
+ dependencies:
+ browserslist "^4.16.6"
+ caniuse-api "^3.0.0"
+ colord "^2.9.1"
+ postcss-value-parser "^4.2.0"
+
+postcss-convert-values@^5.1.3:
+ version "5.1.3"
+ resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz#04998bb9ba6b65aa31035d669a6af342c5f9d393"
+ integrity sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==
+ dependencies:
+ browserslist "^4.21.4"
+ postcss-value-parser "^4.2.0"
+
+postcss-custom-media@^8.0.2:
+ version "8.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz#c8f9637edf45fef761b014c024cee013f80529ea"
+ integrity sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==
+ dependencies:
+ postcss-value-parser "^4.2.0"
+
+postcss-custom-properties@^12.1.10:
+ version "12.1.11"
+ resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-12.1.11.tgz#d14bb9b3989ac4d40aaa0e110b43be67ac7845cf"
+ integrity sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ==
+ dependencies:
+ postcss-value-parser "^4.2.0"
+
+postcss-custom-selectors@^6.0.3:
+ version "6.0.3"
+ resolved "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz#1ab4684d65f30fed175520f82d223db0337239d9"
+ integrity sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==
+ dependencies:
+ postcss-selector-parser "^6.0.4"
+
+postcss-dir-pseudo-class@^6.0.5:
+ version "6.0.5"
+ resolved "https://registry.yarnpkg.com/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.5.tgz#2bf31de5de76added44e0a25ecf60ae9f7c7c26c"
+ integrity sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==
+ dependencies:
+ postcss-selector-parser "^6.0.10"
+
+postcss-discard-comments@^5.1.2:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz#8df5e81d2925af2780075840c1526f0660e53696"
+ integrity sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==
+
+postcss-discard-duplicates@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz#9eb4fe8456706a4eebd6d3b7b777d07bad03e848"
+ integrity sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==
+
+postcss-discard-empty@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz#e57762343ff7f503fe53fca553d18d7f0c369c6c"
+ integrity sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==
+
+postcss-discard-overridden@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz#7e8c5b53325747e9d90131bb88635282fb4a276e"
+ integrity sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==
+
+postcss-double-position-gradients@^3.1.2:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.2.tgz#b96318fdb477be95997e86edd29c6e3557a49b91"
+ integrity sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ==
+ dependencies:
+ "@csstools/postcss-progressive-custom-properties" "^1.1.0"
+ postcss-value-parser "^4.2.0"
+
+postcss-env-function@^4.0.6:
+ version "4.0.6"
+ resolved "https://registry.yarnpkg.com/postcss-env-function/-/postcss-env-function-4.0.6.tgz#7b2d24c812f540ed6eda4c81f6090416722a8e7a"
+ integrity sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==
+ dependencies:
+ postcss-value-parser "^4.2.0"
+
+postcss-flexbugs-fixes@^5.0.2:
+ version "5.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-5.0.2.tgz#2028e145313074fc9abe276cb7ca14e5401eb49d"
+ integrity sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==
+
+postcss-focus-visible@^6.0.4:
+ version "6.0.4"
+ resolved "https://registry.yarnpkg.com/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz#50c9ea9afa0ee657fb75635fabad25e18d76bf9e"
+ integrity sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==
+ dependencies:
+ postcss-selector-parser "^6.0.9"
+
+postcss-focus-within@^5.0.4:
+ version "5.0.4"
+ resolved "https://registry.yarnpkg.com/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz#5b1d2ec603195f3344b716c0b75f61e44e8d2e20"
+ integrity sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==
+ dependencies:
+ postcss-selector-parser "^6.0.9"
+
+postcss-font-variant@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz#efd59b4b7ea8bb06127f2d031bfbb7f24d32fa66"
+ integrity sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==
+
+postcss-gap-properties@^3.0.5:
+ version "3.0.5"
+ resolved "https://registry.yarnpkg.com/postcss-gap-properties/-/postcss-gap-properties-3.0.5.tgz#f7e3cddcf73ee19e94ccf7cb77773f9560aa2fff"
+ integrity sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==
+
+postcss-image-set-function@^4.0.7:
+ version "4.0.7"
+ resolved "https://registry.yarnpkg.com/postcss-image-set-function/-/postcss-image-set-function-4.0.7.tgz#08353bd756f1cbfb3b6e93182c7829879114481f"
+ integrity sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==
+ dependencies:
+ postcss-value-parser "^4.2.0"
+
+postcss-import@^14.1.0:
+ version "14.1.0"
+ resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-14.1.0.tgz#a7333ffe32f0b8795303ee9e40215dac922781f0"
+ integrity sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==
+ dependencies:
+ postcss-value-parser "^4.0.0"
+ read-cache "^1.0.0"
+ resolve "^1.1.7"
+
+postcss-initial@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-initial/-/postcss-initial-4.0.1.tgz#529f735f72c5724a0fb30527df6fb7ac54d7de42"
+ integrity sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==
+
+postcss-js@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-4.0.0.tgz#31db79889531b80dc7bc9b0ad283e418dce0ac00"
+ integrity sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==
+ dependencies:
+ camelcase-css "^2.0.1"
+
+postcss-lab-function@^4.2.1:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/postcss-lab-function/-/postcss-lab-function-4.2.1.tgz#6fe4c015102ff7cd27d1bd5385582f67ebdbdc98"
+ integrity sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==
+ dependencies:
+ "@csstools/postcss-progressive-custom-properties" "^1.1.0"
+ postcss-value-parser "^4.2.0"
+
+postcss-load-config@^3.1.4:
+ version "3.1.4"
+ resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-3.1.4.tgz#1ab2571faf84bb078877e1d07905eabe9ebda855"
+ integrity sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==
+ dependencies:
+ lilconfig "^2.0.5"
+ yaml "^1.10.2"
+
+postcss-loader@^6.2.1:
+ version "6.2.1"
+ resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-6.2.1.tgz#0895f7346b1702103d30fdc66e4d494a93c008ef"
+ integrity sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==
+ dependencies:
+ cosmiconfig "^7.0.0"
+ klona "^2.0.5"
+ semver "^7.3.5"
+
+postcss-logical@^5.0.4:
+ version "5.0.4"
+ resolved "https://registry.yarnpkg.com/postcss-logical/-/postcss-logical-5.0.4.tgz#ec75b1ee54421acc04d5921576b7d8db6b0e6f73"
+ integrity sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==
+
+postcss-media-minmax@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz#7140bddec173e2d6d657edbd8554a55794e2a5b5"
+ integrity sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==
+
+postcss-merge-longhand@^5.1.7:
+ version "5.1.7"
+ resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz#24a1bdf402d9ef0e70f568f39bdc0344d568fb16"
+ integrity sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==
+ dependencies:
+ postcss-value-parser "^4.2.0"
+ stylehacks "^5.1.1"
+
+postcss-merge-rules@^5.1.3:
+ version "5.1.3"
+ resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-5.1.3.tgz#8f97679e67cc8d08677a6519afca41edf2220894"
+ integrity sha512-LbLd7uFC00vpOuMvyZop8+vvhnfRGpp2S+IMQKeuOZZapPRY4SMq5ErjQeHbHsjCUgJkRNrlU+LmxsKIqPKQlA==
+ dependencies:
+ browserslist "^4.21.4"
+ caniuse-api "^3.0.0"
+ cssnano-utils "^3.1.0"
+ postcss-selector-parser "^6.0.5"
+
+postcss-minify-font-values@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz#f1df0014a726083d260d3bd85d7385fb89d1f01b"
+ integrity sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==
+ dependencies:
+ postcss-value-parser "^4.2.0"
+
+postcss-minify-gradients@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz#f1fe1b4f498134a5068240c2f25d46fcd236ba2c"
+ integrity sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==
+ dependencies:
+ colord "^2.9.1"
+ cssnano-utils "^3.1.0"
+ postcss-value-parser "^4.2.0"
+
+postcss-minify-params@^5.1.4:
+ version "5.1.4"
+ resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz#c06a6c787128b3208b38c9364cfc40c8aa5d7352"
+ integrity sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==
+ dependencies:
+ browserslist "^4.21.4"
+ cssnano-utils "^3.1.0"
+ postcss-value-parser "^4.2.0"
+
+postcss-minify-selectors@^5.2.1:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz#d4e7e6b46147b8117ea9325a915a801d5fe656c6"
+ integrity sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==
+ dependencies:
+ postcss-selector-parser "^6.0.5"
+
+postcss-modules-extract-imports@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d"
+ integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==
+
+postcss-modules-local-by-default@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz#ebbb54fae1598eecfdf691a02b3ff3b390a5a51c"
+ integrity sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==
+ dependencies:
+ icss-utils "^5.0.0"
+ postcss-selector-parser "^6.0.2"
+ postcss-value-parser "^4.1.0"
+
+postcss-modules-scope@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06"
+ integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==
+ dependencies:
+ postcss-selector-parser "^6.0.4"
+
+postcss-modules-values@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c"
+ integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==
+ dependencies:
+ icss-utils "^5.0.0"
+
+postcss-nested@6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-6.0.0.tgz#1572f1984736578f360cffc7eb7dca69e30d1735"
+ integrity sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==
+ dependencies:
+ postcss-selector-parser "^6.0.10"
+
+postcss-nesting@^10.2.0:
+ version "10.2.0"
+ resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-10.2.0.tgz#0b12ce0db8edfd2d8ae0aaf86427370b898890be"
+ integrity sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==
+ dependencies:
+ "@csstools/selector-specificity" "^2.0.0"
+ postcss-selector-parser "^6.0.10"
+
+postcss-normalize-charset@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz#9302de0b29094b52c259e9b2cf8dc0879879f0ed"
+ integrity sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==
+
+postcss-normalize-display-values@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz#72abbae58081960e9edd7200fcf21ab8325c3da8"
+ integrity sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==
+ dependencies:
+ postcss-value-parser "^4.2.0"
+
+postcss-normalize-positions@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz#ef97279d894087b59325b45c47f1e863daefbb92"
+ integrity sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==
+ dependencies:
+ postcss-value-parser "^4.2.0"
+
+postcss-normalize-repeat-style@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz#e9eb96805204f4766df66fd09ed2e13545420fb2"
+ integrity sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==
+ dependencies:
+ postcss-value-parser "^4.2.0"
+
+postcss-normalize-string@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz#411961169e07308c82c1f8c55f3e8a337757e228"
+ integrity sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==
+ dependencies:
+ postcss-value-parser "^4.2.0"
+
+postcss-normalize-timing-functions@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz#d5614410f8f0b2388e9f240aa6011ba6f52dafbb"
+ integrity sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==
+ dependencies:
+ postcss-value-parser "^4.2.0"
+
+postcss-normalize-unicode@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz#f67297fca3fea7f17e0d2caa40769afc487aa030"
+ integrity sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==
+ dependencies:
+ browserslist "^4.21.4"
+ postcss-value-parser "^4.2.0"
+
+postcss-normalize-url@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz#ed9d88ca82e21abef99f743457d3729a042adcdc"
+ integrity sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==
+ dependencies:
+ normalize-url "^6.0.1"
+ postcss-value-parser "^4.2.0"
+
+postcss-normalize-whitespace@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz#08a1a0d1ffa17a7cc6efe1e6c9da969cc4493cfa"
+ integrity sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==
+ dependencies:
+ postcss-value-parser "^4.2.0"
+
+postcss-normalize@^10.0.1:
+ version "10.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-normalize/-/postcss-normalize-10.0.1.tgz#464692676b52792a06b06880a176279216540dd7"
+ integrity sha512-+5w18/rDev5mqERcG3W5GZNMJa1eoYYNGo8gB7tEwaos0ajk3ZXAI4mHGcNT47NE+ZnZD1pEpUOFLvltIwmeJA==
+ dependencies:
+ "@csstools/normalize.css" "*"
+ postcss-browser-comments "^4"
+ sanitize.css "*"
+
+postcss-opacity-percentage@^1.1.2:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.3.tgz#5b89b35551a556e20c5d23eb5260fbfcf5245da6"
+ integrity sha512-An6Ba4pHBiDtyVpSLymUUERMo2cU7s+Obz6BTrS+gxkbnSBNKSuD0AVUc+CpBMrpVPKKfoVz0WQCX+Tnst0i4A==
+
+postcss-ordered-values@^5.1.3:
+ version "5.1.3"
+ resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz#b6fd2bd10f937b23d86bc829c69e7732ce76ea38"
+ integrity sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==
+ dependencies:
+ cssnano-utils "^3.1.0"
+ postcss-value-parser "^4.2.0"
+
+postcss-overflow-shorthand@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.4.tgz#7ed6486fec44b76f0eab15aa4866cda5d55d893e"
+ integrity sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A==
+ dependencies:
+ postcss-value-parser "^4.2.0"
+
+postcss-page-break@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/postcss-page-break/-/postcss-page-break-3.0.4.tgz#7fbf741c233621622b68d435babfb70dd8c1ee5f"
+ integrity sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==
+
+postcss-place@^7.0.5:
+ version "7.0.5"
+ resolved "https://registry.yarnpkg.com/postcss-place/-/postcss-place-7.0.5.tgz#95dbf85fd9656a3a6e60e832b5809914236986c4"
+ integrity sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==
+ dependencies:
+ postcss-value-parser "^4.2.0"
+
+postcss-preset-env@^7.0.1:
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-7.8.3.tgz#2a50f5e612c3149cc7af75634e202a5b2ad4f1e2"
+ integrity sha512-T1LgRm5uEVFSEF83vHZJV2z19lHg4yJuZ6gXZZkqVsqv63nlr6zabMH3l4Pc01FQCyfWVrh2GaUeCVy9Po+Aag==
+ dependencies:
+ "@csstools/postcss-cascade-layers" "^1.1.1"
+ "@csstools/postcss-color-function" "^1.1.1"
+ "@csstools/postcss-font-format-keywords" "^1.0.1"
+ "@csstools/postcss-hwb-function" "^1.0.2"
+ "@csstools/postcss-ic-unit" "^1.0.1"
+ "@csstools/postcss-is-pseudo-class" "^2.0.7"
+ "@csstools/postcss-nested-calc" "^1.0.0"
+ "@csstools/postcss-normalize-display-values" "^1.0.1"
+ "@csstools/postcss-oklab-function" "^1.1.1"
+ "@csstools/postcss-progressive-custom-properties" "^1.3.0"
+ "@csstools/postcss-stepped-value-functions" "^1.0.1"
+ "@csstools/postcss-text-decoration-shorthand" "^1.0.0"
+ "@csstools/postcss-trigonometric-functions" "^1.0.2"
+ "@csstools/postcss-unset-value" "^1.0.2"
+ autoprefixer "^10.4.13"
+ browserslist "^4.21.4"
+ css-blank-pseudo "^3.0.3"
+ css-has-pseudo "^3.0.4"
+ css-prefers-color-scheme "^6.0.3"
+ cssdb "^7.1.0"
+ postcss-attribute-case-insensitive "^5.0.2"
+ postcss-clamp "^4.1.0"
+ postcss-color-functional-notation "^4.2.4"
+ postcss-color-hex-alpha "^8.0.4"
+ postcss-color-rebeccapurple "^7.1.1"
+ postcss-custom-media "^8.0.2"
+ postcss-custom-properties "^12.1.10"
+ postcss-custom-selectors "^6.0.3"
+ postcss-dir-pseudo-class "^6.0.5"
+ postcss-double-position-gradients "^3.1.2"
+ postcss-env-function "^4.0.6"
+ postcss-focus-visible "^6.0.4"
+ postcss-focus-within "^5.0.4"
+ postcss-font-variant "^5.0.0"
+ postcss-gap-properties "^3.0.5"
+ postcss-image-set-function "^4.0.7"
+ postcss-initial "^4.0.1"
+ postcss-lab-function "^4.2.1"
+ postcss-logical "^5.0.4"
+ postcss-media-minmax "^5.0.0"
+ postcss-nesting "^10.2.0"
+ postcss-opacity-percentage "^1.1.2"
+ postcss-overflow-shorthand "^3.0.4"
+ postcss-page-break "^3.0.4"
+ postcss-place "^7.0.5"
+ postcss-pseudo-class-any-link "^7.1.6"
+ postcss-replace-overflow-wrap "^4.0.0"
+ postcss-selector-not "^6.0.1"
+ postcss-value-parser "^4.2.0"
+
+postcss-pseudo-class-any-link@^7.1.6:
+ version "7.1.6"
+ resolved "https://registry.yarnpkg.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.6.tgz#2693b221902da772c278def85a4d9a64b6e617ab"
+ integrity sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==
+ dependencies:
+ postcss-selector-parser "^6.0.10"
+
+postcss-reduce-initial@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-5.1.1.tgz#c18b7dfb88aee24b1f8e4936541c29adbd35224e"
+ integrity sha512-//jeDqWcHPuXGZLoolFrUXBDyuEGbr9S2rMo19bkTIjBQ4PqkaO+oI8wua5BOUxpfi97i3PCoInsiFIEBfkm9w==
+ dependencies:
+ browserslist "^4.21.4"
+ caniuse-api "^3.0.0"
+
+postcss-reduce-transforms@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz#333b70e7758b802f3dd0ddfe98bb1ccfef96b6e9"
+ integrity sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==
+ dependencies:
+ postcss-value-parser "^4.2.0"
+
+postcss-replace-overflow-wrap@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz#d2df6bed10b477bf9c52fab28c568b4b29ca4319"
+ integrity sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==
+
+postcss-selector-not@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-6.0.1.tgz#8f0a709bf7d4b45222793fc34409be407537556d"
+ integrity sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ==
+ dependencies:
+ postcss-selector-parser "^6.0.10"
+
+postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.9:
+ version "6.0.11"
+ resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz#2e41dc39b7ad74046e1615185185cd0b17d0c8dc"
+ integrity sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==
+ dependencies:
+ cssesc "^3.0.0"
+ util-deprecate "^1.0.2"
+
+postcss-svgo@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-5.1.0.tgz#0a317400ced789f233a28826e77523f15857d80d"
+ integrity sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==
+ dependencies:
+ postcss-value-parser "^4.2.0"
+ svgo "^2.7.0"
+
+postcss-unique-selectors@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz#a9f273d1eacd09e9aa6088f4b0507b18b1b541b6"
+ integrity sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==
+ dependencies:
+ postcss-selector-parser "^6.0.5"
+
+postcss-value-parser@^4.0.0, postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514"
+ integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
+
+postcss@^7.0.35:
+ version "7.0.39"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.39.tgz#9624375d965630e2e1f2c02a935c82a59cb48309"
+ integrity sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==
+ dependencies:
+ picocolors "^0.2.1"
+ source-map "^0.6.1"
+
+postcss@^8.3.5, postcss@^8.4.18, postcss@^8.4.19, postcss@^8.4.4:
+ version "8.4.21"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.21.tgz#c639b719a57efc3187b13a1d765675485f4134f4"
+ integrity sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==
+ dependencies:
+ nanoid "^3.3.4"
+ picocolors "^1.0.0"
+ source-map-js "^1.0.2"
+
+prelude-ls@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
+ integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
+
+prelude-ls@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
+ integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==
+
+pretty-bytes@^5.3.0, pretty-bytes@^5.4.1:
+ version "5.6.0"
+ resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb"
+ integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==
+
+pretty-error@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6"
+ integrity sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==
+ dependencies:
+ lodash "^4.17.20"
+ renderkid "^3.0.0"
+
+pretty-format@^27.0.2, pretty-format@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e"
+ integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==
+ dependencies:
+ ansi-regex "^5.0.1"
+ ansi-styles "^5.0.0"
+ react-is "^17.0.1"
+
+pretty-format@^28.1.3:
+ version "28.1.3"
+ resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-28.1.3.tgz#c9fba8cedf99ce50963a11b27d982a9ae90970d5"
+ integrity sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==
+ dependencies:
+ "@jest/schemas" "^28.1.3"
+ ansi-regex "^5.0.1"
+ ansi-styles "^5.0.0"
+ react-is "^18.0.0"
+
+pretty-format@^29.0.0, pretty-format@^29.3.1:
+ version "29.3.1"
+ resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.3.1.tgz#1841cac822b02b4da8971dacb03e8a871b4722da"
+ integrity sha512-FyLnmb1cYJV8biEIiRyzRFvs2lry7PPIvOqKVe1GCUEYg4YGmlx1qG9EJNMxArYm7piII4qb8UV1Pncq5dxmcg==
+ dependencies:
+ "@jest/schemas" "^29.0.0"
+ ansi-styles "^5.0.0"
+ react-is "^18.0.0"
+
+process-nextick-args@~2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
+ integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
+
+promise@^8.1.0:
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/promise/-/promise-8.3.0.tgz#8cb333d1edeb61ef23869fbb8a4ea0279ab60e0a"
+ integrity sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==
+ dependencies:
+ asap "~2.0.6"
+
+prompts@^2.0.1, prompts@^2.4.2:
+ version "2.4.2"
+ resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069"
+ integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==
+ dependencies:
+ kleur "^3.0.3"
+ sisteransi "^1.0.5"
+
+prop-types-extra@^1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/prop-types-extra/-/prop-types-extra-1.1.1.tgz#58c3b74cbfbb95d304625975aa2f0848329a010b"
+ integrity sha512-59+AHNnHYCdiC+vMwY52WmvP5dM3QLeoumYuEyceQDi9aEhtwN9zIQ2ZNo25sMyXnbh32h+P1ezDsUpUH3JAew==
+ dependencies:
+ react-is "^16.3.2"
+ warning "^4.0.0"
+
+prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1:
+ version "15.8.1"
+ resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5"
+ integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==
+ dependencies:
+ loose-envify "^1.4.0"
+ object-assign "^4.1.1"
+ react-is "^16.13.1"
+
+proxy-addr@~2.0.7:
+ version "2.0.7"
+ resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025"
+ integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==
+ dependencies:
+ forwarded "0.2.0"
+ ipaddr.js "1.9.1"
+
+proxy-from-env@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
+ integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
+
+psl@^1.1.33:
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7"
+ integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==
+
+punycode@^2.1.0, punycode@^2.1.1:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.2.0.tgz#2092cc57cd2582c38e4e7e8bb869dc8d3148bc74"
+ integrity sha512-LN6QV1IJ9ZhxWTNdktaPClrNfp8xdSAYS0Zk2ddX7XsXZAxckMHPCBcHRo0cTcEIgYPRiGEkmji3Idkh2yFtYw==
+
+q@^1.1.2:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
+ integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==
+
+qs@6.11.0:
+ version "6.11.0"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a"
+ integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==
+ dependencies:
+ side-channel "^1.0.4"
+
+querystringify@^2.1.1:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6"
+ integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==
+
+queue-microtask@^1.2.2:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
+ integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
+
+quick-lru@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932"
+ integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==
+
+raf@^3.4.1:
+ version "3.4.1"
+ resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39"
+ integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==
+ dependencies:
+ performance-now "^2.1.0"
+
+randombytes@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
+ integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
+ dependencies:
+ safe-buffer "^5.1.0"
+
+range-parser@^1.2.1, range-parser@~1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031"
+ integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==
+
+raw-body@2.5.1:
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857"
+ integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==
+ dependencies:
+ bytes "3.1.2"
+ http-errors "2.0.0"
+ iconv-lite "0.4.24"
+ unpipe "1.0.0"
+
+react-app-polyfill@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/react-app-polyfill/-/react-app-polyfill-3.0.0.tgz#95221e0a9bd259e5ca6b177c7bb1cb6768f68fd7"
+ integrity sha512-sZ41cxiU5llIB003yxxQBYrARBqe0repqPTTYBTmMqTz9szeBbE37BehCE891NZsmdZqqP+xWKdT3eo3vOzN8w==
+ dependencies:
+ core-js "^3.19.2"
+ object-assign "^4.1.1"
+ promise "^8.1.0"
+ raf "^3.4.1"
+ regenerator-runtime "^0.13.9"
+ whatwg-fetch "^3.6.2"
+
+react-bootstrap@2.6.0:
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/react-bootstrap/-/react-bootstrap-2.6.0.tgz#bd125889cc9d2bbd7c89334a7c54980ff0a65b94"
+ integrity sha512-WnDgN6PR8WZKo2Og5J8EafFi4BsABjc96lNuMNfksrgiPDCw18/woWQCNhAeHFZQWTQ/PijkOrQ9ncTWwO//AA==
+ dependencies:
+ "@babel/runtime" "^7.17.2"
+ "@restart/hooks" "^0.4.6"
+ "@restart/ui" "^1.4.1"
+ "@types/react-transition-group" "^4.4.4"
+ classnames "^2.3.1"
+ dom-helpers "^5.2.1"
+ invariant "^2.2.4"
+ prop-types "^15.8.1"
+ prop-types-extra "^1.1.0"
+ react-transition-group "^4.4.2"
+ uncontrollable "^7.2.1"
+ warning "^4.0.3"
+
+react-dev-utils@^12.0.1:
+ version "12.0.1"
+ resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-12.0.1.tgz#ba92edb4a1f379bd46ccd6bcd4e7bc398df33e73"
+ integrity sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==
+ dependencies:
+ "@babel/code-frame" "^7.16.0"
+ address "^1.1.2"
+ browserslist "^4.18.1"
+ chalk "^4.1.2"
+ cross-spawn "^7.0.3"
+ detect-port-alt "^1.1.6"
+ escape-string-regexp "^4.0.0"
+ filesize "^8.0.6"
+ find-up "^5.0.0"
+ fork-ts-checker-webpack-plugin "^6.5.0"
+ global-modules "^2.0.0"
+ globby "^11.0.4"
+ gzip-size "^6.0.0"
+ immer "^9.0.7"
+ is-root "^2.1.0"
+ loader-utils "^3.2.0"
+ open "^8.4.0"
+ pkg-up "^3.1.0"
+ prompts "^2.4.2"
+ react-error-overlay "^6.0.11"
+ recursive-readdir "^2.2.2"
+ shell-quote "^1.7.3"
+ strip-ansi "^6.0.1"
+ text-table "^0.2.0"
+
+react-dom@^18.2.0:
+ version "18.2.0"
+ resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d"
+ integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==
+ dependencies:
+ loose-envify "^1.1.0"
+ scheduler "^0.23.0"
+
+react-error-overlay@^6.0.11:
+ version "6.0.11"
+ resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.11.tgz#92835de5841c5cf08ba00ddd2d677b6d17ff9adb"
+ integrity sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==
+
+react-fast-compare@^2.0.1:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-2.0.4.tgz#e84b4d455b0fec113e0402c329352715196f81f9"
+ integrity sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==
+
+react-is@^16.13.1, react-is@^16.3.2, react-is@^16.7.0:
+ version "16.13.1"
+ resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
+ integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
+
+react-is@^17.0.1:
+ version "17.0.2"
+ resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0"
+ integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==
+
+react-is@^18.0.0:
+ version "18.2.0"
+ resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b"
+ integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==
+
+react-lifecycles-compat@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362"
+ integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==
+
+react-refresh@^0.11.0:
+ version "0.11.0"
+ resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.11.0.tgz#77198b944733f0f1f1a90e791de4541f9f074046"
+ integrity sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==
+
+react-router-bootstrap@0.26.2:
+ version "0.26.2"
+ resolved "https://registry.yarnpkg.com/react-router-bootstrap/-/react-router-bootstrap-0.26.2.tgz#255ffb662b77141624d89d97105ba4f93863e664"
+ integrity sha512-YlpI9Xi+Uqp6zFAUO8D/wu6P8mr1ujqq+0V5MhJG1kx9dr/95fAMoGk4J+/CsysOkwtR3tYSac4DDWmHwXvC8w==
+ dependencies:
+ prop-types "^15.7.2"
+
+react-router-dom@6.4.3:
+ version "6.4.3"
+ resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.4.3.tgz#70093b5f65f85f1df9e5d4182eb7ff3a08299275"
+ integrity sha512-MiaYQU8CwVCaOfJdYvt84KQNjT78VF0TJrA17SIQgNHRvLnXDJO6qsFqq8F/zzB1BWZjCFIrQpu4QxcshitziQ==
+ dependencies:
+ "@remix-run/router" "1.0.3"
+ react-router "6.4.3"
+
+react-router@6.4.3:
+ version "6.4.3"
+ resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.4.3.tgz#9ed3ee4d6e95889e9b075a5d63e29acc7def0d49"
+ integrity sha512-BT6DoGn6aV1FVP5yfODMOiieakp3z46P1Fk0RNzJMACzE7C339sFuHebfvWtnB4pzBvXXkHP2vscJzWRuUjTtA==
+ dependencies:
+ "@remix-run/router" "1.0.3"
+
+react-scripts@5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/react-scripts/-/react-scripts-5.0.1.tgz#6285dbd65a8ba6e49ca8d651ce30645a6d980003"
+ integrity sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ==
+ dependencies:
+ "@babel/core" "^7.16.0"
+ "@pmmmwh/react-refresh-webpack-plugin" "^0.5.3"
+ "@svgr/webpack" "^5.5.0"
+ babel-jest "^27.4.2"
+ babel-loader "^8.2.3"
+ babel-plugin-named-asset-import "^0.3.8"
+ babel-preset-react-app "^10.0.1"
+ bfj "^7.0.2"
+ browserslist "^4.18.1"
+ camelcase "^6.2.1"
+ case-sensitive-paths-webpack-plugin "^2.4.0"
+ css-loader "^6.5.1"
+ css-minimizer-webpack-plugin "^3.2.0"
+ dotenv "^10.0.0"
+ dotenv-expand "^5.1.0"
+ eslint "^8.3.0"
+ eslint-config-react-app "^7.0.1"
+ eslint-webpack-plugin "^3.1.1"
+ file-loader "^6.2.0"
+ fs-extra "^10.0.0"
+ html-webpack-plugin "^5.5.0"
+ identity-obj-proxy "^3.0.0"
+ jest "^27.4.3"
+ jest-resolve "^27.4.2"
+ jest-watch-typeahead "^1.0.0"
+ mini-css-extract-plugin "^2.4.5"
+ postcss "^8.4.4"
+ postcss-flexbugs-fixes "^5.0.2"
+ postcss-loader "^6.2.1"
+ postcss-normalize "^10.0.1"
+ postcss-preset-env "^7.0.1"
+ prompts "^2.4.2"
+ react-app-polyfill "^3.0.0"
+ react-dev-utils "^12.0.1"
+ react-refresh "^0.11.0"
+ resolve "^1.20.0"
+ resolve-url-loader "^4.0.0"
+ sass-loader "^12.3.0"
+ semver "^7.3.5"
+ source-map-loader "^3.0.0"
+ style-loader "^3.3.1"
+ tailwindcss "^3.0.2"
+ terser-webpack-plugin "^5.2.5"
+ webpack "^5.64.4"
+ webpack-dev-server "^4.6.0"
+ webpack-manifest-plugin "^4.0.2"
+ workbox-webpack-plugin "^6.4.1"
+ optionalDependencies:
+ fsevents "^2.3.2"
+
+react-transition-group@^4.4.2:
+ version "4.4.5"
+ resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.5.tgz#e53d4e3f3344da8521489fbef8f2581d42becdd1"
+ integrity sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==
+ dependencies:
+ "@babel/runtime" "^7.5.5"
+ dom-helpers "^5.0.1"
+ loose-envify "^1.4.0"
+ prop-types "^15.6.2"
+
+react@^18.2.0:
+ version "18.2.0"
+ resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5"
+ integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==
+ dependencies:
+ loose-envify "^1.1.0"
+
+read-cache@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774"
+ integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==
+ dependencies:
+ pify "^2.3.0"
+
+readable-stream@^2.0.1:
+ version "2.3.7"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
+ integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
+ 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"
+
+readable-stream@^3.0.6:
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
+ integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
+ dependencies:
+ inherits "^2.0.3"
+ string_decoder "^1.1.1"
+ util-deprecate "^1.0.1"
+
+readdirp@~3.6.0:
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
+ integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
+ dependencies:
+ picomatch "^2.2.1"
+
+recursive-readdir@^2.2.2:
+ version "2.2.3"
+ resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.3.tgz#e726f328c0d69153bcabd5c322d3195252379372"
+ integrity sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==
+ dependencies:
+ minimatch "^3.0.5"
+
+redent@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f"
+ integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==
+ dependencies:
+ indent-string "^4.0.0"
+ strip-indent "^3.0.0"
+
+regenerate-unicode-properties@^10.1.0:
+ version "10.1.0"
+ resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz#7c3192cab6dd24e21cb4461e5ddd7dd24fa8374c"
+ integrity sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==
+ dependencies:
+ regenerate "^1.4.2"
+
+regenerate@^1.4.2:
+ version "1.4.2"
+ resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a"
+ integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==
+
+regenerator-runtime@^0.13.11, regenerator-runtime@^0.13.9:
+ version "0.13.11"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9"
+ integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==
+
+regenerator-transform@^0.15.1:
+ version "0.15.1"
+ resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.1.tgz#f6c4e99fc1b4591f780db2586328e4d9a9d8dc56"
+ integrity sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==
+ dependencies:
+ "@babel/runtime" "^7.8.4"
+
+regex-parser@^2.2.11:
+ version "2.2.11"
+ resolved "https://registry.yarnpkg.com/regex-parser/-/regex-parser-2.2.11.tgz#3b37ec9049e19479806e878cabe7c1ca83ccfe58"
+ integrity sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==
+
+regexp.prototype.flags@^1.4.3:
+ version "1.4.3"
+ resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac"
+ integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.3"
+ functions-have-names "^1.2.2"
+
+regexpp@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2"
+ integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==
+
+regexpu-core@^5.2.1:
+ version "5.2.2"
+ resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.2.2.tgz#3e4e5d12103b64748711c3aad69934d7718e75fc"
+ integrity sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw==
+ dependencies:
+ regenerate "^1.4.2"
+ regenerate-unicode-properties "^10.1.0"
+ regjsgen "^0.7.1"
+ regjsparser "^0.9.1"
+ unicode-match-property-ecmascript "^2.0.0"
+ unicode-match-property-value-ecmascript "^2.1.0"
+
+regjsgen@^0.7.1:
+ version "0.7.1"
+ resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.7.1.tgz#ee5ef30e18d3f09b7c369b76e7c2373ed25546f6"
+ integrity sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==
+
+regjsparser@^0.9.1:
+ version "0.9.1"
+ resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709"
+ integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==
+ dependencies:
+ jsesc "~0.5.0"
+
+relateurl@^0.2.7:
+ version "0.2.7"
+ resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9"
+ integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==
+
+renderkid@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-3.0.0.tgz#5fd823e4d6951d37358ecc9a58b1f06836b6268a"
+ integrity sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==
+ dependencies:
+ css-select "^4.1.3"
+ dom-converter "^0.2.0"
+ htmlparser2 "^6.1.0"
+ lodash "^4.17.21"
+ strip-ansi "^6.0.1"
+
+require-directory@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
+ integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==
+
+require-from-string@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"
+ integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==
+
+requires-port@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
+ integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==
+
+resolve-cwd@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d"
+ integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==
+ dependencies:
+ resolve-from "^5.0.0"
+
+resolve-from@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
+ integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
+
+resolve-from@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69"
+ integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==
+
+resolve-url-loader@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz#d50d4ddc746bb10468443167acf800dcd6c3ad57"
+ integrity sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA==
+ dependencies:
+ adjust-sourcemap-loader "^4.0.0"
+ convert-source-map "^1.7.0"
+ loader-utils "^2.0.0"
+ postcss "^7.0.35"
+ source-map "0.6.1"
+
+resolve.exports@^1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.1.tgz#05cfd5b3edf641571fd46fa608b610dda9ead999"
+ integrity sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==
+
+resolve@^1.1.7, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.1:
+ version "1.22.1"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177"
+ integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==
+ dependencies:
+ is-core-module "^2.9.0"
+ path-parse "^1.0.7"
+ supports-preserve-symlinks-flag "^1.0.0"
+
+resolve@^2.0.0-next.4:
+ version "2.0.0-next.4"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660"
+ integrity sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==
+ dependencies:
+ is-core-module "^2.9.0"
+ path-parse "^1.0.7"
+ supports-preserve-symlinks-flag "^1.0.0"
+
+retry@^0.13.1:
+ version "0.13.1"
+ resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658"
+ integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==
+
+reusify@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
+ integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
+
+rimraf@^3.0.0, rimraf@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
+ integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
+ dependencies:
+ glob "^7.1.3"
+
+rollup-plugin-terser@^7.0.0:
+ version "7.0.2"
+ resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz#e8fbba4869981b2dc35ae7e8a502d5c6c04d324d"
+ integrity sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==
+ dependencies:
+ "@babel/code-frame" "^7.10.4"
+ jest-worker "^26.2.1"
+ serialize-javascript "^4.0.0"
+ terser "^5.0.0"
+
+rollup@^2.43.1:
+ version "2.79.1"
+ resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.79.1.tgz#bedee8faef7c9f93a2647ac0108748f497f081c7"
+ integrity sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==
+ optionalDependencies:
+ fsevents "~2.3.2"
+
+run-parallel@^1.1.9:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"
+ integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==
+ dependencies:
+ queue-microtask "^1.2.2"
+
+safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
+ integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
+
+safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@~5.2.0:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
+ integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
+
+safe-regex-test@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295"
+ integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==
+ dependencies:
+ call-bind "^1.0.2"
+ get-intrinsic "^1.1.3"
+ is-regex "^1.1.4"
+
+"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0":
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
+ integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
+
+sanitize.css@*:
+ version "13.0.0"
+ resolved "https://registry.yarnpkg.com/sanitize.css/-/sanitize.css-13.0.0.tgz#2675553974b27964c75562ade3bd85d79879f173"
+ integrity sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA==
+
+sass-loader@^12.3.0:
+ version "12.6.0"
+ resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-12.6.0.tgz#5148362c8e2cdd4b950f3c63ac5d16dbfed37bcb"
+ integrity sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==
+ dependencies:
+ klona "^2.0.4"
+ neo-async "^2.6.2"
+
+sax@~1.2.4:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
+ integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
+
+saxes@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d"
+ integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==
+ dependencies:
+ xmlchars "^2.2.0"
+
+scheduler@^0.23.0:
+ version "0.23.0"
+ resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe"
+ integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==
+ dependencies:
+ loose-envify "^1.1.0"
+
+schema-utils@2.7.0:
+ version "2.7.0"
+ resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.0.tgz#17151f76d8eae67fbbf77960c33c676ad9f4efc7"
+ integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==
+ dependencies:
+ "@types/json-schema" "^7.0.4"
+ ajv "^6.12.2"
+ ajv-keywords "^3.4.1"
+
+schema-utils@^2.6.5:
+ version "2.7.1"
+ resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7"
+ integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==
+ dependencies:
+ "@types/json-schema" "^7.0.5"
+ ajv "^6.12.4"
+ ajv-keywords "^3.5.2"
+
+schema-utils@^3.0.0, schema-utils@^3.1.0, schema-utils@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.1.tgz#bc74c4b6b6995c1d88f76a8b77bea7219e0c8281"
+ integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==
+ dependencies:
+ "@types/json-schema" "^7.0.8"
+ ajv "^6.12.5"
+ ajv-keywords "^3.5.2"
+
+schema-utils@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.0.0.tgz#60331e9e3ae78ec5d16353c467c34b3a0a1d3df7"
+ integrity sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==
+ dependencies:
+ "@types/json-schema" "^7.0.9"
+ ajv "^8.8.0"
+ ajv-formats "^2.1.1"
+ ajv-keywords "^5.0.0"
+
+select-hose@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca"
+ integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==
+
+selfsigned@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.1.1.tgz#18a7613d714c0cd3385c48af0075abf3f266af61"
+ integrity sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==
+ dependencies:
+ node-forge "^1"
+
+semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0:
+ version "6.3.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
+ integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
+
+semver@^7.3.2, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8:
+ version "7.3.8"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798"
+ integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==
+ dependencies:
+ lru-cache "^6.0.0"
+
+send@0.18.0:
+ version "0.18.0"
+ resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be"
+ 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"
+
+serialize-javascript@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa"
+ integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==
+ dependencies:
+ randombytes "^2.1.0"
+
+serialize-javascript@^6.0.0:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz#b206efb27c3da0b0ab6b52f48d170b7996458e5c"
+ integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==
+ dependencies:
+ randombytes "^2.1.0"
+
+serve-index@^1.9.1:
+ version "1.9.1"
+ resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239"
+ integrity sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==
+ dependencies:
+ accepts "~1.3.4"
+ batch "0.6.1"
+ debug "2.6.9"
+ escape-html "~1.0.3"
+ http-errors "~1.6.2"
+ mime-types "~2.1.17"
+ parseurl "~1.3.2"
+
+serve-static@1.15.0:
+ version "1.15.0"
+ resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540"
+ integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==
+ dependencies:
+ encodeurl "~1.0.2"
+ escape-html "~1.0.3"
+ parseurl "~1.3.3"
+ send "0.18.0"
+
+setprototypeof@1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656"
+ integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==
+
+setprototypeof@1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424"
+ integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==
+
+shebang-command@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
+ integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
+ dependencies:
+ shebang-regex "^3.0.0"
+
+shebang-regex@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
+ integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
+
+shell-quote@^1.7.3:
+ version "1.7.4"
+ resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.4.tgz#33fe15dee71ab2a81fcbd3a52106c5cfb9fb75d8"
+ integrity sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==
+
+side-channel@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf"
+ integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==
+ dependencies:
+ call-bind "^1.0.0"
+ get-intrinsic "^1.0.2"
+ object-inspect "^1.9.0"
+
+signal-exit@^3.0.2, signal-exit@^3.0.3:
+ version "3.0.7"
+ resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
+ integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
+
+sisteransi@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed"
+ integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==
+
+slash@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
+ integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
+
+slash@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7"
+ integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==
+
+sockjs@^0.3.24:
+ version "0.3.24"
+ resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.24.tgz#c9bc8995f33a111bea0395ec30aa3206bdb5ccce"
+ integrity sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==
+ dependencies:
+ faye-websocket "^0.11.3"
+ uuid "^8.3.2"
+ websocket-driver "^0.7.4"
+
+source-list-map@^2.0.0, source-list-map@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34"
+ integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==
+
+source-map-js@^1.0.1, source-map-js@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
+ integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
+
+source-map-loader@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-3.0.2.tgz#af23192f9b344daa729f6772933194cc5fa54fee"
+ integrity sha512-BokxPoLjyl3iOrgkWaakaxqnelAJSS+0V+De0kKIq6lyWrXuiPgYTGp6z3iHmqljKAaLXwZa+ctD8GccRJeVvg==
+ dependencies:
+ abab "^2.0.5"
+ iconv-lite "^0.6.3"
+ source-map-js "^1.0.1"
+
+source-map-support@^0.5.6, source-map-support@~0.5.20:
+ version "0.5.21"
+ resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f"
+ integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==
+ dependencies:
+ buffer-from "^1.0.0"
+ source-map "^0.6.0"
+
+source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
+ integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
+
+source-map@^0.7.3:
+ version "0.7.4"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656"
+ integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==
+
+source-map@^0.8.0-beta.0:
+ version "0.8.0-beta.0"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.8.0-beta.0.tgz#d4c1bb42c3f7ee925f005927ba10709e0d1d1f11"
+ integrity sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==
+ dependencies:
+ whatwg-url "^7.0.0"
+
+sourcemap-codec@^1.4.8:
+ version "1.4.8"
+ resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4"
+ integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==
+
+spdy-transport@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31"
+ integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==
+ dependencies:
+ debug "^4.1.0"
+ detect-node "^2.0.4"
+ hpack.js "^2.1.6"
+ obuf "^1.1.2"
+ readable-stream "^3.0.6"
+ wbuf "^1.7.3"
+
+spdy@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b"
+ integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==
+ dependencies:
+ debug "^4.1.0"
+ handle-thing "^2.0.0"
+ http-deceiver "^1.2.7"
+ select-hose "^2.0.0"
+ spdy-transport "^3.0.0"
+
+sprintf-js@~1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
+ integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==
+
+stable@^0.1.8:
+ version "0.1.8"
+ resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf"
+ integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==
+
+stack-utils@^2.0.3:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f"
+ integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==
+ dependencies:
+ escape-string-regexp "^2.0.0"
+
+stackframe@^1.3.4:
+ version "1.3.4"
+ resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.3.4.tgz#b881a004c8c149a5e8efef37d51b16e412943310"
+ integrity sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==
+
+statuses@2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63"
+ integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==
+
+"statuses@>= 1.4.0 < 2":
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
+ integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==
+
+stop-iteration-iterator@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz#6a60be0b4ee757d1ed5254858ec66b10c49285e4"
+ integrity sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==
+ dependencies:
+ internal-slot "^1.0.4"
+
+string-length@^4.0.1:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a"
+ integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==
+ dependencies:
+ char-regex "^1.0.2"
+ strip-ansi "^6.0.0"
+
+string-length@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/string-length/-/string-length-5.0.1.tgz#3d647f497b6e8e8d41e422f7e0b23bc536c8381e"
+ integrity sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==
+ dependencies:
+ char-regex "^2.0.0"
+ strip-ansi "^7.0.1"
+
+string-natural-compare@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/string-natural-compare/-/string-natural-compare-3.0.1.tgz#7a42d58474454963759e8e8b7ae63d71c1e7fdf4"
+ integrity sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==
+
+string-width@^4.1.0, string-width@^4.2.0:
+ version "4.2.3"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
+ 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"
+
+string.prototype.matchall@^4.0.6, string.prototype.matchall@^4.0.8:
+ version "4.0.8"
+ resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz#3bf85722021816dcd1bf38bb714915887ca79fd3"
+ integrity sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.4"
+ es-abstract "^1.20.4"
+ get-intrinsic "^1.1.3"
+ has-symbols "^1.0.3"
+ internal-slot "^1.0.3"
+ regexp.prototype.flags "^1.4.3"
+ side-channel "^1.0.4"
+
+string.prototype.trimend@^1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533"
+ integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.4"
+ es-abstract "^1.20.4"
+
+string.prototype.trimstart@^1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4"
+ integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.4"
+ es-abstract "^1.20.4"
+
+string_decoder@^1.1.1:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
+ integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
+ dependencies:
+ safe-buffer "~5.2.0"
+
+string_decoder@~1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
+ integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
+ dependencies:
+ safe-buffer "~5.1.0"
+
+stringify-object@^3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629"
+ integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==
+ dependencies:
+ get-own-enumerable-property-symbols "^3.0.0"
+ is-obj "^1.0.1"
+ is-regexp "^1.0.0"
+
+strip-ansi@^6.0.0, strip-ansi@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
+ integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
+ dependencies:
+ ansi-regex "^5.0.1"
+
+strip-ansi@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2"
+ integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==
+ dependencies:
+ ansi-regex "^6.0.1"
+
+strip-bom@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
+ integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==
+
+strip-bom@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878"
+ integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==
+
+strip-comments@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/strip-comments/-/strip-comments-2.0.1.tgz#4ad11c3fbcac177a67a40ac224ca339ca1c1ba9b"
+ integrity sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==
+
+strip-final-newline@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
+ integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==
+
+strip-indent@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001"
+ integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==
+ dependencies:
+ min-indent "^1.0.0"
+
+strip-json-comments@^3.1.0, strip-json-comments@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
+ integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
+
+style-loader@^3.3.1:
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-3.3.1.tgz#057dfa6b3d4d7c7064462830f9113ed417d38575"
+ integrity sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==
+
+stylehacks@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-5.1.1.tgz#7934a34eb59d7152149fa69d6e9e56f2fc34bcc9"
+ integrity sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==
+ dependencies:
+ browserslist "^4.21.4"
+ postcss-selector-parser "^6.0.4"
+
+supports-color@^5.3.0:
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
+ integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
+ dependencies:
+ has-flag "^3.0.0"
+
+supports-color@^7.0.0, supports-color@^7.1.0:
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
+ integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
+ dependencies:
+ has-flag "^4.0.0"
+
+supports-color@^8.0.0:
+ version "8.1.1"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c"
+ integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==
+ dependencies:
+ has-flag "^4.0.0"
+
+supports-hyperlinks@^2.0.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624"
+ integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==
+ dependencies:
+ has-flag "^4.0.0"
+ supports-color "^7.0.0"
+
+supports-preserve-symlinks-flag@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
+ integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
+
+svg-parser@^2.0.2:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5"
+ integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==
+
+svgo@^1.2.2:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167"
+ integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==
+ dependencies:
+ chalk "^2.4.1"
+ coa "^2.0.2"
+ css-select "^2.0.0"
+ css-select-base-adapter "^0.1.1"
+ css-tree "1.0.0-alpha.37"
+ csso "^4.0.2"
+ js-yaml "^3.13.1"
+ mkdirp "~0.5.1"
+ object.values "^1.1.0"
+ sax "~1.2.4"
+ stable "^0.1.8"
+ unquote "~1.1.1"
+ util.promisify "~1.0.0"
+
+svgo@^2.7.0:
+ version "2.8.0"
+ resolved "https://registry.yarnpkg.com/svgo/-/svgo-2.8.0.tgz#4ff80cce6710dc2795f0c7c74101e6764cfccd24"
+ integrity sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==
+ dependencies:
+ "@trysound/sax" "0.2.0"
+ commander "^7.2.0"
+ css-select "^4.1.3"
+ css-tree "^1.1.3"
+ csso "^4.2.0"
+ picocolors "^1.0.0"
+ stable "^0.1.8"
+
+symbol-tree@^3.2.4:
+ version "3.2.4"
+ resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"
+ integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==
+
+tailwindcss@^3.0.2:
+ version "3.2.4"
+ resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.2.4.tgz#afe3477e7a19f3ceafb48e4b083e292ce0dc0250"
+ integrity sha512-AhwtHCKMtR71JgeYDaswmZXhPcW9iuI9Sp2LvZPo9upDZ7231ZJ7eA9RaURbhpXGVlrjX4cFNlB4ieTetEb7hQ==
+ dependencies:
+ arg "^5.0.2"
+ chokidar "^3.5.3"
+ color-name "^1.1.4"
+ detective "^5.2.1"
+ didyoumean "^1.2.2"
+ dlv "^1.1.3"
+ fast-glob "^3.2.12"
+ glob-parent "^6.0.2"
+ is-glob "^4.0.3"
+ lilconfig "^2.0.6"
+ micromatch "^4.0.5"
+ normalize-path "^3.0.0"
+ object-hash "^3.0.0"
+ picocolors "^1.0.0"
+ postcss "^8.4.18"
+ postcss-import "^14.1.0"
+ postcss-js "^4.0.0"
+ postcss-load-config "^3.1.4"
+ postcss-nested "6.0.0"
+ postcss-selector-parser "^6.0.10"
+ postcss-value-parser "^4.2.0"
+ quick-lru "^5.1.1"
+ resolve "^1.22.1"
+
+tapable@^1.0.0:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2"
+ integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==
+
+tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0"
+ integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==
+
+temp-dir@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e"
+ integrity sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==
+
+tempy@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/tempy/-/tempy-0.6.0.tgz#65e2c35abc06f1124a97f387b08303442bde59f3"
+ integrity sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==
+ dependencies:
+ is-stream "^2.0.0"
+ temp-dir "^2.0.0"
+ type-fest "^0.16.0"
+ unique-string "^2.0.0"
+
+terminal-link@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994"
+ integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==
+ dependencies:
+ ansi-escapes "^4.2.1"
+ supports-hyperlinks "^2.0.0"
+
+terser-webpack-plugin@^5.1.3, terser-webpack-plugin@^5.2.5:
+ version "5.3.6"
+ resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz#5590aec31aa3c6f771ce1b1acca60639eab3195c"
+ integrity sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==
+ dependencies:
+ "@jridgewell/trace-mapping" "^0.3.14"
+ jest-worker "^27.4.5"
+ schema-utils "^3.1.1"
+ serialize-javascript "^6.0.0"
+ terser "^5.14.1"
+
+terser@^5.0.0, terser@^5.10.0, terser@^5.14.1:
+ version "5.16.1"
+ resolved "https://registry.yarnpkg.com/terser/-/terser-5.16.1.tgz#5af3bc3d0f24241c7fb2024199d5c461a1075880"
+ integrity sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw==
+ dependencies:
+ "@jridgewell/source-map" "^0.3.2"
+ acorn "^8.5.0"
+ commander "^2.20.0"
+ source-map-support "~0.5.20"
+
+test-exclude@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e"
+ integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==
+ dependencies:
+ "@istanbuljs/schema" "^0.1.2"
+ glob "^7.1.4"
+ minimatch "^3.0.4"
+
+text-table@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
+ integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==
+
+throat@^6.0.1:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.2.tgz#51a3fbb5e11ae72e2cf74861ed5c8020f89f29fe"
+ integrity sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==
+
+thunky@^1.0.2:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d"
+ integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==
+
+tiny-warning@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754"
+ integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==
+
+tmpl@1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc"
+ integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==
+
+to-fast-properties@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
+ integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==
+
+to-regex-range@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
+ integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
+ dependencies:
+ is-number "^7.0.0"
+
+toidentifier@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35"
+ integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==
+
+tough-cookie@^4.0.0:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.2.tgz#e53e84b85f24e0b65dd526f46628db6c85f6b874"
+ integrity sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==
+ dependencies:
+ psl "^1.1.33"
+ punycode "^2.1.1"
+ universalify "^0.2.0"
+ url-parse "^1.5.3"
+
+tr46@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09"
+ integrity sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==
+ dependencies:
+ punycode "^2.1.0"
+
+tr46@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240"
+ integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==
+ dependencies:
+ punycode "^2.1.1"
+
+tryer@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8"
+ integrity sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==
+
+tsconfig-paths@^3.14.1:
+ version "3.14.1"
+ resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a"
+ integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==
+ dependencies:
+ "@types/json5" "^0.0.29"
+ json5 "^1.0.1"
+ minimist "^1.2.6"
+ strip-bom "^3.0.0"
+
+tslib@^1.10.0, tslib@^1.8.1:
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
+ integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
+
+tslib@^2.0.3, tslib@^2.4.0:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e"
+ integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==
+
+tsutils@^3.21.0:
+ version "3.21.0"
+ resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623"
+ integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==
+ dependencies:
+ tslib "^1.8.1"
+
+type-check@^0.4.0, type-check@~0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
+ integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==
+ dependencies:
+ prelude-ls "^1.2.1"
+
+type-check@~0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
+ integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==
+ dependencies:
+ prelude-ls "~1.1.2"
+
+type-detect@4.0.8:
+ version "4.0.8"
+ resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c"
+ integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==
+
+type-fest@^0.16.0:
+ version "0.16.0"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.16.0.tgz#3240b891a78b0deae910dbeb86553e552a148860"
+ integrity sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==
+
+type-fest@^0.20.2:
+ version "0.20.2"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4"
+ integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
+
+type-fest@^0.21.3:
+ version "0.21.3"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37"
+ integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==
+
+type-is@~1.6.18:
+ version "1.6.18"
+ resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131"
+ integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==
+ dependencies:
+ media-typer "0.3.0"
+ mime-types "~2.1.24"
+
+typed-array-length@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb"
+ integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==
+ dependencies:
+ call-bind "^1.0.2"
+ for-each "^0.3.3"
+ is-typed-array "^1.1.9"
+
+typedarray-to-buffer@^3.1.5:
+ version "3.1.5"
+ resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080"
+ integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==
+ dependencies:
+ is-typedarray "^1.0.0"
+
+unbox-primitive@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e"
+ integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==
+ dependencies:
+ call-bind "^1.0.2"
+ has-bigints "^1.0.2"
+ has-symbols "^1.0.3"
+ which-boxed-primitive "^1.0.2"
+
+uncontrollable@^7.2.1:
+ version "7.2.1"
+ resolved "https://registry.yarnpkg.com/uncontrollable/-/uncontrollable-7.2.1.tgz#1fa70ba0c57a14d5f78905d533cf63916dc75738"
+ integrity sha512-svtcfoTADIB0nT9nltgjujTi7BzVmwjZClOmskKu/E8FW9BXzg9os8OLr4f8Dlnk0rYWJIWr4wv9eKUXiQvQwQ==
+ dependencies:
+ "@babel/runtime" "^7.6.3"
+ "@types/react" ">=16.9.11"
+ invariant "^2.2.4"
+ react-lifecycles-compat "^3.0.4"
+
+unicode-canonical-property-names-ecmascript@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc"
+ integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==
+
+unicode-match-property-ecmascript@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3"
+ integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==
+ dependencies:
+ unicode-canonical-property-names-ecmascript "^2.0.0"
+ unicode-property-aliases-ecmascript "^2.0.0"
+
+unicode-match-property-value-ecmascript@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0"
+ integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==
+
+unicode-property-aliases-ecmascript@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd"
+ integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==
+
+unique-string@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d"
+ integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==
+ dependencies:
+ crypto-random-string "^2.0.0"
+
+universalify@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0"
+ integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==
+
+universalify@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717"
+ integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==
+
+unpipe@1.0.0, unpipe@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
+ integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==
+
+unquote@~1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544"
+ integrity sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==
+
+upath@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894"
+ integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==
+
+update-browserslist-db@^1.0.9:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3"
+ integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==
+ dependencies:
+ escalade "^3.1.1"
+ picocolors "^1.0.0"
+
+uri-js@^4.2.2:
+ version "4.4.1"
+ resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
+ integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
+ dependencies:
+ punycode "^2.1.0"
+
+url-parse@^1.5.3:
+ version "1.5.10"
+ resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1"
+ integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==
+ dependencies:
+ querystringify "^2.1.1"
+ requires-port "^1.0.0"
+
+util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+ integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
+
+util.promisify@~1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee"
+ integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.2"
+ has-symbols "^1.0.1"
+ object.getownpropertydescriptors "^2.1.0"
+
+utila@~0.4:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c"
+ integrity sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==
+
+utils-merge@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
+ integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==
+
+uuid@^8.3.2:
+ version "8.3.2"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
+ integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
+
+v8-to-istanbul@^8.1.0:
+ version "8.1.1"
+ resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz#77b752fd3975e31bbcef938f85e9bd1c7a8d60ed"
+ integrity sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==
+ dependencies:
+ "@types/istanbul-lib-coverage" "^2.0.1"
+ convert-source-map "^1.6.0"
+ source-map "^0.7.3"
+
+vary@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
+ integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==
+
+w3c-hr-time@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd"
+ integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==
+ dependencies:
+ browser-process-hrtime "^1.0.0"
+
+w3c-xmlserializer@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a"
+ integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==
+ dependencies:
+ xml-name-validator "^3.0.0"
+
+walker@^1.0.7:
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f"
+ integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==
+ dependencies:
+ makeerror "1.0.12"
+
+warning@^4.0.0, warning@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3"
+ integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==
+ dependencies:
+ loose-envify "^1.0.0"
+
+watchpack@^2.4.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d"
+ integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==
+ dependencies:
+ glob-to-regexp "^0.4.1"
+ graceful-fs "^4.1.2"
+
+wbuf@^1.1.0, wbuf@^1.7.3:
+ version "1.7.3"
+ resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df"
+ integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==
+ dependencies:
+ minimalistic-assert "^1.0.0"
+
+web-vitals@^2.1.0:
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/web-vitals/-/web-vitals-2.1.4.tgz#76563175a475a5e835264d373704f9dde718290c"
+ integrity sha512-sVWcwhU5mX6crfI5Vd2dC4qchyTqxV8URinzt25XqVh+bHEPGH4C3NPrNionCP7Obx59wrYEbNlw4Z8sjALzZg==
+
+webidl-conversions@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad"
+ integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==
+
+webidl-conversions@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff"
+ integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==
+
+webidl-conversions@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514"
+ integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==
+
+webpack-dev-middleware@^5.3.1:
+ version "5.3.3"
+ resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz#efae67c2793908e7311f1d9b06f2a08dcc97e51f"
+ integrity sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==
+ dependencies:
+ colorette "^2.0.10"
+ memfs "^3.4.3"
+ mime-types "^2.1.31"
+ range-parser "^1.2.1"
+ schema-utils "^4.0.0"
+
+webpack-dev-server@^4.6.0:
+ version "4.11.1"
+ resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.11.1.tgz#ae07f0d71ca0438cf88446f09029b92ce81380b5"
+ integrity sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw==
+ dependencies:
+ "@types/bonjour" "^3.5.9"
+ "@types/connect-history-api-fallback" "^1.3.5"
+ "@types/express" "^4.17.13"
+ "@types/serve-index" "^1.9.1"
+ "@types/serve-static" "^1.13.10"
+ "@types/sockjs" "^0.3.33"
+ "@types/ws" "^8.5.1"
+ ansi-html-community "^0.0.8"
+ bonjour-service "^1.0.11"
+ chokidar "^3.5.3"
+ colorette "^2.0.10"
+ compression "^1.7.4"
+ connect-history-api-fallback "^2.0.0"
+ default-gateway "^6.0.3"
+ express "^4.17.3"
+ graceful-fs "^4.2.6"
+ html-entities "^2.3.2"
+ http-proxy-middleware "^2.0.3"
+ ipaddr.js "^2.0.1"
+ open "^8.0.9"
+ p-retry "^4.5.0"
+ rimraf "^3.0.2"
+ schema-utils "^4.0.0"
+ selfsigned "^2.1.1"
+ serve-index "^1.9.1"
+ sockjs "^0.3.24"
+ spdy "^4.0.2"
+ webpack-dev-middleware "^5.3.1"
+ ws "^8.4.2"
+
+webpack-manifest-plugin@^4.0.2:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/webpack-manifest-plugin/-/webpack-manifest-plugin-4.1.1.tgz#10f8dbf4714ff93a215d5a45bcc416d80506f94f"
+ integrity sha512-YXUAwxtfKIJIKkhg03MKuiFAD72PlrqCiwdwO4VEXdRO5V0ORCNwaOwAZawPZalCbmH9kBDmXnNeQOw+BIEiow==
+ dependencies:
+ tapable "^2.0.0"
+ webpack-sources "^2.2.0"
+
+webpack-sources@^1.4.3:
+ version "1.4.3"
+ resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933"
+ integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==
+ dependencies:
+ source-list-map "^2.0.0"
+ source-map "~0.6.1"
+
+webpack-sources@^2.2.0:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-2.3.1.tgz#570de0af163949fe272233c2cefe1b56f74511fd"
+ integrity sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==
+ dependencies:
+ source-list-map "^2.0.1"
+ source-map "^0.6.1"
+
+webpack-sources@^3.2.3:
+ version "3.2.3"
+ resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde"
+ integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==
+
+webpack@^5.64.4:
+ version "5.75.0"
+ resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.75.0.tgz#1e440468647b2505860e94c9ff3e44d5b582c152"
+ integrity sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==
+ dependencies:
+ "@types/eslint-scope" "^3.7.3"
+ "@types/estree" "^0.0.51"
+ "@webassemblyjs/ast" "1.11.1"
+ "@webassemblyjs/wasm-edit" "1.11.1"
+ "@webassemblyjs/wasm-parser" "1.11.1"
+ acorn "^8.7.1"
+ acorn-import-assertions "^1.7.6"
+ browserslist "^4.14.5"
+ chrome-trace-event "^1.0.2"
+ enhanced-resolve "^5.10.0"
+ es-module-lexer "^0.9.0"
+ eslint-scope "5.1.1"
+ events "^3.2.0"
+ glob-to-regexp "^0.4.1"
+ graceful-fs "^4.2.9"
+ json-parse-even-better-errors "^2.3.1"
+ loader-runner "^4.2.0"
+ mime-types "^2.1.27"
+ neo-async "^2.6.2"
+ schema-utils "^3.1.0"
+ tapable "^2.1.1"
+ terser-webpack-plugin "^5.1.3"
+ watchpack "^2.4.0"
+ webpack-sources "^3.2.3"
+
+websocket-driver@>=0.5.1, websocket-driver@^0.7.4:
+ version "0.7.4"
+ resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760"
+ integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==
+ dependencies:
+ http-parser-js ">=0.5.1"
+ safe-buffer ">=5.1.0"
+ websocket-extensions ">=0.1.1"
+
+websocket-extensions@>=0.1.1:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42"
+ integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==
+
+whatwg-encoding@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0"
+ integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==
+ dependencies:
+ iconv-lite "0.4.24"
+
+whatwg-fetch@^3.6.2:
+ version "3.6.2"
+ resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz#dced24f37f2624ed0281725d51d0e2e3fe677f8c"
+ integrity sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==
+
+whatwg-mimetype@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf"
+ integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==
+
+whatwg-url@^7.0.0:
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06"
+ integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==
+ dependencies:
+ lodash.sortby "^4.7.0"
+ tr46 "^1.0.1"
+ webidl-conversions "^4.0.2"
+
+whatwg-url@^8.0.0, whatwg-url@^8.5.0:
+ version "8.7.0"
+ resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77"
+ integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==
+ dependencies:
+ lodash "^4.7.0"
+ tr46 "^2.1.0"
+ webidl-conversions "^6.1.0"
+
+which-boxed-primitive@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6"
+ integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==
+ dependencies:
+ is-bigint "^1.0.1"
+ is-boolean-object "^1.1.0"
+ is-number-object "^1.0.4"
+ is-string "^1.0.5"
+ is-symbol "^1.0.3"
+
+which-collection@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906"
+ integrity sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==
+ dependencies:
+ is-map "^2.0.1"
+ is-set "^2.0.1"
+ is-weakmap "^2.0.1"
+ is-weakset "^2.0.1"
+
+which-typed-array@^1.1.9:
+ version "1.1.9"
+ resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6"
+ integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==
+ dependencies:
+ available-typed-arrays "^1.0.5"
+ call-bind "^1.0.2"
+ for-each "^0.3.3"
+ gopd "^1.0.1"
+ has-tostringtag "^1.0.0"
+ is-typed-array "^1.1.10"
+
+which@^1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
+ integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
+ dependencies:
+ isexe "^2.0.0"
+
+which@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
+ integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
+ dependencies:
+ isexe "^2.0.0"
+
+word-wrap@^1.2.3, word-wrap@~1.2.3:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
+ integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
+
+workbox-background-sync@6.5.4:
+ version "6.5.4"
+ resolved "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-6.5.4.tgz#3141afba3cc8aa2ae14c24d0f6811374ba8ff6a9"
+ integrity sha512-0r4INQZMyPky/lj4Ou98qxcThrETucOde+7mRGJl13MPJugQNKeZQOdIJe/1AchOP23cTqHcN/YVpD6r8E6I8g==
+ dependencies:
+ idb "^7.0.1"
+ workbox-core "6.5.4"
+
+workbox-broadcast-update@6.5.4:
+ version "6.5.4"
+ resolved "https://registry.yarnpkg.com/workbox-broadcast-update/-/workbox-broadcast-update-6.5.4.tgz#8441cff5417cd41f384ba7633ca960a7ffe40f66"
+ integrity sha512-I/lBERoH1u3zyBosnpPEtcAVe5lwykx9Yg1k6f8/BGEPGaMMgZrwVrqL1uA9QZ1NGGFoyE6t9i7lBjOlDhFEEw==
+ dependencies:
+ workbox-core "6.5.4"
+
+workbox-build@6.5.4:
+ version "6.5.4"
+ resolved "https://registry.yarnpkg.com/workbox-build/-/workbox-build-6.5.4.tgz#7d06d31eb28a878817e1c991c05c5b93409f0389"
+ integrity sha512-kgRevLXEYvUW9WS4XoziYqZ8Q9j/2ziJYEtTrjdz5/L/cTUa2XfyMP2i7c3p34lgqJ03+mTiz13SdFef2POwbA==
+ dependencies:
+ "@apideck/better-ajv-errors" "^0.3.1"
+ "@babel/core" "^7.11.1"
+ "@babel/preset-env" "^7.11.0"
+ "@babel/runtime" "^7.11.2"
+ "@rollup/plugin-babel" "^5.2.0"
+ "@rollup/plugin-node-resolve" "^11.2.1"
+ "@rollup/plugin-replace" "^2.4.1"
+ "@surma/rollup-plugin-off-main-thread" "^2.2.3"
+ ajv "^8.6.0"
+ common-tags "^1.8.0"
+ fast-json-stable-stringify "^2.1.0"
+ fs-extra "^9.0.1"
+ glob "^7.1.6"
+ lodash "^4.17.20"
+ pretty-bytes "^5.3.0"
+ rollup "^2.43.1"
+ rollup-plugin-terser "^7.0.0"
+ source-map "^0.8.0-beta.0"
+ stringify-object "^3.3.0"
+ strip-comments "^2.0.1"
+ tempy "^0.6.0"
+ upath "^1.2.0"
+ workbox-background-sync "6.5.4"
+ workbox-broadcast-update "6.5.4"
+ workbox-cacheable-response "6.5.4"
+ workbox-core "6.5.4"
+ workbox-expiration "6.5.4"
+ workbox-google-analytics "6.5.4"
+ workbox-navigation-preload "6.5.4"
+ workbox-precaching "6.5.4"
+ workbox-range-requests "6.5.4"
+ workbox-recipes "6.5.4"
+ workbox-routing "6.5.4"
+ workbox-strategies "6.5.4"
+ workbox-streams "6.5.4"
+ workbox-sw "6.5.4"
+ workbox-window "6.5.4"
+
+workbox-cacheable-response@6.5.4:
+ version "6.5.4"
+ resolved "https://registry.yarnpkg.com/workbox-cacheable-response/-/workbox-cacheable-response-6.5.4.tgz#a5c6ec0c6e2b6f037379198d4ef07d098f7cf137"
+ integrity sha512-DCR9uD0Fqj8oB2TSWQEm1hbFs/85hXXoayVwFKLVuIuxwJaihBsLsp4y7J9bvZbqtPJ1KlCkmYVGQKrBU4KAug==
+ dependencies:
+ workbox-core "6.5.4"
+
+workbox-core@6.5.4:
+ version "6.5.4"
+ resolved "https://registry.yarnpkg.com/workbox-core/-/workbox-core-6.5.4.tgz#df48bf44cd58bb1d1726c49b883fb1dffa24c9ba"
+ integrity sha512-OXYb+m9wZm8GrORlV2vBbE5EC1FKu71GGp0H4rjmxmF4/HLbMCoTFws87M3dFwgpmg0v00K++PImpNQ6J5NQ6Q==
+
+workbox-expiration@6.5.4:
+ version "6.5.4"
+ resolved "https://registry.yarnpkg.com/workbox-expiration/-/workbox-expiration-6.5.4.tgz#501056f81e87e1d296c76570bb483ce5e29b4539"
+ integrity sha512-jUP5qPOpH1nXtjGGh1fRBa1wJL2QlIb5mGpct3NzepjGG2uFFBn4iiEBiI9GUmfAFR2ApuRhDydjcRmYXddiEQ==
+ dependencies:
+ idb "^7.0.1"
+ workbox-core "6.5.4"
+
+workbox-google-analytics@6.5.4:
+ version "6.5.4"
+ resolved "https://registry.yarnpkg.com/workbox-google-analytics/-/workbox-google-analytics-6.5.4.tgz#c74327f80dfa4c1954cbba93cd7ea640fe7ece7d"
+ integrity sha512-8AU1WuaXsD49249Wq0B2zn4a/vvFfHkpcFfqAFHNHwln3jK9QUYmzdkKXGIZl9wyKNP+RRX30vcgcyWMcZ9VAg==
+ dependencies:
+ workbox-background-sync "6.5.4"
+ workbox-core "6.5.4"
+ workbox-routing "6.5.4"
+ workbox-strategies "6.5.4"
+
+workbox-navigation-preload@6.5.4:
+ version "6.5.4"
+ resolved "https://registry.yarnpkg.com/workbox-navigation-preload/-/workbox-navigation-preload-6.5.4.tgz#ede56dd5f6fc9e860a7e45b2c1a8f87c1c793212"
+ integrity sha512-IIwf80eO3cr8h6XSQJF+Hxj26rg2RPFVUmJLUlM0+A2GzB4HFbQyKkrgD5y2d84g2IbJzP4B4j5dPBRzamHrng==
+ dependencies:
+ workbox-core "6.5.4"
+
+workbox-precaching@6.5.4:
+ version "6.5.4"
+ resolved "https://registry.yarnpkg.com/workbox-precaching/-/workbox-precaching-6.5.4.tgz#740e3561df92c6726ab5f7471e6aac89582cab72"
+ integrity sha512-hSMezMsW6btKnxHB4bFy2Qfwey/8SYdGWvVIKFaUm8vJ4E53JAY+U2JwLTRD8wbLWoP6OVUdFlXsTdKu9yoLTg==
+ dependencies:
+ workbox-core "6.5.4"
+ workbox-routing "6.5.4"
+ workbox-strategies "6.5.4"
+
+workbox-range-requests@6.5.4:
+ version "6.5.4"
+ resolved "https://registry.yarnpkg.com/workbox-range-requests/-/workbox-range-requests-6.5.4.tgz#86b3d482e090433dab38d36ae031b2bb0bd74399"
+ integrity sha512-Je2qR1NXCFC8xVJ/Lux6saH6IrQGhMpDrPXWZWWS8n/RD+WZfKa6dSZwU+/QksfEadJEr/NfY+aP/CXFFK5JFg==
+ dependencies:
+ workbox-core "6.5.4"
+
+workbox-recipes@6.5.4:
+ version "6.5.4"
+ resolved "https://registry.yarnpkg.com/workbox-recipes/-/workbox-recipes-6.5.4.tgz#cca809ee63b98b158b2702dcfb741b5cc3e24acb"
+ integrity sha512-QZNO8Ez708NNwzLNEXTG4QYSKQ1ochzEtRLGaq+mr2PyoEIC1xFW7MrWxrONUxBFOByksds9Z4//lKAX8tHyUA==
+ dependencies:
+ workbox-cacheable-response "6.5.4"
+ workbox-core "6.5.4"
+ workbox-expiration "6.5.4"
+ workbox-precaching "6.5.4"
+ workbox-routing "6.5.4"
+ workbox-strategies "6.5.4"
+
+workbox-routing@6.5.4:
+ version "6.5.4"
+ resolved "https://registry.yarnpkg.com/workbox-routing/-/workbox-routing-6.5.4.tgz#6a7fbbd23f4ac801038d9a0298bc907ee26fe3da"
+ integrity sha512-apQswLsbrrOsBUWtr9Lf80F+P1sHnQdYodRo32SjiByYi36IDyL2r7BH1lJtFX8fwNHDa1QOVY74WKLLS6o5Pg==
+ dependencies:
+ workbox-core "6.5.4"
+
+workbox-strategies@6.5.4:
+ version "6.5.4"
+ resolved "https://registry.yarnpkg.com/workbox-strategies/-/workbox-strategies-6.5.4.tgz#4edda035b3c010fc7f6152918370699334cd204d"
+ integrity sha512-DEtsxhx0LIYWkJBTQolRxG4EI0setTJkqR4m7r4YpBdxtWJH1Mbg01Cj8ZjNOO8etqfA3IZaOPHUxCs8cBsKLw==
+ dependencies:
+ workbox-core "6.5.4"
+
+workbox-streams@6.5.4:
+ version "6.5.4"
+ resolved "https://registry.yarnpkg.com/workbox-streams/-/workbox-streams-6.5.4.tgz#1cb3c168a6101df7b5269d0353c19e36668d7d69"
+ integrity sha512-FXKVh87d2RFXkliAIheBojBELIPnWbQdyDvsH3t74Cwhg0fDheL1T8BqSM86hZvC0ZESLsznSYWw+Va+KVbUzg==
+ dependencies:
+ workbox-core "6.5.4"
+ workbox-routing "6.5.4"
+
+workbox-sw@6.5.4:
+ version "6.5.4"
+ resolved "https://registry.yarnpkg.com/workbox-sw/-/workbox-sw-6.5.4.tgz#d93e9c67924dd153a61367a4656ff4d2ae2ed736"
+ integrity sha512-vo2RQo7DILVRoH5LjGqw3nphavEjK4Qk+FenXeUsknKn14eCNedHOXWbmnvP4ipKhlE35pvJ4yl4YYf6YsJArA==
+
+workbox-webpack-plugin@^6.4.1:
+ version "6.5.4"
+ resolved "https://registry.yarnpkg.com/workbox-webpack-plugin/-/workbox-webpack-plugin-6.5.4.tgz#baf2d3f4b8f435f3469887cf4fba2b7fac3d0fd7"
+ integrity sha512-LmWm/zoaahe0EGmMTrSLUi+BjyR3cdGEfU3fS6PN1zKFYbqAKuQ+Oy/27e4VSXsyIwAw8+QDfk1XHNGtZu9nQg==
+ dependencies:
+ fast-json-stable-stringify "^2.1.0"
+ pretty-bytes "^5.4.1"
+ upath "^1.2.0"
+ webpack-sources "^1.4.3"
+ workbox-build "6.5.4"
+
+workbox-window@6.5.4:
+ version "6.5.4"
+ resolved "https://registry.yarnpkg.com/workbox-window/-/workbox-window-6.5.4.tgz#d991bc0a94dff3c2dbb6b84558cff155ca878e91"
+ integrity sha512-HnLZJDwYBE+hpG25AQBO8RUWBJRaCsI9ksQJEp3aCOFCaG5kqaToAYXFRAHxzRluM2cQbGzdQF5rjKPWPA1fug==
+ dependencies:
+ "@types/trusted-types" "^2.0.2"
+ workbox-core "6.5.4"
+
+wrap-ansi@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
+ integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
+ dependencies:
+ ansi-styles "^4.0.0"
+ string-width "^4.1.0"
+ strip-ansi "^6.0.0"
+
+wrappy@1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+ integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
+
+write-file-atomic@^3.0.0:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8"
+ integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==
+ dependencies:
+ imurmurhash "^0.1.4"
+ is-typedarray "^1.0.0"
+ signal-exit "^3.0.2"
+ typedarray-to-buffer "^3.1.5"
+
+ws@^7.4.6:
+ version "7.5.9"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591"
+ integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==
+
+ws@^8.4.2:
+ version "8.12.0"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-8.12.0.tgz#485074cc392689da78e1828a9ff23585e06cddd8"
+ integrity sha512-kU62emKIdKVeEIOIKVegvqpXMSTAMLJozpHZaJNDYqBjzlSYXQGviYwN1osDLJ9av68qHd4a2oSjd7yD4pacig==
+
+xml-name-validator@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a"
+ integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==
+
+xmlchars@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb"
+ integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==
+
+xtend@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
+ integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
+
+y18n@^5.0.5:
+ version "5.0.8"
+ resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"
+ integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==
+
+yallist@^3.0.2:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
+ integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
+
+yallist@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
+ integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
+
+yaml@^1.10.0, yaml@^1.10.2, yaml@^1.7.2:
+ version "1.10.2"
+ resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b"
+ integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==
+
+yargs-parser@^20.2.2:
+ version "20.2.9"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee"
+ integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==
+
+yargs@^16.2.0:
+ version "16.2.0"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66"
+ integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==
+ dependencies:
+ cliui "^7.0.2"
+ escalade "^3.1.1"
+ get-caller-file "^2.0.5"
+ require-directory "^2.1.1"
+ string-width "^4.2.0"
+ y18n "^5.0.5"
+ yargs-parser "^20.2.2"
+
+yocto-queue@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
+ integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
diff --git a/permissions/__init__.py b/permissions/__init__.py
new file mode 100644
index 0000000..a0a5d82
--- /dev/null
+++ b/permissions/__init__.py
@@ -0,0 +1,36 @@
+"""
+The ``permissions`` package contains code to start a Permissions
+server, used by Beacons.
+
+"""
+
+__title__ = 'Permissions for Beacon v2.0'
+__version__ = '1.0'
+__author__ = 'CRG developers'
+__license__ = 'Apache 2.0'
+__copyright__ = 'Permissions for Beacon 2.0 @ CRG, Barcelona'
+
+import sys
+if sys.version_info < (3, 7):
+ print("this package requires python 3.7 or higher", file=sys.stderr)
+ sys.exit(1)
+
+# Send warnings using the package warnings to the logging system
+# The warnings are logged to a logger named 'py.warnings' with a severity of WARNING.
+# See: https://docs.python.org/3/library/logging.html#integration-with-the-warnings-module
+import logging
+import warnings
+logging.captureWarnings(True)
+warnings.simplefilter("default") # do not ignore Deprecation Warnings
+
+
+from logging.config import dictConfig
+from pathlib import Path
+import yaml
+
+def load_logger():
+ # Configure the logging
+ log_file = Path(__file__).parent / "logger.yml"
+ if log_file.exists():
+ with open(log_file, 'r') as stream:
+ dictConfig(yaml.safe_load(stream))
diff --git a/permissions/__main__.py b/permissions/__main__.py
new file mode 100644
index 0000000..e6ad0a9
--- /dev/null
+++ b/permissions/__main__.py
@@ -0,0 +1,79 @@
+"""
+Dummy permissions server
+
+We hard-code the dataset permissions.
+
+"""
+import logging
+from typing import Optional
+
+from aiohttp import web
+from aiohttp.web import FileField
+from aiohttp.web_request import Request
+
+from . import load_logger
+from .auth import bearer_required
+# update that line to use your prefered permissions plugin
+from .plugins import DummyPermissions as PermissionsProxy
+
+LOG = logging.getLogger(__name__)
+
+@bearer_required
+async def permission(request: Request, username: Optional[str]):
+
+ if request.headers.get('Content-Type') == 'application/json':
+ post_data = await request.json()
+ else:
+ post_data = await request.post()
+ LOG.debug('POST DATA: %s', post_data)
+
+ v = post_data.get('datasets')
+ if v is None:
+ requested_datasets = []
+ elif isinstance(v, list):
+ requested_datasets = v
+ elif isinstance(v, FileField):
+ requested_datasets = []
+ else:
+ requested_datasets = v.split(sep=',') # type: ignore
+
+ LOG.debug('requested datasets: %s', requested_datasets)
+ datasets = await request.app['permissions'].get(username, requested_datasets=requested_datasets)
+ LOG.debug('selected datasets: %s', datasets)
+
+ return web.json_response(list(datasets or [])) # cuz python-json doesn't like sets
+
+async def initialize(app):
+ """Initialize server."""
+ app['permissions'] = PermissionsProxy()
+ await app['permissions'].initialize()
+ LOG.info("Initialization done.")
+
+async def destroy(app):
+ """Upon server close, close the DB connections."""
+ LOG.info("Shutting down.")
+ await app['permissions'].close()
+
+
+def main(path=None):
+
+ load_logger()
+
+ # Configure the permissions server
+ server = web.Application()
+ server.on_startup.append(initialize)
+ server.on_cleanup.append(destroy)
+
+ # Configure the endpoints
+ server.add_routes([web.post('/', permission)]) # type: ignore
+
+ web.run_app(server,
+ host='0.0.0.0',
+ port=5051,
+ shutdown_timeout=0, ssl_context=None)
+
+
+if __name__ == '__main__':
+ main()
+
+
diff --git a/permissions/auth.py b/permissions/auth.py
new file mode 100644
index 0000000..e8827b9
--- /dev/null
+++ b/permissions/auth.py
@@ -0,0 +1,79 @@
+"""
+Authentication / Token resolver
+
+If the access token is a JWT token, and the verification key is loaded,
+we could attempt to verify its signature, and avoid a round-trip to the IdP endpoint.
+If not, we can't avoid the round-trip and that'll resolve whether the access token is
+valid.
+
+For this implementation, we only implement contacting the userinfo endpoint.
+No JWT signature verification.
+"""
+
+import logging
+
+from aiohttp import ClientSession, BasicAuth, FormData
+from aiohttp import web
+
+LOG = logging.getLogger(__name__)
+
+idp_client_id = 'permissions'
+idp_client_secret = 'c0285717-1bfb-4b32-b01d-d663470ce7c4'
+idp_user_info = 'http://idp:8080/auth/realms/Beacon/protocol/openid-connect/userinfo'
+idp_introspection = 'http://idp:8080/auth/realms/Beacon/protocol/openid-connect/token/introspect'
+
+async def get_user_info(access_token):
+ '''
+ We use the access_token to get the user info.
+ On failure (ie an invalid token), we try to get an explanation.
+ '''
+ LOG.debug('Token: %s', access_token)
+
+ user = None
+ async with ClientSession() as session:
+ headers = { 'Accept': 'application/json', 'Authorization': 'Bearer ' + access_token }
+ LOG.debug('Contacting %s', idp_user_info)
+ async with session.get(idp_user_info, headers=headers) as resp:
+ # LOG.debug('Response %s', resp)
+ if resp.status == 200:
+ user = await resp.json()
+ return user
+ else:
+ content = await resp.text()
+ LOG.error('Content: %s', content)
+
+ # Invalid access token
+ LOG.error('Invalid token')
+ async with ClientSession() as session:
+ async with session.post(idp_introspection,
+ auth=BasicAuth(idp_client_id, password=idp_client_secret),
+ data=FormData({ 'token': access_token, 'token_type_hint': 'access_token' }, charset='UTF-8')
+ ) as resp:
+ LOG.debug('Response %s', resp.status)
+ #LOG.debug('Response %s', resp)
+ content = await resp.text()
+ LOG.debug('Content: %s', content)
+ raise web.HTTPUnauthorized()
+
+
+
+def bearer_required(func):
+
+ async def decorated(request):
+
+ auth = request.headers.get('Authorization')
+ if not auth or not auth.lower().startswith('bearer '):
+ raise web.HTTPUnauthorized()
+
+ access_token = auth[7:].strip() # 7 = len('Bearer ')
+
+ # We make a round-trip to the userinfo. We might not have a JWT token.
+ user = await get_user_info(access_token)
+ LOG.info('The user is: %r', user)
+ if user is None:
+ raise web.HTTPUnauthorized()
+ username = user.get('preferred_username')
+ LOG.debug('username: %s', username)
+
+ return await func(request, username)
+ return decorated
diff --git a/permissions/plugins.py b/permissions/plugins.py
new file mode 100644
index 0000000..73e269d
--- /dev/null
+++ b/permissions/plugins.py
@@ -0,0 +1,96 @@
+import logging
+import asyncpg
+from asyncpg import Pool
+from typing import Dict, Optional
+
+from beacon.utils.json import json_decoder, json_encoder
+
+LOG = logging.getLogger(__name__)
+
+class Permissions():
+ """Base class, just to agree on the interface."""
+ def __init__(self, *args, **kwargs):
+ pass
+
+ async def initialize(self):
+ raise NotImplementedError('Overload this function in a subclass')
+
+ async def get(self, username, requested_datasets=None):
+ """Return an iterable for the granted datasets for the given username and within a requested list of datasets."""
+ raise NotImplementedError('Overload this function in a subclass')
+
+ async def close(self):
+ raise NotImplementedError('Overload this function in a subclass')
+
+
+
+class DummyPermissions(Permissions):
+ """
+ Dummy permissions plugin
+
+ We hard-code the dataset permissions.
+ """
+
+ db: Dict = {}
+
+ def __init__(self, *args, **kwargs):
+ # Dummy permission database
+ self.db = {
+ "john": ["GiaB", "dataset-registered", "dataset-controlled"],
+ "jane": ["GiaB", "dataset-registered"],
+ }
+
+ async def initialize(self):
+ pass
+
+ async def get(self, username, requested_datasets=None):
+ datasets = set(self.db.get(username))
+ if requested_datasets:
+ return set(requested_datasets).intersection(datasets)
+ else:
+ return datasets
+
+ async def close(self):
+ pass
+
+
+class PostgresPermissions(Permissions):
+ """
+ Postgres permissions plugin
+
+ """
+ db: Optional[Pool] = None
+ args = []
+ kwargs = {}
+
+ def __init__(self, *args, **kwargs):
+ LOG.info("Creating a connection pool with %s and %s", args, kwargs)
+ self.args = args
+ self.kwargs = kwargs
+
+ async def initialize(self):
+ import asyncpg
+ # Connection pool handles reconnections and keeps some expensive connections open for reuse
+ self.db = await asyncpg.create_pool(*self.args, **self.kwargs)
+
+
+ async def get(self, username, requested_datasets=None):
+ try:
+ assert(self.db is not None)
+ async with self.db.acquire() as conn:
+ await conn.set_type_codec('jsonb', encoder=json_encoder, decoder=json_decoder, schema='pg_catalog')
+ query = "SELECT dataset FROM datasets where username = $1 and datasets IN $2;"
+ response = await conn.fetch(query, username, requested_datasets)
+ return [r['dataset'] async for r in response]
+ except (asyncpg.exceptions._base.InterfaceError,
+ asyncpg.exceptions._base.PostgresError,
+ asyncpg.exceptions.UndefinedFunctionError) as e:
+ LOG.error('DB Error: %s', e)
+ return None
+
+ async def close(self):
+ """Close DB Connection."""
+ LOG.debug("Closing the database")
+ if self.db:
+ self.db.terminate()
+ self.db = None
diff --git a/requirements.txt b/requirements.txt
new file mode 100644
index 0000000..a989dd9
--- /dev/null
+++ b/requirements.txt
@@ -0,0 +1,25 @@
+# I noticed a misbehaviour with 3.7.2 regarding cookie storage for raised HTTP response
+# That's the case for the HTTPFound redirections
+# It seems the cookies are not sent in the response, and therefore, the browser does not store them
+# Obviously, sessions do not work then, and Openid Connect auth.py code is broken
+aiohttp==3.8.1
+aiohttp-cors==0.7.0
+asyncpg~=0.24.0
+pyyaml~=5.4.1
+cryptography~=35.0.0
+jinja2~=3.0.2
+#aiohttp_csrf
+pymongo~=4.0.1
+aiohttp-jinja2~=1.5
+aiohttp-session~=2.9.0
+dataclasses-json~=0.5.6
+StrEnum~=0.4.7 # Only until Python 3.11 is released (we can use the built-in StrEnum)
+owlready2~=0.36
+tqdm~=4.62.3
+pydantic~=1.9.0
+pyhumps
+progressbar~=2.5
+fastobo~=0.11.1
+networkx~=2.7.1
+pronto~=2.4.4
+requests
diff --git a/tests/init.bash b/tests/init.bash
new file mode 100644
index 0000000..db69fc9
--- /dev/null
+++ b/tests/init.bash
@@ -0,0 +1 @@
+BEACON_URL=${BEACON_URL:-"http://localhost:5050"}
diff --git a/tests/post.bats b/tests/post.bats
new file mode 100644
index 0000000..ab8edd6
--- /dev/null
+++ b/tests/post.bats
@@ -0,0 +1,45 @@
+
+load init
+
+@test "POST - All individuals" {
+
+ name="all-individuals"
+ query="${BEACON_URL}/api/individuals/"
+ request="requests/${name}.json"
+ response="responses/${name}.json"
+
+ echo "http POST $query --json < $request > ${BATS_TMPDIR}/${name}.json"
+ http POST $query --json < $request | jq -S > "${BATS_TMPDIR}/${name}.json"
+ run diff "${BATS_TMPDIR}/${name}.json" "${response}"
+
+ [[ "$status" -eq 0 ]]
+}
+
+@test "POST - Individual NA24631" {
+
+ name="individual-NA24631"
+ query="${BEACON_URL}/api/individuals/NA24631/"
+ request="requests/${name}.json"
+ response="responses/${name}.json"
+
+ echo "http POST $query --json < $request > ${BATS_TMPDIR}/${name}.json"
+ http POST $query --json < $request | jq -S > "${BATS_TMPDIR}/${name}.json"
+ run diff "${BATS_TMPDIR}/${name}.json" "${response}"
+
+ [[ "$status" -eq 0 ]]
+}
+
+
+@test "Filters - Ontology Filter: Geographic Origin" {
+
+ name="geographic-origin"
+ query="${BEACON_URL}/api/individuals/"
+ request="requests/${name}.json"
+ response="responses/${name}.json"
+
+ echo "http POST $query --json < $request > ${BATS_TMPDIR}/${name}.json"
+ http POST $query --json < $request | jq -S > "${BATS_TMPDIR}/${name}.json"
+ run diff "${BATS_TMPDIR}/${name}.json" "${response}"
+
+ [[ "$status" -eq 0 ]]
+}
diff --git a/tests/requests/all-individuals.json b/tests/requests/all-individuals.json
new file mode 100644
index 0000000..401e33f
--- /dev/null
+++ b/tests/requests/all-individuals.json
@@ -0,0 +1,17 @@
+{
+ "$schema": "https://raw.githubusercontent.com/MrRobb/beacon-framework-v2/main/requests/beaconRequestBody.json",
+ "meta": {
+ "apiVersion": "2.0",
+ "requestedSchemas": [{ "entityType": "EntryTypeA", "schema": "entry-typeA-schema-v0.1" }]
+ },
+ "query": {
+ "filters": [],
+ "includeResultsetResponses": "HIT",
+ "pagination": {
+ "skip": 0,
+ "limit": 10
+ },
+ "testMode": false,
+ "requestedGranularity": "record"
+ }
+}
\ No newline at end of file
diff --git a/tests/requests/descendants.json b/tests/requests/descendants.json
new file mode 100644
index 0000000..46b4592
--- /dev/null
+++ b/tests/requests/descendants.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://raw.githubusercontent.com/MrRobb/beacon-framework-v2/main/requests/beaconRequestBody.json",
+ "meta": {
+ "apiVersion": "2.0"
+ },
+ "query": {
+ "filters": [
+ {
+ "id": "UBERON:0000178",
+ "includeDescendantTerms": true
+ }
+ ],
+ "includeResultsetResponses": "HIT",
+ "pagination": {
+ "skip": 0,
+ "limit": 100
+ },
+ "testMode": false,
+ "requestedGranularity": "count"
+ }
+}
\ No newline at end of file
diff --git a/tests/requests/geographic-origin.json b/tests/requests/geographic-origin.json
new file mode 100644
index 0000000..d2262fd
--- /dev/null
+++ b/tests/requests/geographic-origin.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://raw.githubusercontent.com/MrRobb/beacon-framework-v2/main/requests/beaconRequestBody.json",
+ "meta": {
+ "apiVersion": "2.0",
+ "requestedSchemas": [{ "entityType": "EntryTypeA", "schema": "entry-typeA-schema-v0.1" }]
+ },
+ "query": {
+ "filters": [
+ {
+ "id": "HP:000054",
+ "scope": "individual"
+ }
+ ],
+ "includeResultsetResponses": "HIT",
+ "pagination": {
+ "skip": 0,
+ "limit": 10
+ },
+ "testMode": false,
+ "requestedGranularity": "boolean"
+ }
+}
diff --git a/tests/requests/individual-NA24631.json b/tests/requests/individual-NA24631.json
new file mode 100644
index 0000000..7fc56ad
--- /dev/null
+++ b/tests/requests/individual-NA24631.json
@@ -0,0 +1,10 @@
+{
+ "$schema": "https://raw.githubusercontent.com/MrRobb/beacon-framework-v2/main/requests/beaconRequestBody.json",
+ "meta": {
+ "apiVersion": "2.0",
+ "requestedSchemas": [{ "entityType": "EntryTypeA", "schema": "entry-typeA-schema-v0.1" }]
+ },
+ "query": {
+ "requestedGranularity": "record"
+ }
+}
\ No newline at end of file
diff --git a/tests/responses/all-individuals.json b/tests/responses/all-individuals.json
new file mode 100644
index 0000000..69238f2
--- /dev/null
+++ b/tests/responses/all-individuals.json
@@ -0,0 +1,157 @@
+{
+ "beaconHandovers": [
+ {
+ "handoverType": {
+ "id": "CUSTOM",
+ "label": "Project description"
+ },
+ "note": "Project description",
+ "url": "https://www.nist.gov/programs-projects/genome-bottle"
+ }
+ ],
+ "meta": {
+ "apiVersion": "v2.0.0",
+ "beaconId": "org.ega-archive.ga4gh-approval-beacon-test",
+ "receivedRequestSummary": {
+ "apiVersion": "2.0",
+ "filters": [],
+ "includeResultsetResponses": "HIT",
+ "pagination": {
+ "limit": 10,
+ "skip": 0
+ },
+ "requestParameters": {},
+ "requestedGranularity": "boolean",
+ "requestedSchemas": [
+ {
+ "entityType": "EntryTypeA",
+ "schema": "entry-typeA-schema-v0.1"
+ }
+ ],
+ "testMode": false
+ },
+ "returnedGranularity": "record",
+ "returnedSchemas": [
+ "beacon-individual-v2.0.0"
+ ]
+ },
+ "response": {
+ "resultSets": [
+ {
+ "exists": true,
+ "id": "",
+ "results": [
+ {
+ "_id": {
+ "$oid": "61a5318a6a6a2f4fe57e7e25"
+ },
+ "diseases": [
+ {
+ "diseaseCode": {
+ "id": "HP:000054",
+ "label": "intolerance"
+ }
+ }
+ ],
+ "ethnicity": {
+ "id": "HANCESTRO:0021",
+ "label": "Han Chinese"
+ },
+ "geographicOrigin": {
+ "id": "GAZ:00002459",
+ "label": "United States of America"
+ },
+ "id": "NA24631",
+ "phenotypicFeatures": [
+ {
+ "featureType": {
+ "id": "NCIT:C3001",
+ "label": "NCIT:C3001"
+ }
+ }
+ ],
+ "sex": {
+ "id": "NCIT:C46112",
+ "label": "male"
+ }
+ },
+ {
+ "_id": {
+ "$oid": "61a5318a6a6a2f4fe57e7e26"
+ },
+ "diseases": [
+ {
+ "diseaseCode": {
+ "id": "HP:0008711",
+ "label": "prostatic hyperplasia"
+ }
+ }
+ ],
+ "ethnicity": {
+ "id": "HANCESTRO:0021",
+ "label": "Han Chinese"
+ },
+ "geographicOrigin": {
+ "id": "GAZ:00002459",
+ "label": "United States of America"
+ },
+ "id": "NA24694",
+ "phenotypicFeatures": [
+ {
+ "featureType": {
+ "id": "NCIT:C37967",
+ "label": "NCIT:C37967"
+ }
+ }
+ ],
+ "sex": {
+ "id": "NCIT:C46112",
+ "label": "male"
+ }
+ },
+ {
+ "_id": {
+ "$oid": "61a5318a6a6a2f4fe57e7e27"
+ },
+ "diseases": [
+ {
+ "diseaseCode": {
+ "id": "DOID:6364",
+ "label": "migraine"
+ }
+ }
+ ],
+ "ethnicity": {
+ "id": "HANCESTRO:0021",
+ "label": "Han Chinese"
+ },
+ "geographicOrigin": {
+ "id": "GAZ:00002459",
+ "label": "United States of America"
+ },
+ "id": "NA24695",
+ "phenotypicFeatures": [
+ {
+ "featureType": {
+ "id": "HP:0000938",
+ "label": "HP:0000938"
+ }
+ }
+ ],
+ "sex": {
+ "id": "NCIT:C16576",
+ "label": "female"
+ }
+ }
+ ],
+ "resultsCount": 3,
+ "resultsHandover": null,
+ "setType": ""
+ }
+ ]
+ },
+ "responseSummary": {
+ "exists": true,
+ "numTotalResults": 3
+ }
+}
diff --git a/tests/responses/geographic-origin.json b/tests/responses/geographic-origin.json
new file mode 100644
index 0000000..81de8c0
--- /dev/null
+++ b/tests/responses/geographic-origin.json
@@ -0,0 +1,94 @@
+{
+ "beaconHandovers": [
+ {
+ "handoverType": {
+ "id": "CUSTOM",
+ "label": "Project description"
+ },
+ "note": "Project description",
+ "url": "https://www.nist.gov/programs-projects/genome-bottle"
+ }
+ ],
+ "meta": {
+ "apiVersion": "v2.0.0",
+ "beaconId": "org.ega-archive.ga4gh-approval-beacon-test",
+ "receivedRequestSummary": {
+ "apiVersion": "2.0",
+ "filters": [
+ {
+ "id": "HP:000054",
+ "scope": "individual"
+ }
+ ],
+ "includeResultsetResponses": "HIT",
+ "pagination": {
+ "limit": 10,
+ "skip": 0
+ },
+ "requestParameters": {},
+ "requestedGranularity": "boolean",
+ "requestedSchemas": [
+ {
+ "entityType": "EntryTypeA",
+ "schema": "entry-typeA-schema-v0.1"
+ }
+ ],
+ "testMode": false
+ },
+ "returnedGranularity": "record",
+ "returnedSchemas": [
+ "beacon-individual-v2.0.0"
+ ]
+ },
+ "response": {
+ "resultSets": [
+ {
+ "exists": true,
+ "id": "",
+ "results": [
+ {
+ "_id": {
+ "$oid": "61a5318a6a6a2f4fe57e7e25"
+ },
+ "diseases": [
+ {
+ "diseaseCode": {
+ "id": "HP:000054",
+ "label": "intolerance"
+ }
+ }
+ ],
+ "ethnicity": {
+ "id": "HANCESTRO:0021",
+ "label": "Han Chinese"
+ },
+ "geographicOrigin": {
+ "id": "GAZ:00002459",
+ "label": "United States of America"
+ },
+ "id": "NA24631",
+ "phenotypicFeatures": [
+ {
+ "featureType": {
+ "id": "NCIT:C3001",
+ "label": "NCIT:C3001"
+ }
+ }
+ ],
+ "sex": {
+ "id": "NCIT:C46112",
+ "label": "male"
+ }
+ }
+ ],
+ "resultsCount": 1,
+ "resultsHandover": null,
+ "setType": ""
+ }
+ ]
+ },
+ "responseSummary": {
+ "exists": true,
+ "numTotalResults": 1
+ }
+}
diff --git a/tests/responses/individual-NA24631.json b/tests/responses/individual-NA24631.json
new file mode 100644
index 0000000..68a198b
--- /dev/null
+++ b/tests/responses/individual-NA24631.json
@@ -0,0 +1,89 @@
+{
+ "beaconHandovers": [
+ {
+ "handoverType": {
+ "id": "CUSTOM",
+ "label": "Project description"
+ },
+ "note": "Project description",
+ "url": "https://www.nist.gov/programs-projects/genome-bottle"
+ }
+ ],
+ "meta": {
+ "apiVersion": "v2.0.0",
+ "beaconId": "org.ega-archive.ga4gh-approval-beacon-test",
+ "receivedRequestSummary": {
+ "apiVersion": "2.0",
+ "filters": [],
+ "includeResultsetResponses": "HIT",
+ "pagination": {
+ "limit": 10,
+ "skip": 0
+ },
+ "requestParameters": {},
+ "requestedGranularity": "record",
+ "requestedSchemas": [
+ {
+ "entityType": "EntryTypeA",
+ "schema": "entry-typeA-schema-v0.1"
+ }
+ ],
+ "testMode": false
+ },
+ "returnedGranularity": "record",
+ "returnedSchemas": [
+ "beacon-individual-v2.0.0"
+ ]
+ },
+ "response": {
+ "resultSets": [
+ {
+ "exists": true,
+ "id": "",
+ "results": [
+ {
+ "_id": {
+ "$oid": "61a5318a6a6a2f4fe57e7e25"
+ },
+ "diseases": [
+ {
+ "diseaseCode": {
+ "id": "HP:000054",
+ "label": "intolerance"
+ }
+ }
+ ],
+ "ethnicity": {
+ "id": "HANCESTRO:0021",
+ "label": "Han Chinese"
+ },
+ "geographicOrigin": {
+ "id": "GAZ:00002459",
+ "label": "United States of America"
+ },
+ "id": "NA24631",
+ "phenotypicFeatures": [
+ {
+ "featureType": {
+ "id": "NCIT:C3001",
+ "label": "NCIT:C3001"
+ }
+ }
+ ],
+ "sex": {
+ "id": "NCIT:C46112",
+ "label": "male"
+ }
+ }
+ ],
+ "resultsCount": 1,
+ "resultsHandover": null,
+ "setType": ""
+ }
+ ]
+ },
+ "responseSummary": {
+ "exists": true,
+ "numTotalResults": 1
+ }
+}
diff --git a/tests/test.sh b/tests/test.sh
new file mode 100644
index 0000000..8c9ffdd
--- /dev/null
+++ b/tests/test.sh
@@ -0,0 +1 @@
+bats filters.bats
\ No newline at end of file
diff --git a/ui/static/css/error.css b/ui/static/css/error.css
new file mode 100644
index 0000000..dfb5fcd
--- /dev/null
+++ b/ui/static/css/error.css
@@ -0,0 +1,2 @@
+body{font-family:Roboto,Helvetica Neue,Arial,sans-serif;font-size:16px;color:#5e5e5e;line-height:1.4;width:960px;margin:0 auto}h1{color:#ee6d52;padding-top:20rem;text-align:center;position:relative;background-position:top;background-repeat:no-repeat;background-color:transparent;background-image:url("data:image/svg+xml;charset=utf-8;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzOTYuNjEiIGhlaWdodD0iMjcyLjUyIiB2aWV3Qm94PSIwIDAgMzk2LjYxIDI3Mi41MiI+DQogIDxkZWZzPg0KICAgIDxzdHlsZT4NCiAgICAgIC5jbHMtMSB7DQogICAgICAgIGlzb2xhdGlvbjogaXNvbGF0ZTsNCiAgICAgIH0NCg0KICAgICAgLmNscy0yIHsNCiAgICAgICAgZmlsbDogI2YxZjJmMjsNCiAgICAgIH0NCg0KICAgICAgLmNscy0zIHsNCiAgICAgICAgZmlsbDogI2ZkYTsNCiAgICAgIH0NCg0KICAgICAgLmNscy00IHsNCiAgICAgICAgZmlsbDogIzBiMTAwZjsNCiAgICAgIH0NCg0KICAgICAgLmNscy01IHsNCiAgICAgICAgZmlsbDogI2ZjZjVkZTsNCiAgICAgIH0NCg0KICAgICAgLmNscy02IHsNCiAgICAgICAgZmlsbDogI2ZjYWMzYjsNCiAgICAgIH0NCg0KICAgICAgLmNscy03IHsNCiAgICAgICAgZmlsbDogI2VmNmU1MzsNCiAgICAgIH0NCg0KICAgICAgLmNscy04LCAuY2xzLTkgew0KICAgICAgICBmaWxsOiAjMmFhOGJhOw0KICAgICAgfQ0KDQogICAgICAuY2xzLTkgew0KICAgICAgICBtaXgtYmxlbmQtbW9kZTogbXVsdGlwbHk7DQogICAgICB9DQogICAgPC9zdHlsZT4NCiAgPC9kZWZzPg0KICA8dGl0bGU+R2VQaEV4IEVycm9yPC90aXRsZT4NCiAgPGcgY2xhc3M9ImNscy0xIj4NCiAgICA8ZyBpZD0iQ2FwYV8xIiBkYXRhLW5hbWU9IkNhcGEgMSI+DQogICAgICA8ZWxsaXBzZSBjbGFzcz0iY2xzLTIiIGN4PSIxMjcuMTMiIGN5PSIyNjAuNjgiIHJ4PSI4Ni4zNSIgcnk9IjExLjgzIi8+DQogICAgICA8cGF0aCBjbGFzcz0iY2xzLTMiIGQ9Ik0xNzMuNzIsODYuNTFDMTUwLjIsNDMuNDQsNzkuNjMsNzQuNyw3OS42Myw3NC43Yy00My44LDE2LjM4LTIyLjcxLDYwLjYxLTIyLjcxLDYwLjYxbDEuNTcsNC41M2MtNC4yNy0uMTQtNy44NywxLjg4LTguNSw1LS43MywzLjcsMi44OCw3LjU1LDguMDgsOC42YTEyLjQ4LDEyLjQ4LDAsMCwwLDUuMTcsMGwzLjQxLDkuNzljODAuMzEsMTguOTMsMTE5LjI0LDcuNTIsMTE5LjI0LDcuNTJDMTkyLjM4LDEyMi42OCwxNzMuNzIsODYuNTEsMTczLjcyLDg2LjUxWiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAtNjMuNzQpIi8+DQogICAgICA8cGF0aCBjbGFzcz0iY2xzLTQiIGQ9Ik0xNzMuNzIsODYuNTFDMTUwLjIsNDMuNDQsNzkuNjMsNzQuNyw3OS42Myw3NC43Yy00My44LDE2LjM4LTIyLjcxLDYwLjYxLTIyLjcxLDYwLjYxbDEuNTcsNC41M1M3OCwxMjYuMyw3My4xNCw5NS4xOGMwLDAsNjAuNDMtMy4yOCw3Ny40Ny0yMi45NCwwLDAsOS41Mi41OCwyMy42MiwxNS4zMWgwQzE3My45MSw4Ni44NywxNzMuNzIsODYuNTEsMTczLjcyLDg2LjUxWiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAtNjMuNzQpIi8+DQogICAgICA8ZWxsaXBzZSBjbGFzcz0iY2xzLTQiIGN4PSIxMTYuNTQiIGN5PSI1Mi43MyIgcng9IjQuMDYiIHJ5PSI0LjEiLz4NCiAgICAgIDxlbGxpcHNlIGNsYXNzPSJjbHMtNCIgY3g9IjE2MS41MiIgY3k9IjQzLjcyIiByeD0iNC4wNiIgcnk9IjQuMSIvPg0KICAgICAgPHBhdGggY2xhc3M9ImNscy01IiBkPSJNMTM4LjQ0LDEzNi4xM2EyMi4xNSwyMi4xNSwwLDAsMCwxOS0xLjY0czQuMDksMjEuMy03LjI3LDIyLjczQzE1MC4yLDE1Ny4yMiwxMzgsMTU3LDEzOC40NCwxMzYuMTNaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIC02My43NCkiLz4NCiAgICAgIDxwYXRoIGNsYXNzPSJjbHMtNiIgZD0iTTIzNC41MSwxNjUuNjVzLTE3LjcyLDMuNjItMjIuMDYsMi4xMWMwLDAsMy4xOSwxMi42Ny0zLjc4LDE1LjEzLDAsMC0xNi44Myw0LjkyLTIyLjc4LTEyLjEyLDAsMC0zOC45MywxMS40MS0xMTkuMjQtNy41MiwwLDAtNDUuNDIsMTAuNC02Miw0Ni43MiwwLDAsMTUsNC43OSwyMC40MSwxMS4wNywwLDAsMTEuMi0xOC41NCwyOC4xLTIxLjg3QzQ5LjQyLDIxNiw0OSwyMzUuNzYsNjAsMjUxLjkxbC0uMjQuMDdzMTkuOSw2NC4wNywyNS41Niw2OS4zOWMwLDAsNS41Nyw2LjEzLDE2LjY3LDIuODUsMCwwLDEzLjA5LTIuNzEsMTEuNzQtMTAuNjMsMCwwLTIuMTUtMTQuOTQtMTEuMjEtNDdhMTA0LjQyLDEwNC40MiwwLDAsMCwxNy43NC0uMWMzLjA4LDIwLjEzLDcuOTIsNDguOTEsMTAuOTQsNTIuODksMCwwLDQuNDksNywxNiw1LjU5LDAsMCwxMy4zNS0uNDgsMTMuMzEtOC41MiwwLDAsMy4wNi0xOC41OS0yLjI4LTYwLjg0bC0uNC0uMTVjNS42Mi01LjIxLDE3LjgxLTE5Ljc3LDI0LjI2LTUyLjI3LDkuODIsNS41NiwyNy4yNCwxMiw0Mi40OS0uMTlDMjI0LjUzLDIwMywyNDAuNTYsMTg5LjYzLDIzNC41MSwxNjUuNjVaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIC02My43NCkiLz4NCiAgICAgIDxwYXRoIGNsYXNzPSJjbHMtNyIgZD0iTTE1Mi4zOCwxNzQuMTdxLTUsMC0xMC44My0uMTVjLjYzLDgsLjczLDIzLjItNS4xNCwzNy44N2wxMS44OSwxMC42NCwxMy4yMi0xMC42NFMxNTcuNjIsMTg2LjgyLDE1Mi4zOCwxNzQuMTdaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIC02My43NCkiLz4NCiAgICAgIDxwYXRoIGNsYXNzPSJjbHMtMyIgZD0iTTQuNiwyMTBzLTEwLjM1LDE1Ljg1LDAsMjIuNmMwLDAsMTEuMzUsNy4xNywxNy40NC0yLjY2LDAsMCwxLjY5LTIuOCwzLTguODdDMTkuNiwyMTQuNzYsNC42LDIxMCw0LjYsMjEwWiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAtNjMuNzQpIi8+DQogICAgICA8cGF0aCBjbGFzcz0iY2xzLTgiIGQ9Ik0zMTcuODEsMTM4LjkyYy03LjQtLjE5LTE2LjA1LTEzLjQ3LTE5LjkyLTMxLjFzLTEuNTktMzMuMjcsNS0zNi42NUwxNzUuMTcsMTI3LjIzaDBjLTEuMDkuMjQtMS4yMywzLjc4LS4zMyw3LjlzMi41Miw3LjI2LDMuNiw3bDE0Ljc1LS4zNCw0LjMxLDE5LjY0LDM5LjY1LTguODctMi41Ny0xMS43MlptLTg4LjkyLDguMzQtMjYuMTUsNS44Ni0yLjUyLTExLjQ4LDI3LjI5LS42M1oiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLTYzLjc0KSIvPg0KICAgICAgPHBhdGggY2xhc3M9ImNscy05IiBkPSJNMzI1LjczLDEwMS41OWM0LjEzLDE4LjgyLDEuMjUsMzUuNDctNi40NCwzNy4xOXMtMTcuMjctMTIuMTQtMjEuNC0zMS0xLjI0LTM1LjQ3LDYuNDQtMzcuMTlTMzIxLjYsODIuNzgsMzI1LjczLDEwMS41OVoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLTYzLjc0KSIvPg0KICAgICAgPHBhdGggY2xhc3M9ImNscy00IiBkPSJNMzAxLjQ3LDEwOC4xMWMtMy41Ni0xNi4xOC0yLjM2LTMwLjg5LDIuNC0zNy4zNC03LjMzLDIuMjctMTAsMTguNjItNiwzNy4wNSwzLjU4LDE2LjM0LDExLjI3LDI4LjkzLDE4LjI3LDMwLjg0QzMxMC4yLDEzMy4yNSwzMDQuNDksMTIxLjksMzAxLjQ3LDEwOC4xMVoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLTYzLjc0KSIvPg0KICAgICAgPHBhdGggY2xhc3M9ImNscy00IiBkPSJNMjk2LjM0LDg1LjI0YTcxLjI0LDcxLjI0LDAsMCwwLDEuNTUsMjIuNTgsNzAuOCw3MC44LDAsMCwwLDgsMjEuMTNjNS44My00LjI3LDguNjItMTQsNi4zNS0yNC4zNVMzMDMuNDEsODYuNjIsMjk2LjM0LDg1LjI0WiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAtNjMuNzQpIi8+DQogICAgICA8cGF0aCBjbGFzcz0iY2xzLTMiIGQ9Ik0yMTIuNDUsMTY3Ljc2YTM2LjU3LDM2LjU3LDAsMCwxLTEuNjktMTVzLjM0LTUuNzEsNy43LTZjMCwwLDcuNzEtMywxMi40LDUuNjgsMCwwLDMuNDksNi44OCwzLjY1LDEzLjI2QzIzNC41MSwxNjUuNjUsMjE1LjcsMTY5LjU3LDIxMi40NSwxNjcuNzZaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIC02My43NCkiLz4NCiAgICA8L2c+DQogIDwvZz4NCjwvc3ZnPg==")}h1 span{position:absolute;display:block;width:48px;width:3rem;top:6px;right:289px;-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}#home{display:block;text-decoration:none;text-indent:-90000px;width:180px;min-height:100px;margin:4rem auto}p{text-align:center;margin-top:1rem}#beacon-cookies{position:fixed;z-index:1000;bottom:0;right:0;left:0;display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row nowrap;-webkit-box-align:center;align-items:center;-webkit-box-pack:center;justify-content:center;color:#fff;background:#24282a;padding:1em 0;opacity:1}#beacon-cookies>div{width:1000px}#beacon-cookies>div h6{font-size:1.5em;margin:0;padding:0}#beacon-cookies>div p{margin:1em 0}#beacon-cookies>div a{display:inline-block;color:#e05540}#beacon-cookies button{width:140px;margin-left:1em;border-radius:3px;height:2em;color:inherit;background-color:#e05540;border:none;cursor:pointer}#beacon-cookies.hide-me{opacity:0;-webkit-transition:opacity 1s;transition:opacity 1s}#beacon-cookies+footer{margin-bottom:9rem}#beacon-cookies.hide-me+footer{margin-bottom:0;-webkit-transition:margin 1.5s;transition:margin 1.5s}
+/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3Njc3MvZXJyb3JzLnNjc3MiLCIuLi8uLi9zY3NzL192YXJpYWJsZXMuc2NzcyIsIi4uL2Vycm9yLmNzcyIsIi4uLy4uL3Njc3MvX2Nvb2tpZXMuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxLQUNFLG1EQUFBLEFBQ0EsZUFBQSxBQUNBLGNDTFcsQURNWCxnQkFBQSxBQUVBLFlBQUEsQUFBYSxhQUFBLENFRmQsQUZPRCxHQUNJLGNDYlEsQURjUixrQkFBQSxBQUNBLGtCQUFBLEFBRUEsa0JBQUEsQUFRQSx3QkFBQSxBQUNBLDRCQUFBLEFBQ0EsNkJBQUEsQUFDQSw0L0pBQUEsQ0VaSCxBRkVHLFFBQ0gsa0JBQUEsQUFDQSxjQUFBLEFBQWUsV0FBQSxXQUFBLEFBQ2YsUUFBQSxBQUFTLFlBQUEsQUFDVCxpQ0FBQSx3QkFBQSxDRUVBLEFGT0QsTUFDSSxjQUFBLEFBQ0EscUJBQUEsQUFDQSxxQkFBQSxBQUNBLFlBQUEsQUFBYSxpQkFBQSxBQUNiLGdCQUFBLENFSEgsQUZPRCxFQUNLLGtCQUFBLEFBQ0EsZUFBQSxDRUpKLEFDeENELGdCQUNJLGVBQUEsQUFBZ0IsYUFBQSxBQUNoQixTQUFBLEFBQ0EsUUFBQSxBQUFTLE9BQUEsQUFDVCxvQkFBQSxhQUFBLEFBQ0EsOEJBQUEsNkJBQUEscUJBQUEsQUFDQSx5QkFBQSxtQkFBQSxBQUNBLHdCQUFBLHVCQUFBLEFBRUEsV0FBQSxBQUFjLG1CQUFBLEFBRWQsY0FBQSxBQXdCQSxTQUFBLENEcUJILEFDM0NHLG9CQUNILFlBQUEsQ0Q2Q0EsQUMzQ0EsdUJBQUssZ0JBQUEsQUFBaUIsU0FBQSxBQUFVLFNBQUEsQ0RnRGhDLEFDL0NBLHNCQUFJLFlBQUEsQ0RrREosQUNqREEsc0JBQ0kscUJBQUEsQUFDQSxhQUFBLENEbURKLEFDL0NHLHVCQUNILFlBQUEsQUFDQSxnQkFBQSxBQUNBLGtCQUFBLEFBQ0EsV0FBQSxBQUNBLGNBQUEsQUFDQSx5QkFBQSxBQUNBLFlBQUEsQUFDQSxjQUFBLENEaURBLEFDN0NHLHdCQUFZLFVBQUEsQUFBVyw4QkFBQSxxQkFBQSxDRGlEMUIsQUM3Q0QsdUJBQTJCLGtCQUFBLENEaUQxQixBQ2hERCwrQkFBbUMsZ0JBQUEsQUFBa0IsK0JBQUEsc0JBQUEsQ0RxRHBEIiwiZmlsZSI6Ii4uL2Vycm9yLmNzcyIsInNvdXJjZXNDb250ZW50IjpbbnVsbCxudWxsLCJib2R5IHtcbiAgZm9udC1mYW1pbHk6IFwiUm9ib3RvXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgY29sb3I6ICM1ZTVlNWU7XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG4gIHdpZHRoOiA5NjBweDtcbiAgbWFyZ2luOiAwIGF1dG87XG59XG5cbmgxIHtcbiAgY29sb3I6ICNlZTZkNTI7XG4gIHBhZGRpbmctdG9wOiAyMHJlbTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IHRvcCBjZW50ZXI7XG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtODtiYXNlNjQsUEhOMlp5QjRiV3h1Y3owaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNQzl6ZG1jaUlIZHBaSFJvUFNJek9UWXVOakVpSUdobGFXZG9kRDBpTWpjeUxqVXlJaUIyYVdWM1FtOTRQU0l3SURBZ016azJMall4SURJM01pNDFNaUkrRFFvZ0lEeGtaV1p6UGcwS0lDQWdJRHh6ZEhsc1pUNE5DaUFnSUNBZ0lDNWpiSE10TVNCN0RRb2dJQ0FnSUNBZ0lHbHpiMnhoZEdsdmJqb2dhWE52YkdGMFpUc05DaUFnSUNBZ0lIME5DZzBLSUNBZ0lDQWdMbU5zY3kweUlIc05DaUFnSUNBZ0lDQWdabWxzYkRvZ0kyWXhaakptTWpzTkNpQWdJQ0FnSUgwTkNnMEtJQ0FnSUNBZ0xtTnNjeTB6SUhzTkNpQWdJQ0FnSUNBZ1ptbHNiRG9nSTJaa1lUc05DaUFnSUNBZ0lIME5DZzBLSUNBZ0lDQWdMbU5zY3kwMElIc05DaUFnSUNBZ0lDQWdabWxzYkRvZ0l6QmlNVEF3WmpzTkNpQWdJQ0FnSUgwTkNnMEtJQ0FnSUNBZ0xtTnNjeTAxSUhzTkNpQWdJQ0FnSUNBZ1ptbHNiRG9nSTJaalpqVmtaVHNOQ2lBZ0lDQWdJSDBOQ2cwS0lDQWdJQ0FnTG1Oc2N5MDJJSHNOQ2lBZ0lDQWdJQ0FnWm1sc2JEb2dJMlpqWVdNellqc05DaUFnSUNBZ0lIME5DZzBLSUNBZ0lDQWdMbU5zY3kwM0lIc05DaUFnSUNBZ0lDQWdabWxzYkRvZ0kyVm1ObVUxTXpzTkNpQWdJQ0FnSUgwTkNnMEtJQ0FnSUNBZ0xtTnNjeTA0TENBdVkyeHpMVGtnZXcwS0lDQWdJQ0FnSUNCbWFXeHNPaUFqTW1GaE9HSmhPdzBLSUNBZ0lDQWdmUTBLRFFvZ0lDQWdJQ0F1WTJ4ekxUa2dldzBLSUNBZ0lDQWdJQ0J0YVhndFlteGxibVF0Ylc5a1pUb2diWFZzZEdsd2JIazdEUW9nSUNBZ0lDQjlEUW9nSUNBZ1BDOXpkSGxzWlQ0TkNpQWdQQzlrWldaelBnMEtJQ0E4ZEdsMGJHVStSMlZRYUVWNElFVnljbTl5UEM5MGFYUnNaVDROQ2lBZ1BHY2dZMnhoYzNNOUltTnNjeTB4SWo0TkNpQWdJQ0E4WnlCcFpEMGlRMkZ3WVY4eElpQmtZWFJoTFc1aGJXVTlJa05oY0dFZ01TSStEUW9nSUNBZ0lDQThaV3hzYVhCelpTQmpiR0Z6Y3owaVkyeHpMVElpSUdONFBTSXhNamN1TVRNaUlHTjVQU0l5TmpBdU5qZ2lJSEo0UFNJNE5pNHpOU0lnY25rOUlqRXhMamd6SWk4K0RRb2dJQ0FnSUNBOGNHRjBhQ0JqYkdGemN6MGlZMnh6TFRNaUlHUTlJazB4TnpNdU56SXNPRFl1TlRGRE1UVXdMaklzTkRNdU5EUXNOemt1TmpNc056UXVOeXczT1M0Mk15dzNOQzQzWXkwME15NDRMREUyTGpNNExUSXlMamN4TERZd0xqWXhMVEl5TGpjeExEWXdMall4YkRFdU5UY3NOQzQxTTJNdE5DNHlOeTB1TVRRdE55NDROeXd4TGpnNExUZ3VOU3cxTFM0M015d3pMamNzTWk0NE9DdzNMalUxTERndU1EZ3NPQzQyWVRFeUxqUTRMREV5TGpRNExEQXNNQ3d3TERVdU1UY3NNR3d6TGpReExEa3VOemxqT0RBdU16RXNNVGd1T1RNc01URTVMakkwTERjdU5USXNNVEU1TGpJMExEY3VOVEpETVRreUxqTTRMREV5TWk0Mk9Dd3hOek11TnpJc09EWXVOVEVzTVRjekxqY3lMRGcyTGpVeFdpSWdkSEpoYm5ObWIzSnRQU0owY21GdWMyeGhkR1VvTUNBdE5qTXVOelFwSWk4K0RRb2dJQ0FnSUNBOGNHRjBhQ0JqYkdGemN6MGlZMnh6TFRRaUlHUTlJazB4TnpNdU56SXNPRFl1TlRGRE1UVXdMaklzTkRNdU5EUXNOemt1TmpNc056UXVOeXczT1M0Mk15dzNOQzQzWXkwME15NDRMREUyTGpNNExUSXlMamN4TERZd0xqWXhMVEl5TGpjeExEWXdMall4YkRFdU5UY3NOQzQxTTFNM09Dd3hNall1TXl3M015NHhOQ3c1TlM0eE9HTXdMREFzTmpBdU5ETXRNeTR5T0N3M055NDBOeTB5TWk0NU5Dd3dMREFzT1M0MU1pNDFPQ3d5TXk0Mk1pd3hOUzR6TVdnd1F6RTNNeTQ1TVN3NE5pNDROeXd4TnpNdU56SXNPRFl1TlRFc01UY3pMamN5TERnMkxqVXhXaUlnZEhKaGJuTm1iM0p0UFNKMGNtRnVjMnhoZEdVb01DQXROak11TnpRcElpOCtEUW9nSUNBZ0lDQThaV3hzYVhCelpTQmpiR0Z6Y3owaVkyeHpMVFFpSUdONFBTSXhNVFl1TlRRaUlHTjVQU0kxTWk0M015SWdjbmc5SWpRdU1EWWlJSEo1UFNJMExqRWlMejROQ2lBZ0lDQWdJRHhsYkd4cGNITmxJR05zWVhOelBTSmpiSE10TkNJZ1kzZzlJakUyTVM0MU1pSWdZM2s5SWpRekxqY3lJaUJ5ZUQwaU5DNHdOaUlnY25rOUlqUXVNU0l2UGcwS0lDQWdJQ0FnUEhCaGRHZ2dZMnhoYzNNOUltTnNjeTAxSWlCa1BTSk5NVE00TGpRMExERXpOaTR4TTJFeU1pNHhOU3d5TWk0eE5Td3dMREFzTUN3eE9TMHhMalkwY3pRdU1Ea3NNakV1TXkwM0xqSTNMREl5TGpjelF6RTFNQzR5TERFMU55NHlNaXd4TXpnc01UVTNMREV6T0M0ME5Dd3hNell1TVROYUlpQjBjbUZ1YzJadmNtMDlJblJ5WVc1emJHRjBaU2d3SUMwMk15NDNOQ2tpTHo0TkNpQWdJQ0FnSUR4d1lYUm9JR05zWVhOelBTSmpiSE10TmlJZ1pEMGlUVEl6TkM0MU1Td3hOalV1TmpWekxURTNMamN5TERNdU5qSXRNakl1TURZc01pNHhNV013TERBc015NHhPU3d4TWk0Mk55MHpMamM0TERFMUxqRXpMREFzTUMweE5pNDRNeXcwTGpreUxUSXlMamM0TFRFeUxqRXlMREFzTUMwek9DNDVNeXd4TVM0ME1TMHhNVGt1TWpRdE55NDFNaXd3TERBdE5EVXVORElzTVRBdU5DMDJNaXcwTmk0M01pd3dMREFzTVRVc05DNDNPU3d5TUM0ME1Td3hNUzR3Tnl3d0xEQXNNVEV1TWkweE9DNDFOQ3d5T0M0eExUSXhMamczUXpRNUxqUXlMREl4Tml3ME9Td3lNelV1TnpZc05qQXNNalV4TGpreGJDMHVNalF1TURkek1Ua3VPU3cyTkM0d055d3lOUzQxTml3Mk9TNHpPV013TERBc05TNDFOeXcyTGpFekxERTJMalkzTERJdU9EVXNNQ3d3TERFekxqQTVMVEl1TnpFc01URXVOelF0TVRBdU5qTXNNQ3d3TFRJdU1UVXRNVFF1T1RRdE1URXVNakV0TkRkaE1UQTBMalF5TERFd05DNDBNaXd3TERBc01Dd3hOeTQzTkMwdU1XTXpMakE0TERJd0xqRXpMRGN1T1RJc05EZ3VPVEVzTVRBdU9UUXNOVEl1T0Rrc01Dd3dMRFF1TkRrc055d3hOaXcxTGpVNUxEQXNNQ3d4TXk0ek5TMHVORGdzTVRNdU16RXRPQzQxTWl3d0xEQXNNeTR3TmkweE9DNDFPUzB5TGpJNExUWXdMamcwYkMwdU5DMHVNVFZqTlM0Mk1pMDFMakl4TERFM0xqZ3hMVEU1TGpjM0xESTBMakkyTFRVeUxqSTNMRGt1T0RJc05TNDFOaXd5Tnk0eU5Dd3hNaXcwTWk0ME9TMHVNVGxETWpJMExqVXpMREl3TXl3eU5EQXVOVFlzTVRnNUxqWXpMREl6TkM0MU1Td3hOalV1TmpWYUlpQjBjbUZ1YzJadmNtMDlJblJ5WVc1emJHRjBaU2d3SUMwMk15NDNOQ2tpTHo0TkNpQWdJQ0FnSUR4d1lYUm9JR05zWVhOelBTSmpiSE10TnlJZ1pEMGlUVEUxTWk0ek9Dd3hOelF1TVRkeExUVXNNQzB4TUM0NE15MHVNVFZqTGpZekxEZ3NMamN6TERJekxqSXROUzR4TkN3ek55NDROMnd4TVM0NE9Td3hNQzQyTkN3eE15NHlNaTB4TUM0Mk5GTXhOVGN1TmpJc01UZzJMamd5TERFMU1pNHpPQ3d4TnpRdU1UZGFJaUIwY21GdWMyWnZjbTA5SW5SeVlXNXpiR0YwWlNnd0lDMDJNeTQzTkNraUx6NE5DaUFnSUNBZ0lEeHdZWFJvSUdOc1lYTnpQU0pqYkhNdE15SWdaRDBpVFRRdU5pd3lNVEJ6TFRFd0xqTTFMREUxTGpnMUxEQXNNakl1Tm1Nd0xEQXNNVEV1TXpVc055NHhOeXd4Tnk0ME5DMHlMalkyTERBc01Dd3hMalk1TFRJdU9Dd3pMVGd1T0RkRE1Ua3VOaXd5TVRRdU56WXNOQzQyTERJeE1DdzBMallzTWpFd1dpSWdkSEpoYm5ObWIzSnRQU0owY21GdWMyeGhkR1VvTUNBdE5qTXVOelFwSWk4K0RRb2dJQ0FnSUNBOGNHRjBhQ0JqYkdGemN6MGlZMnh6TFRnaUlHUTlJazB6TVRjdU9ERXNNVE00TGpreVl5MDNMalF0TGpFNUxURTJMakExTFRFekxqUTNMVEU1TGpreUxUTXhMakZ6TFRFdU5Ua3RNek11TWpjc05TMHpOaTQyTlV3eE56VXVNVGNzTVRJM0xqSXphREJqTFRFdU1Ea3VNalF0TVM0eU15d3pMamM0TFM0ek15dzNMamx6TWk0MU1pdzNMakkyTERNdU5pdzNiREUwTGpjMUxTNHpOQ3cwTGpNeExERTVMalkwTERNNUxqWTFMVGd1T0RjdE1pNDFOeTB4TVM0M01scHRMVGc0TGpreUxEZ3VNelF0TWpZdU1UVXNOUzQ0TmkweUxqVXlMVEV4TGpRNExESTNMakk1TFM0Mk0xb2lJSFJ5WVc1elptOXliVDBpZEhKaGJuTnNZWFJsS0RBZ0xUWXpMamMwS1NJdlBnMEtJQ0FnSUNBZ1BIQmhkR2dnWTJ4aGMzTTlJbU5zY3kwNUlpQmtQU0pOTXpJMUxqY3pMREV3TVM0MU9XTTBMakV6TERFNExqZ3lMREV1TWpVc016VXVORGN0Tmk0ME5Dd3pOeTR4T1hNdE1UY3VNamN0TVRJdU1UUXRNakV1TkMwek1TMHhMakkwTFRNMUxqUTNMRFl1TkRRdE16Y3VNVGxUTXpJeExqWXNPREl1Tnpnc016STFMamN6TERFd01TNDFPVm9pSUhSeVlXNXpabTl5YlQwaWRISmhibk5zWVhSbEtEQWdMVFl6TGpjMEtTSXZQZzBLSUNBZ0lDQWdQSEJoZEdnZ1kyeGhjM005SW1Oc2N5MDBJaUJrUFNKTk16QXhMalEzTERFd09DNHhNV010TXk0MU5pMHhOaTR4T0MweUxqTTJMVE13TGpnNUxESXVOQzB6Tnk0ek5DMDNMak16TERJdU1qY3RNVEFzTVRndU5qSXROaXd6Tnk0d05Td3pMalU0TERFMkxqTTBMREV4TGpJM0xESTRMamt6TERFNExqSTNMRE13TGpnMFF6TXhNQzR5TERFek15NHlOU3d6TURRdU5Ea3NNVEl4TGprc016QXhMalEzTERFd09DNHhNVm9pSUhSeVlXNXpabTl5YlQwaWRISmhibk5zWVhSbEtEQWdMVFl6TGpjMEtTSXZQZzBLSUNBZ0lDQWdQSEJoZEdnZ1kyeGhjM005SW1Oc2N5MDBJaUJrUFNKTk1qazJMak0wTERnMUxqSTBZVGN4TGpJMExEY3hMakkwTERBc01Dd3dMREV1TlRVc01qSXVOVGdzTnpBdU9DdzNNQzQ0TERBc01Dd3dMRGdzTWpFdU1UTmpOUzQ0TXkwMExqSTNMRGd1TmpJdE1UUXNOaTR6TlMweU5DNHpOVk16TURNdU5ERXNPRFl1TmpJc01qazJMak0wTERnMUxqSTBXaUlnZEhKaGJuTm1iM0p0UFNKMGNtRnVjMnhoZEdVb01DQXROak11TnpRcElpOCtEUW9nSUNBZ0lDQThjR0YwYUNCamJHRnpjejBpWTJ4ekxUTWlJR1E5SWsweU1USXVORFVzTVRZM0xqYzJZVE0yTGpVM0xETTJMalUzTERBc01Dd3hMVEV1TmprdE1UVnpMak0wTFRVdU56RXNOeTQzTFRaak1Dd3dMRGN1TnpFdE15d3hNaTQwTERVdU5qZ3NNQ3d3TERNdU5Ea3NOaTQ0T0N3ekxqWTFMREV6TGpJMlF6SXpOQzQxTVN3eE5qVXVOalVzTWpFMUxqY3NNVFk1TGpVM0xESXhNaTQwTlN3eE5qY3VOelphSWlCMGNtRnVjMlp2Y20wOUluUnlZVzV6YkdGMFpTZ3dJQzAyTXk0M05Da2lMejROQ2lBZ0lDQThMMmMrRFFvZ0lEd3ZaejROQ2p3dmMzWm5QZz09XCIpO1xufVxuaDEgc3BhbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHdpZHRoOiAzcmVtO1xuICB0b3A6IDZweDtcbiAgcmlnaHQ6IDI4OXB4O1xuICB0cmFuc2Zvcm06IHJvdGF0ZSgtMTJkZWcpO1xufVxuXG4jaG9tZSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIHRleHQtaW5kZW50OiAtOTAwMDBweDtcbiAgd2lkdGg6IDE4MHB4O1xuICBtaW4taGVpZ2h0OiAxMDBweDtcbiAgbWFyZ2luOiA0cmVtIGF1dG87XG59XG5cbnAge1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIG1hcmdpbi10b3A6IDFyZW07XG59XG5cbiNiZWFjb24tY29va2llcyB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgei1pbmRleDogMTAwMDtcbiAgYm90dG9tOiAwO1xuICByaWdodDogMDtcbiAgbGVmdDogMDtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1mbG93OiByb3cgbm93cmFwO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgY29sb3I6IHdoaXRlO1xuICBiYWNrZ3JvdW5kOiAjMjQyODJhO1xuICBwYWRkaW5nOiAxZW0gMDtcbiAgb3BhY2l0eTogMTtcbn1cbiNiZWFjb24tY29va2llcyA+IGRpdiB7XG4gIHdpZHRoOiAxMDAwcHg7XG59XG4jYmVhY29uLWNvb2tpZXMgPiBkaXYgaDYge1xuICBmb250LXNpemU6IDEuNWVtO1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG59XG4jYmVhY29uLWNvb2tpZXMgPiBkaXYgcCB7XG4gIG1hcmdpbjogMWVtIDA7XG59XG4jYmVhY29uLWNvb2tpZXMgPiBkaXYgYSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgY29sb3I6ICNlMDU1NDA7XG59XG4jYmVhY29uLWNvb2tpZXMgYnV0dG9uIHtcbiAgd2lkdGg6IDE0MHB4O1xuICBtYXJnaW4tbGVmdDogMWVtO1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG4gIGhlaWdodDogMmVtO1xuICBjb2xvcjogaW5oZXJpdDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2UwNTU0MDtcbiAgYm9yZGVyOiBub25lO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4jYmVhY29uLWNvb2tpZXMuaGlkZS1tZSB7XG4gIG9wYWNpdHk6IDA7XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMXM7XG59XG5cbiNiZWFjb24tY29va2llcyArIGZvb3RlciB7XG4gIG1hcmdpbi1ib3R0b206IDlyZW07XG59XG5cbiNiZWFjb24tY29va2llcy5oaWRlLW1lICsgZm9vdGVyIHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgdHJhbnNpdGlvbjogbWFyZ2luIDEuNXM7XG59XG5cbi8qIyBzb3VyY2VNYXBwaW5nVVJMPWVycm9yLmNzcy5tYXAgKi9cbiIsbnVsbF19 */
\ No newline at end of file
diff --git a/ui/static/css/error.css.map b/ui/static/css/error.css.map
new file mode 100644
index 0000000..5f65399
--- /dev/null
+++ b/ui/static/css/error.css.map
@@ -0,0 +1 @@
+{"version":3,"sourceRoot":"","sources":["../scss/errors.scss","../scss/_variables.scss","../scss/_cookies.scss"],"names":[],"mappings":"AAGA;EACE;EACA;EACA,OCLW;EDMX;EAEA;EAAa;;;AAKf;EACI,OCbQ;EDcR;EACA;EAEA;EAQA;EACA;EACA;EACA;;AAVA;EACH;EACA;EAAe;EACf;EAAS;EACT;;;AASD;EACI;EACA;EACA;EACA;EAAa;EACb;;;AAIJ;EACK;EACA;;;AE5CL;EACI;EAAgB;EAChB;EACA;EAAS;EACT;EACA;EACA;EACA;EAEA;EAAc;EAEd;EAwBA;;AAtBA;EACH;;AAEA;EAAK;EAAiB;EAAU;;AAChC;EAAI;;AACJ;EACI;EACA;;AAID;EACH;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAIG;EAAY;EAAW;;;AAI3B;EAA2B;;;AAC3B;EAAmC;EAAkB","file":"error.css"}
\ No newline at end of file
diff --git a/ui/static/css/fontawesome.v5.0.10.css b/ui/static/css/fontawesome.v5.0.10.css
new file mode 100644
index 0000000..17032d8
--- /dev/null
+++ b/ui/static/css/fontawesome.v5.0.10.css
@@ -0,0 +1,5 @@
+/*!
+ * Font Awesome Free 5.0.10 by @fontawesome - https://fontawesome.com
+ * License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
+ */.fa,.fab,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:a 2s linear infinite;animation:a 2s linear infinite}.fa-pulse{-webkit-animation:a 1s steps(8) infinite;animation:a 1s steps(8) infinite}@-webkit-keyframes a{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes a{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-horizontal.fa-flip-vertical,.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"}.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{-webkit-filter:none;filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-aws:before{content:"\f375"}.fa-backward:before{content:"\f04a"}.fa-balance-scale:before{content:"\f24e"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-barcode:before{content:"\f02a"}.fa-bars:before{content:"\f0c9"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-bath:before{content:"\f2cd"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-three-quarters:before{content:"\f241"}.fa-bed:before{content:"\f236"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-slash:before{content:"\f1f6"}.fa-bicycle:before{content:"\f206"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blind:before{content:"\f29d"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-box-open:before{content:"\f49e"}.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-btc:before{content:"\f15a"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-bus:before{content:"\f207"}.fa-buysellads:before{content:"\f20d"}.fa-calculator:before{content:"\f1ec"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-times:before{content:"\f273"}.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-certificate:before{content:"\f0a3"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-pie:before{content:"\f200"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-square:before{content:"\f14a"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chrome:before{content:"\f268"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-columns:before{content:"\f0db"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-slash:before{content:"\f4b3"}.fa-comments:before{content:"\f086"}.fa-compass:before{content:"\f14e"}.fa-compress:before{content:"\f066"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-couch:before{content:"\f4b8"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-credit-card:before{content:"\f09d"}.fa-crop:before{content:"\f125"}.fa-crosshairs:before{content:"\f05b"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-delicious:before{content:"\f1a5"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-deviantart:before{content:"\f1bd"}.fa-diagnoses:before{content:"\f470"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-dna:before{content:"\f471"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-flatbed:before{content:"\f474"}.fa-donate:before{content:"\f4b9"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before{content:"\f16b"}.fa-drupal:before{content:"\f1a9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-edge:before{content:"\f282"}.fa-edit:before{content:"\f044"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-fax:before{content:"\f1ac"}.fa-female:before{content:"\f182"}.fa-fighter-jet:before{content:"\f0fb"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-code:before{content:"\f1c9"}.fa-file-excel:before{content:"\f1c3"}.fa-file-image:before{content:"\f1c5"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-fire:before{content:"\f06d"}.fa-fire-extinguisher:before{content:"\f134"}.fa-firefox:before{content:"\f269"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-firstdraft:before{content:"\f3a1"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flask:before{content:"\f0c3"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-fly:before{content:"\f417"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-frown:before{content:"\f119"}.fa-futbol:before{content:"\f1e3"}.fa-gamepad:before{content:"\f11b"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-gift:before{content:"\f06b"}.fa-git:before{content:"\f1d3"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass-martini:before{content:"\f000"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-graduation-cap:before{content:"\f19d"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-helping:before{content:"\f4c4"}.fa-handshake:before{content:"\f2b5"}.fa-hashtag:before{content:"\f292"}.fa-hdd:before{content:"\f0a0"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-heart:before{content:"\f004"}.fa-heartbeat:before{content:"\f21e"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hockey-puck:before{content:"\f453"}.fa-home:before{content:"\f015"}.fa-hooli:before{content:"\f427"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-houzz:before{content:"\f27c"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-i-cursor:before{content:"\f246"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-image:before{content:"\f03e"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-instagram:before{content:"\f16d"}.fa-internet-explorer:before{content:"\f26b"}.fa-ioxhost:before{content:"\f208"}.fa-italic:before{content:"\f033"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jenkins:before{content:"\f3b6"}.fa-joget:before{content:"\f3b7"}.fa-joomla:before{content:"\f1aa"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-key:before{content:"\f084"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-korvue:before{content:"\f42f"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-leaf:before{content:"\f06c"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-lightbulb:before{content:"\f0eb"}.fa-line:before{content:"\f3c0"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location-arrow:before{content:"\f124"}.fa-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-low-vision:before{content:"\f2a8"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-male:before{content:"\f183"}.fa-map:before{content:"\f279"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-maxcdn:before{content:"\f136"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-meh:before{content:"\f11a"}.fa-mercury:before{content:"\f223"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-microsoft:before{content:"\f3ca"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-square:before{content:"\f146"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-moon:before{content:"\f186"}.fa-motorcycle:before{content:"\f21c"}.fa-mouse-pointer:before{content:"\f245"}.fa-music:before{content:"\f001"}.fa-napster:before{content:"\f3d2"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nintendo-switch:before{content:"\f418"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-osi:before{content:"\f41a"}.fa-outdent:before{content:"\f03b"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-paint-brush:before{content:"\f1fc"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paypal:before{content:"\f1ed"}.fa-pen-square:before{content:"\f14b"}.fa-pencil-alt:before{content:"\f303"}.fa-people-carry:before{content:"\f4ce"}.fa-percent:before{content:"\f295"}.fa-periscope:before{content:"\f3da"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phone:before{content:"\f095"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-volume:before{content:"\f2a0"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-plane:before{content:"\f072"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-poo:before{content:"\f2fe"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-print:before{content:"\f02f"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before{content:"\f288"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-random:before{content:"\f074"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-registered:before{content:"\f25d"}.fa-rendact:before{content:"\f3e4"}.fa-renren:before{content:"\f18b"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-resolving:before{content:"\f3e7"}.fa-retweet:before{content:"\f079"}.fa-ribbon:before{content:"\f4d6"}.fa-road:before{content:"\f018"}.fa-rocket:before{content:"\f135"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-rupee-sign:before{content:"\f156"}.fa-safari:before{content:"\f267"}.fa-sass:before{content:"\f41e"}.fa-save:before{content:"\f0c7"}.fa-schlix:before{content:"\f3ea"}.fa-scribd:before{content:"\f28a"}.fa-search:before{content:"\f002"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-share:before{content:"\f064"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield-alt:before{content:"\f3ed"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shower:before{content:"\f2cc"}.fa-sign:before{content:"\f4d9"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-simplybuilt:before{content:"\f215"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-sliders-h:before{content:"\f1de"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smoking:before{content:"\f48d"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snowflake:before{content:"\f2dc"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-space-shuttle:before{content:"\f197"}.fa-speakap:before{content:"\f3f3"}.fa-spinner:before{content:"\f110"}.fa-spotify:before{content:"\f1bc"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-star:before{content:"\f005"}.fa-star-half:before{content:"\f089"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-strava:before{content:"\f428"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-sun:before{content:"\f185"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablets:before{content:"\f490"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tape:before{content:"\f4db"}.fa-tasks:before{content:"\f0ae"}.fa-taxi:before{content:"\f1ba"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-terminal:before{content:"\f120"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-ticket-alt:before{content:"\f3ff"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-tint:before{content:"\f043"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-trademark:before{content:"\f25c"}.fa-train:before{content:"\f238"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-tree:before{content:"\f1bb"}.fa-trello:before{content:"\f181"}.fa-tripadvisor:before{content:"\f262"}.fa-trophy:before{content:"\f091"}.fa-truck:before{content:"\f0d1"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-moving:before{content:"\f4df"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-tv:before{content:"\f26c"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-uikit:before{content:"\f403"}.fa-umbrella:before{content:"\f0e9"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-uniregistry:before{content:"\f404"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-usb:before{content:"\f287"}.fa-user:before{content:"\f007"}.fa-user-circle:before{content:"\f2bd"}.fa-user-md:before{content:"\f0f0"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-times:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-vaadin:before{content:"\f408"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-video-slash:before{content:"\f4e2"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume-down:before{content:"\f027"}.fa-volume-off:before{content:"\f026"}.fa-volume-up:before{content:"\f028"}.fa-vuejs:before{content:"\f41f"}.fa-warehouse:before{content:"\f494"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheelchair:before{content:"\f193"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wikipedia-w:before{content:"\f266"}.fa-window-close:before{content:"\f410"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-wine-glass:before{content:"\f4e3"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}@font-face{font-family:Font Awesome\ 5 Brands;font-style:normal;font-weight:400;src:url(../webfonts/fa-brands-400.eot);src:url(../webfonts/fa-brands-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.woff) format("woff"),url(../webfonts/fa-brands-400.ttf) format("truetype"),url(../webfonts/fa-brands-400.svg#fontawesome) format("svg")}.fab{font-family:Font Awesome\ 5 Brands}@font-face{font-family:Font Awesome\ 5 Free;font-style:normal;font-weight:400;src:url(../webfonts/fa-regular-400.eot);src:url(../webfonts/fa-regular-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.woff) format("woff"),url(../webfonts/fa-regular-400.ttf) format("truetype"),url(../webfonts/fa-regular-400.svg#fontawesome) format("svg")}.far{font-weight:400}@font-face{font-family:Font Awesome\ 5 Free;font-style:normal;font-weight:900;src:url(../webfonts/fa-solid-900.eot);src:url(../webfonts/fa-solid-900.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.woff) format("woff"),url(../webfonts/fa-solid-900.ttf) format("truetype"),url(../webfonts/fa-solid-900.svg#fontawesome) format("svg")}.fa,.far,.fas{font-family:Font Awesome\ 5 Free}.fa,.fas{font-weight:900}
+/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2ZvbnRhd2Vzb21lLnY1LjAuMTAuY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRyx3QkFDcUIsa0NBQWtDLG1DQUFtQyxxQkFBcUIsa0JBQWtCLG9CQUFvQixvQkFBb0IsYUFBYSxDQUFDLE9BQU8sb0JBQW9CLGtCQUFrQix1QkFBdUIsQ0FBQyxPQUFPLGVBQWUsQ0FBQyxPQUFPLGdCQUFnQixDQUFDLE9BQU8sYUFBYSxDQUFDLE9BQU8sYUFBYSxDQUFDLE9BQU8sYUFBYSxDQUFDLE9BQU8sYUFBYSxDQUFDLE9BQU8sYUFBYSxDQUFDLE9BQU8sYUFBYSxDQUFDLE9BQU8sYUFBYSxDQUFDLE9BQU8sYUFBYSxDQUFDLE9BQU8sYUFBYSxDQUFDLFFBQVEsY0FBYyxDQUFDLE9BQU8sa0JBQWtCLFlBQVksQ0FBQyxPQUFPLHFCQUFxQixrQkFBa0IsY0FBYyxDQUFDLFVBQVUsaUJBQWlCLENBQUMsT0FBTyxVQUFVLGtCQUFrQixrQkFBa0IsVUFBVSxtQkFBbUIsQ0FBQyxXQUFXLHdCQUF3QixtQkFBbUIsd0JBQXdCLENBQUMsY0FBYyxVQUFVLENBQUMsZUFBZSxXQUFXLENBQUMseUZBQXlGLGlCQUFpQixDQUFDLDhGQUE4RixnQkFBZ0IsQ0FBQyxTQUFTLHVDQUFBLDhCQUE4QixDQUFDLFVBQVUseUNBQUEsZ0NBQWdDLENBQUMscUJBQWEsR0FBRywrQkFBQSxzQkFBc0IsQ0FBQyxHQUFHLGdDQUFBLHVCQUF1QixDQUFDLENBQWxFLGFBQWEsR0FBRywrQkFBQSxzQkFBc0IsQ0FBQyxHQUFHLGdDQUFBLHVCQUF1QixDQUFDLENBQUMsY0FBYyxzRUFBc0UsZ0NBQUEsdUJBQXVCLENBQUMsZUFBZSxzRUFBc0UsaUNBQUEsd0JBQXdCLENBQUMsZUFBZSxzRUFBc0UsaUNBQUEsd0JBQXdCLENBQUMsb0JBQW9CLGdGQUFnRiw2QkFBQSxvQkFBb0IsQ0FBQyxrQkFBa0IsNkJBQUEsb0JBQW9CLENBQUMsdURBQXVELCtFQUErRSxDQUFDLHFDQUFxQyw0QkFBQSxtQkFBbUIsQ0FBQyxnSEFBZ0gsb0JBQW9CLFdBQVcsQ0FBQyxVQUFVLHFCQUFxQixXQUFXLGdCQUFnQixrQkFBa0Isc0JBQXNCLFNBQVMsQ0FBQywwQkFBMEIsT0FBTyxrQkFBa0Isa0JBQWtCLFVBQVUsQ0FBQyxhQUFhLG1CQUFtQixDQUFDLGFBQWEsYUFBYSxDQUFDLFlBQVksVUFBVSxDQUFDLGlCQUFpQixlQUFlLENBQUMsMkJBQTJCLGVBQWUsQ0FBQyxvQkFBb0IsZUFBZSxDQUFDLHdCQUF3QixlQUFlLENBQUMsd0JBQXdCLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLGVBQWUsZUFBZSxDQUFDLG9CQUFvQixlQUFlLENBQUMsMEJBQTBCLGVBQWUsQ0FBQyxtQkFBbUIsZUFBZSxDQUFDLHdCQUF3QixlQUFlLENBQUMseUJBQXlCLGVBQWUsQ0FBQyxzQkFBc0IsZUFBZSxDQUFDLHVCQUF1QixlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLHNCQUFzQixlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQywrQ0FBK0MsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMsa0JBQWtCLGVBQWUsQ0FBQyxtQkFBbUIsZUFBZSxDQUFDLHFCQUFxQixlQUFlLENBQUMsNkJBQTZCLGVBQWUsQ0FBQyw2QkFBNkIsZUFBZSxDQUFDLDhCQUE4QixlQUFlLENBQUMsMkJBQTJCLGVBQWUsQ0FBQyxzQkFBc0IsZUFBZSxDQUFDLHNCQUFzQixlQUFlLENBQUMsdUJBQXVCLGVBQWUsQ0FBQyxvQkFBb0IsZUFBZSxDQUFDLHlCQUF5QixlQUFlLENBQUMsbUJBQW1CLGVBQWUsQ0FBQyxxQkFBcUIsZUFBZSxDQUFDLHlCQUF5QixlQUFlLENBQUMsaUJBQWlCLGVBQWUsQ0FBQyxpQkFBaUIsZUFBZSxDQUFDLHFCQUFxQixlQUFlLENBQUMsbUJBQW1CLGVBQWUsQ0FBQyxpQ0FBaUMsZUFBZSxDQUFDLGlDQUFpQyxlQUFlLENBQUMsa0NBQWtDLGVBQWUsQ0FBQywrQkFBK0IsZUFBZSxDQUFDLDZCQUE2QixlQUFlLENBQUMsNkJBQTZCLGVBQWUsQ0FBQyw4QkFBOEIsZUFBZSxDQUFDLDJCQUEyQixlQUFlLENBQUMsc0JBQXNCLGVBQWUsQ0FBQyxzQkFBc0IsZUFBZSxDQUFDLHVCQUF1QixlQUFlLENBQUMsb0JBQW9CLGVBQWUsQ0FBQyxzQkFBc0IsZUFBZSxDQUFDLHdCQUF3QixlQUFlLENBQUMsd0JBQXdCLGVBQWUsQ0FBQyx1Q0FBdUMsZUFBZSxDQUFDLG9CQUFvQixlQUFlLENBQUMsc0JBQXNCLGVBQWUsQ0FBQyxjQUFjLGVBQWUsQ0FBQyxtQkFBbUIsZUFBZSxDQUFDLDZCQUE2QixlQUFlLENBQUMsd0JBQXdCLGVBQWUsQ0FBQyxtQkFBbUIsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMsZUFBZSxlQUFlLENBQUMsb0JBQW9CLGVBQWUsQ0FBQyx5QkFBeUIsZUFBZSxDQUFDLGVBQWUsZUFBZSxDQUFDLG9CQUFvQixlQUFlLENBQUMsb0JBQW9CLGVBQWUsQ0FBQyxtQkFBbUIsZUFBZSxDQUFDLGdCQUFnQixlQUFlLENBQUMseUJBQXlCLGVBQWUsQ0FBQywyQkFBMkIsZUFBZSxDQUFDLGdCQUFnQixlQUFlLENBQUMseUJBQXlCLGVBQWUsQ0FBQyx3QkFBd0IsZUFBZSxDQUFDLHdCQUF3QixlQUFlLENBQUMsMkJBQTJCLGVBQWUsQ0FBQyxrQ0FBa0MsZUFBZSxDQUFDLGVBQWUsZUFBZSxDQUFDLGdCQUFnQixlQUFlLENBQUMsbUJBQW1CLGVBQWUsQ0FBQywwQkFBMEIsZUFBZSxDQUFDLGdCQUFnQixlQUFlLENBQUMsc0JBQXNCLGVBQWUsQ0FBQyxtQkFBbUIsZUFBZSxDQUFDLHFCQUFxQixlQUFlLENBQUMsc0JBQXNCLGVBQWUsQ0FBQyx5QkFBeUIsZUFBZSxDQUFDLHFCQUFxQixlQUFlLENBQUMsbUJBQW1CLGVBQWUsQ0FBQyxnQkFBZ0IsZUFBZSxDQUFDLHFCQUFxQixlQUFlLENBQUMsc0JBQXNCLGVBQWUsQ0FBQyxpQkFBaUIsZUFBZSxDQUFDLG1CQUFtQixlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQyxxQkFBcUIsZUFBZSxDQUFDLHVCQUF1QixlQUFlLENBQUMsZ0JBQWdCLGVBQWUsQ0FBQyxnQkFBZ0IsZUFBZSxDQUFDLGdCQUFnQixlQUFlLENBQUMsZ0JBQWdCLGVBQWUsQ0FBQyxvQkFBb0IsZUFBZSxDQUFDLHdCQUF3QixlQUFlLENBQUMsZUFBZSxlQUFlLENBQUMsb0JBQW9CLGVBQWUsQ0FBQyxpQkFBaUIsZUFBZSxDQUFDLG1CQUFtQixlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQyw2QkFBNkIsZUFBZSxDQUFDLGVBQWUsZUFBZSxDQUFDLGVBQWUsZUFBZSxDQUFDLG9CQUFvQixlQUFlLENBQUMsb0JBQW9CLGVBQWUsQ0FBQyxvQkFBb0IsZUFBZSxDQUFDLGdCQUFnQixlQUFlLENBQUMsNEJBQTRCLGVBQWUsQ0FBQyxlQUFlLGVBQWUsQ0FBQyxzQkFBc0IsZUFBZSxDQUFDLHNCQUFzQixlQUFlLENBQUMsb0JBQW9CLGVBQWUsQ0FBQyx3QkFBd0IsZUFBZSxDQUFDLDBCQUEwQixlQUFlLENBQUMsMEJBQTBCLGVBQWUsQ0FBQyx5QkFBeUIsZUFBZSxDQUFDLDBCQUEwQixlQUFlLENBQUMsa0JBQWtCLGVBQWUsQ0FBQyx3QkFBd0IsZUFBZSxDQUFDLG9CQUFvQixlQUFlLENBQUMsZUFBZSxlQUFlLENBQUMsc0JBQXNCLGVBQWUsQ0FBQyxzQkFBc0IsZUFBZSxDQUFDLHVCQUF1QixlQUFlLENBQUMsNkJBQTZCLGVBQWUsQ0FBQyw2QkFBNkIsZUFBZSxDQUFDLDhCQUE4QixlQUFlLENBQUMsMkJBQTJCLGVBQWUsQ0FBQyxvQkFBb0IsZUFBZSxDQUFDLDJCQUEyQixlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQyx5QkFBeUIsZUFBZSxDQUFDLG1CQUFtQixlQUFlLENBQUMsd0JBQXdCLGVBQWUsQ0FBQywwQkFBMEIsZUFBZSxDQUFDLHVCQUF1QixlQUFlLENBQUMsa0JBQWtCLGVBQWUsQ0FBQyx5QkFBeUIsZUFBZSxDQUFDLHFCQUFxQixlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQyxtQkFBbUIsZUFBZSxDQUFDLHNCQUFzQixlQUFlLENBQUMsdUJBQXVCLGVBQWUsQ0FBQyxzQkFBc0IsZUFBZSxDQUFDLHFCQUFxQixlQUFlLENBQUMsc0JBQXNCLGVBQWUsQ0FBQyxxQkFBcUIsZUFBZSxDQUFDLGlCQUFpQixlQUFlLENBQUMsd0JBQXdCLGVBQWUsQ0FBQyx3QkFBd0IsZUFBZSxDQUFDLGlCQUFpQixlQUFlLENBQUMsd0JBQXdCLGVBQWUsQ0FBQyx1QkFBdUIsZUFBZSxDQUFDLHNCQUFzQixlQUFlLENBQUMsd0JBQXdCLGVBQWUsQ0FBQyxzQkFBc0IsZUFBZSxDQUFDLHVCQUF1QixlQUFlLENBQUMsc0JBQXNCLGVBQWUsQ0FBQywrQkFBK0IsZUFBZSxDQUFDLCtCQUErQixlQUFlLENBQUMsZ0NBQWdDLGVBQWUsQ0FBQyw2QkFBNkIsZUFBZSxDQUFDLHdCQUF3QixlQUFlLENBQUMsd0JBQXdCLGVBQWUsQ0FBQyx5QkFBeUIsZUFBZSxDQUFDLHNCQUFzQixlQUFlLENBQUMsaUJBQWlCLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMsd0JBQXdCLGVBQWUsQ0FBQyxxQkFBcUIsZUFBZSxDQUFDLDJCQUEyQixlQUFlLENBQUMsMEJBQTBCLGVBQWUsQ0FBQyxpQkFBaUIsZUFBZSxDQUFDLGlCQUFpQixlQUFlLENBQUMsNkJBQTZCLGVBQWUsQ0FBQyxpQkFBaUIsZUFBZSxDQUFDLDhCQUE4QixlQUFlLENBQUMsNEJBQTRCLGVBQWUsQ0FBQyxzQkFBc0IsZUFBZSxDQUFDLHNCQUFzQixlQUFlLENBQUMsd0JBQXdCLGVBQWUsQ0FBQyxnQkFBZ0IsZUFBZSxDQUFDLHVCQUF1QixlQUFlLENBQUMsbUJBQW1CLGVBQWUsQ0FBQyxvQkFBb0IsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMsZUFBZSxlQUFlLENBQUMsZ0JBQWdCLGVBQWUsQ0FBQyxtQkFBbUIsZUFBZSxDQUFDLG1CQUFtQixlQUFlLENBQUMsdUJBQXVCLGVBQWUsQ0FBQyx3QkFBd0IsZUFBZSxDQUFDLHlCQUF5QixlQUFlLENBQUMsb0JBQW9CLGVBQWUsQ0FBQyxtQkFBbUIsZUFBZSxDQUFDLG9CQUFvQixlQUFlLENBQUMsMEJBQTBCLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLGdCQUFnQixlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQyxpQkFBaUIsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMsNEJBQTRCLGVBQWUsQ0FBQyx1QkFBdUIsZUFBZSxDQUFDLGdCQUFnQixlQUFlLENBQUMsc0JBQXNCLGVBQWUsQ0FBQyxnQkFBZ0IsZUFBZSxDQUFDLG9CQUFvQixlQUFlLENBQUMsZ0JBQWdCLGVBQWUsQ0FBQyxpQkFBaUIsZUFBZSxDQUFDLGVBQWUsZUFBZSxDQUFDLHNCQUFzQixlQUFlLENBQUMsbUJBQW1CLGVBQWUsQ0FBQyxvQkFBb0IsZUFBZSxDQUFDLG9CQUFvQixlQUFlLENBQUMsZ0JBQWdCLGVBQWUsQ0FBQyxxQkFBcUIsZUFBZSxDQUFDLHFCQUFxQixlQUFlLENBQUMsbUJBQW1CLGVBQWUsQ0FBQyxtQkFBbUIsZUFBZSxDQUFDLHNCQUFzQixlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQyxnQkFBZ0IsZUFBZSxDQUFDLHlCQUF5QixlQUFlLENBQUMsbUJBQW1CLGVBQWUsQ0FBQyxxQkFBcUIsZUFBZSxDQUFDLGVBQWUsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMsa0JBQWtCLGVBQWUsQ0FBQyx1QkFBdUIsZUFBZSxDQUFDLGlCQUFpQixlQUFlLENBQUMseUJBQXlCLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLHNCQUFzQixlQUFlLENBQUMsZ0JBQWdCLGVBQWUsQ0FBQyxvQkFBb0IsZUFBZSxDQUFDLHlCQUF5QixlQUFlLENBQUMsb0JBQW9CLGVBQWUsQ0FBQywyQkFBMkIsZUFBZSxDQUFDLG1CQUFtQixlQUFlLENBQUMsa0JBQWtCLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLHNCQUFzQixlQUFlLENBQUMsZ0JBQWdCLGVBQWUsQ0FBQyxnQkFBZ0IsZUFBZSxDQUFDLGlCQUFpQixlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQyxzQkFBc0IsZUFBZSxDQUFDLHNCQUFzQixlQUFlLENBQUMsaUJBQWlCLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLG9CQUFvQixlQUFlLENBQUMseUJBQXlCLGVBQWUsQ0FBQywyQkFBMkIsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMsa0JBQWtCLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLG9CQUFvQixlQUFlLENBQUMsZ0JBQWdCLGVBQWUsQ0FBQyxxQkFBcUIsZUFBZSxDQUFDLHdCQUF3QixlQUFlLENBQUMsdUJBQXVCLGVBQWUsQ0FBQyw4QkFBOEIsZUFBZSxDQUFDLGdDQUFnQyxlQUFlLENBQUMsa0JBQWtCLGVBQWUsQ0FBQyw2QkFBNkIsZUFBZSxDQUFDLHdCQUF3QixlQUFlLENBQUMsNkJBQTZCLGVBQWUsQ0FBQyxvQ0FBb0MsZUFBZSxDQUFDLGVBQWUsZUFBZSxDQUFDLHVCQUF1QixlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQyxvQkFBb0IsZUFBZSxDQUFDLHNCQUFzQixlQUFlLENBQUMsOEJBQThCLGVBQWUsQ0FBQywyQkFBMkIsZUFBZSxDQUFDLHlCQUF5QixlQUFlLENBQUMsd0JBQXdCLGVBQWUsQ0FBQyxlQUFlLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLHVCQUF1QixlQUFlLENBQUMsZ0JBQWdCLGVBQWUsQ0FBQyxvQkFBb0IsZUFBZSxDQUFDLHdCQUF3QixlQUFlLENBQUMsc0JBQXNCLGVBQWUsQ0FBQyxxQkFBcUIsZUFBZSxDQUFDLHNCQUFzQixlQUFlLENBQUMsc0JBQXNCLGVBQWUsQ0FBQyx3QkFBd0IsZUFBZSxDQUFDLDRCQUE0QixlQUFlLENBQUMsb0JBQW9CLGVBQWUsQ0FBQywyQkFBMkIsZUFBZSxDQUFDLHNCQUFzQixlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQyxnQkFBZ0IsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMsZ0JBQWdCLGVBQWUsQ0FBQyw2QkFBNkIsZUFBZSxDQUFDLG1CQUFtQixlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQyx1QkFBdUIsZUFBZSxDQUFDLHNCQUFzQixlQUFlLENBQUMsZ0JBQWdCLGVBQWUsQ0FBQywwQkFBMEIsZUFBZSxDQUFDLGlCQUFpQixlQUFlLENBQUMsa0JBQWtCLGVBQWUsQ0FBQyxxQkFBcUIsZUFBZSxDQUFDLGVBQWUsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMsdUJBQXVCLGVBQWUsQ0FBQyxnQkFBZ0IsZUFBZSxDQUFDLHdCQUF3QixlQUFlLENBQUMsNEJBQTRCLGVBQWUsQ0FBQyw2QkFBNkIsZUFBZSxDQUFDLHFCQUFxQixlQUFlLENBQUMsd0JBQXdCLGVBQWUsQ0FBQyx5QkFBeUIsZUFBZSxDQUFDLHdCQUF3QixlQUFlLENBQUMsNEJBQTRCLGVBQWUsQ0FBQyxvQkFBb0IsZUFBZSxDQUFDLG1CQUFtQixlQUFlLENBQUMsc0JBQXNCLGVBQWUsQ0FBQywwQkFBMEIsZUFBZSxDQUFDLG1CQUFtQixlQUFlLENBQUMsaUJBQWlCLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLG1CQUFtQixlQUFlLENBQUMsaUJBQWlCLGVBQWUsQ0FBQyxlQUFlLGVBQWUsQ0FBQyxzQkFBc0IsZUFBZSxDQUFDLHNCQUFzQixlQUFlLENBQUMsY0FBYyxlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQyxnQkFBZ0IsZUFBZSxDQUFDLGVBQWUsZUFBZSxDQUFDLHNCQUFzQixlQUFlLENBQUMsa0JBQWtCLGVBQWUsQ0FBQyxzQkFBc0IsZUFBZSxDQUFDLHlCQUF5QixlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMseUJBQXlCLGVBQWUsQ0FBQyxpQkFBaUIsZUFBZSxDQUFDLG1CQUFtQixlQUFlLENBQUMsaUJBQWlCLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLHFCQUFxQixlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQyx1QkFBdUIsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMsd0JBQXdCLGVBQWUsQ0FBQyx1QkFBdUIsZUFBZSxDQUFDLHVCQUF1QixlQUFlLENBQUMseUJBQXlCLGVBQWUsQ0FBQyw4QkFBOEIsZUFBZSxDQUFDLHlCQUF5QixlQUFlLENBQUMsMEJBQTBCLGVBQWUsQ0FBQyxvQkFBb0IsZUFBZSxDQUFDLGdCQUFnQixlQUFlLENBQUMsb0JBQW9CLGVBQWUsQ0FBQyxpQkFBaUIsZUFBZSxDQUFDLGdCQUFnQixlQUFlLENBQUMsb0JBQW9CLGVBQWUsQ0FBQyx1QkFBdUIsZUFBZSxDQUFDLDhCQUE4QixlQUFlLENBQUMsd0JBQXdCLGVBQWUsQ0FBQyw4QkFBOEIsZUFBZSxDQUFDLDRCQUE0QixlQUFlLENBQUMsdUJBQXVCLGVBQWUsQ0FBQyxzQkFBc0IsZUFBZSxDQUFDLHNCQUFzQixlQUFlLENBQUMsMkJBQTJCLGVBQWUsQ0FBQywyQkFBMkIsZUFBZSxDQUFDLDRCQUE0QixlQUFlLENBQUMseUJBQXlCLGVBQWUsQ0FBQyx3QkFBd0IsZUFBZSxDQUFDLHFCQUFxQixlQUFlLENBQUMseUJBQXlCLGVBQWUsQ0FBQyxzQkFBc0IsZUFBZSxDQUFDLGlCQUFpQixlQUFlLENBQUMseUJBQXlCLGVBQWUsQ0FBQyxxQkFBcUIsZUFBZSxDQUFDLG1CQUFtQixlQUFlLENBQUMsZUFBZSxlQUFlLENBQUMsbUJBQW1CLGVBQWUsQ0FBQyxzQkFBc0IsZUFBZSxDQUFDLGlCQUFpQixlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQyxnQkFBZ0IsZUFBZSxDQUFDLHlCQUF5QixlQUFlLENBQUMsbUJBQW1CLGVBQWUsQ0FBQyx1QkFBdUIsZUFBZSxDQUFDLGdCQUFnQixlQUFlLENBQUMsaUJBQWlCLGVBQWUsQ0FBQyxvQkFBb0IsZUFBZSxDQUFDLHdCQUF3QixlQUFlLENBQUMsMkJBQTJCLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLHFCQUFxQixlQUFlLENBQUMseUJBQXlCLGVBQWUsQ0FBQywwQkFBMEIsZUFBZSxDQUFDLDJCQUEyQixlQUFlLENBQUMsaUJBQWlCLGVBQWUsQ0FBQyxpQkFBaUIsZUFBZSxDQUFDLG1CQUFtQixlQUFlLENBQUMsb0JBQW9CLGVBQWUsQ0FBQyxvQkFBb0IsZUFBZSxDQUFDLG1CQUFtQixlQUFlLENBQUMsdUJBQXVCLGVBQWUsQ0FBQyxpQkFBaUIsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMsZ0JBQWdCLGVBQWUsQ0FBQyxpQkFBaUIsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMsb0JBQW9CLGVBQWUsQ0FBQyxnQkFBZ0IsZUFBZSxDQUFDLHVCQUF1QixlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQyw2QkFBNkIsZUFBZSxDQUFDLG1CQUFtQixlQUFlLENBQUMsa0JBQWtCLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLHVCQUF1QixlQUFlLENBQUMsZ0JBQWdCLGVBQWUsQ0FBQyxtQkFBbUIsZUFBZSxDQUFDLGlCQUFpQixlQUFlLENBQUMsa0JBQWtCLGVBQWUsQ0FBQyxjQUFjLGVBQWUsQ0FBQyxxQkFBcUIsZUFBZSxDQUFDLG9CQUFvQixlQUFlLENBQUMsZUFBZSxlQUFlLENBQUMsb0JBQW9CLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLHVCQUF1QixlQUFlLENBQUMseUJBQXlCLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLG9CQUFvQixlQUFlLENBQUMsa0JBQWtCLGVBQWUsQ0FBQyxtQkFBbUIsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMseUJBQXlCLGVBQWUsQ0FBQyxnQkFBZ0IsZUFBZSxDQUFDLG1CQUFtQixlQUFlLENBQUMsaUJBQWlCLGVBQWUsQ0FBQyxnQkFBZ0IsZUFBZSxDQUFDLDBCQUEwQixlQUFlLENBQUMsd0JBQXdCLGVBQWUsQ0FBQyxxQkFBcUIsZUFBZSxDQUFDLHFCQUFxQixlQUFlLENBQUMsZ0JBQWdCLGVBQWUsQ0FBQyxnQkFBZ0IsZUFBZSxDQUFDLG9CQUFvQixlQUFlLENBQUMsdUJBQXVCLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLGlCQUFpQixlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQyxnQkFBZ0IsZUFBZSxDQUFDLG9CQUFvQixlQUFlLENBQUMsbUJBQW1CLGVBQWUsQ0FBQyxtQkFBbUIsZUFBZSxDQUFDLDBCQUEwQixlQUFlLENBQUMsZ0JBQWdCLGVBQWUsQ0FBQyxxQkFBcUIsZUFBZSxDQUFDLCtCQUErQixlQUFlLENBQUMsK0JBQStCLGVBQWUsQ0FBQyxnQ0FBZ0MsZUFBZSxDQUFDLDZCQUE2QixlQUFlLENBQUMsc0JBQXNCLGVBQWUsQ0FBQyxnQkFBZ0IsZUFBZSxDQUFDLG1CQUFtQixlQUFlLENBQUMsaUJBQWlCLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLGdCQUFnQixlQUFlLENBQUMsZUFBZSxlQUFlLENBQUMsc0JBQXNCLGVBQWUsQ0FBQywwQkFBMEIsZUFBZSxDQUFDLG1CQUFtQixlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQyxnQkFBZ0IsZUFBZSxDQUFDLHVCQUF1QixlQUFlLENBQUMsdUJBQXVCLGVBQWUsQ0FBQyx5QkFBeUIsZUFBZSxDQUFDLHlCQUF5QixlQUFlLENBQUMsa0JBQWtCLGVBQWUsQ0FBQyxtQkFBbUIsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMsb0JBQW9CLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLGlCQUFpQixlQUFlLENBQUMsa0JBQWtCLGVBQWUsQ0FBQyxlQUFlLGVBQWUsQ0FBQyxtQkFBbUIsZUFBZSxDQUFDLHFCQUFxQixlQUFlLENBQUMsc0JBQXNCLGVBQWUsQ0FBQyw0QkFBNEIsZUFBZSxDQUFDLHFCQUFxQixlQUFlLENBQUMsaUJBQWlCLGVBQWUsQ0FBQyx3QkFBd0IsZUFBZSxDQUFDLHdCQUF3QixlQUFlLENBQUMsZUFBZSxlQUFlLENBQUMsb0JBQW9CLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMsc0JBQXNCLGVBQWUsQ0FBQyxnQkFBZ0IsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMsMEJBQTBCLGVBQWUsQ0FBQyxnQkFBZ0IsZUFBZSxDQUFDLHNCQUFzQixlQUFlLENBQUMseUJBQXlCLGVBQWUsQ0FBQyxpQkFBaUIsZUFBZSxDQUFDLG1CQUFtQixlQUFlLENBQUMsa0JBQWtCLGVBQWUsQ0FBQyxxQkFBcUIsZUFBZSxDQUFDLDJCQUEyQixlQUFlLENBQUMsZ0JBQWdCLGVBQWUsQ0FBQyxtQkFBbUIsZUFBZSxDQUFDLHlCQUF5QixlQUFlLENBQUMsZUFBZSxlQUFlLENBQUMsZUFBZSxlQUFlLENBQUMsdUJBQXVCLGVBQWUsQ0FBQyx3QkFBd0IsZUFBZSxDQUFDLDBCQUEwQixlQUFlLENBQUMseUJBQXlCLGVBQWUsQ0FBQyxnQ0FBZ0MsZUFBZSxDQUFDLG9CQUFvQixlQUFlLENBQUMsa0JBQWtCLGVBQWUsQ0FBQyxpQkFBaUIsZUFBZSxDQUFDLHlCQUF5QixlQUFlLENBQUMsZUFBZSxlQUFlLENBQUMsbUJBQW1CLGVBQWUsQ0FBQyxpQkFBaUIsZUFBZSxDQUFDLHFCQUFxQixlQUFlLENBQUMsdUJBQXVCLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMsdUJBQXVCLGVBQWUsQ0FBQyxxQkFBcUIsZUFBZSxDQUFDLHlCQUF5QixlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQyxpQkFBaUIsZUFBZSxDQUFDLG1CQUFtQixlQUFlLENBQUMsaUJBQWlCLGVBQWUsQ0FBQyx3QkFBd0IsZUFBZSxDQUFDLGVBQWUsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMsc0JBQXNCLGVBQWUsQ0FBQyxzQkFBc0IsZUFBZSxDQUFDLHdCQUF3QixlQUFlLENBQUMsbUJBQW1CLGVBQWUsQ0FBQyxxQkFBcUIsZUFBZSxDQUFDLHVCQUF1QixlQUFlLENBQUMsNkJBQTZCLGVBQWUsQ0FBQyxpQkFBaUIsZUFBZSxDQUFDLHVCQUF1QixlQUFlLENBQUMsd0JBQXdCLGVBQWUsQ0FBQyx3QkFBd0IsZUFBZSxDQUFDLGVBQWUsZUFBZSxDQUFDLHNCQUFzQixlQUFlLENBQUMsMEJBQTBCLGVBQWUsQ0FBQywwQkFBMEIsZUFBZSxDQUFDLHlCQUF5QixlQUFlLENBQUMsc0JBQXNCLGVBQWUsQ0FBQyxpQkFBaUIsZUFBZSxDQUFDLHFCQUFxQixlQUFlLENBQUMsdUJBQXVCLGVBQWUsQ0FBQyw0QkFBNEIsZUFBZSxDQUFDLGlCQUFpQixlQUFlLENBQUMsZ0JBQWdCLGVBQWUsQ0FBQyx1QkFBdUIsZUFBZSxDQUFDLHVCQUF1QixlQUFlLENBQUMsZ0JBQWdCLGVBQWUsQ0FBQyxnQkFBZ0IsZUFBZSxDQUFDLHVCQUF1QixlQUFlLENBQUMsdUJBQXVCLGVBQWUsQ0FBQyxtQkFBbUIsZUFBZSxDQUFDLGVBQWUsZUFBZSxDQUFDLHNCQUFzQixlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQywrQkFBK0IsZUFBZSxDQUFDLG1DQUFtQyxlQUFlLENBQUMsaUJBQWlCLGVBQWUsQ0FBQyxzQkFBc0IsZUFBZSxDQUFDLHdCQUF3QixlQUFlLENBQUMsa0JBQWtCLGVBQWUsQ0FBQyx3QkFBd0IsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMsY0FBYyxlQUFlLENBQUMsa0JBQWtCLGVBQWUsQ0FBQyxvQkFBb0IsZUFBZSxDQUFDLDJCQUEyQixlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQyxxQkFBcUIsZUFBZSxDQUFDLGlCQUFpQixlQUFlLENBQUMsc0JBQXNCLGVBQWUsQ0FBQyx1QkFBdUIsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMsbUJBQW1CLGVBQWUsQ0FBQyxpQkFBaUIsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMsaUJBQWlCLGVBQWUsQ0FBQyxtQkFBbUIsZUFBZSxDQUFDLHFCQUFxQixlQUFlLENBQUMsa0JBQWtCLGVBQWUsQ0FBQyx3QkFBd0IsZUFBZSxDQUFDLHlCQUF5QixlQUFlLENBQUMsZ0JBQWdCLGVBQWUsQ0FBQyxvQkFBb0IsZUFBZSxDQUFDLHNCQUFzQixlQUFlLENBQUMsbUJBQW1CLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLGlCQUFpQixlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLHFCQUFxQixlQUFlLENBQUMsbUJBQW1CLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLGdCQUFnQixlQUFlLENBQUMsa0JBQWtCLGVBQWUsQ0FBQyxzQkFBc0IsZUFBZSxDQUFDLG1CQUFtQixlQUFlLENBQUMsZUFBZSxlQUFlLENBQUMsc0JBQXNCLGVBQWUsQ0FBQyxzQkFBc0IsZUFBZSxDQUFDLHNCQUFzQixlQUFlLENBQUMsa0JBQWtCLGVBQWUsQ0FBQyxnQkFBZ0IsZUFBZSxDQUFDLGdCQUFnQixlQUFlLENBQUMsa0JBQWtCLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMsd0JBQXdCLGVBQWUsQ0FBQyx1QkFBdUIsZUFBZSxDQUFDLHVCQUF1QixlQUFlLENBQUMsb0JBQW9CLGVBQWUsQ0FBQyxvQkFBb0IsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMsa0JBQWtCLGVBQWUsQ0FBQyx3QkFBd0IsZUFBZSxDQUFDLGlCQUFpQixlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQyw0QkFBNEIsZUFBZSxDQUFDLHdCQUF3QixlQUFlLENBQUMsdUJBQXVCLGVBQWUsQ0FBQyxzQkFBc0IsZUFBZSxDQUFDLGdCQUFnQixlQUFlLENBQUMseUJBQXlCLGVBQWUsQ0FBQyx3QkFBd0IsZUFBZSxDQUFDLHdCQUF3QixlQUFlLENBQUMsMkJBQTJCLGVBQWUsQ0FBQyx5QkFBeUIsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMsZ0JBQWdCLGVBQWUsQ0FBQyx1QkFBdUIsZUFBZSxDQUFDLHlCQUF5QixlQUFlLENBQUMsd0JBQXdCLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLHVCQUF1QixlQUFlLENBQUMsbUJBQW1CLGVBQWUsQ0FBQyxtQkFBbUIsZUFBZSxDQUFDLG9CQUFvQixlQUFlLENBQUMsaUJBQWlCLGVBQWUsQ0FBQyxpQkFBaUIsZUFBZSxDQUFDLHNCQUFzQixlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQyxzQkFBc0IsZUFBZSxDQUFDLGlCQUFpQixlQUFlLENBQUMsbUJBQW1CLGVBQWUsQ0FBQyxvQkFBb0IsZUFBZSxDQUFDLDBCQUEwQixlQUFlLENBQUMsMkJBQTJCLGVBQWUsQ0FBQyxxQkFBcUIsZUFBZSxDQUFDLGdCQUFnQixlQUFlLENBQUMsMkJBQTJCLGVBQWUsQ0FBQyx5QkFBeUIsZUFBZSxDQUFDLDRCQUE0QixlQUFlLENBQUMsMEJBQTBCLGVBQWUsQ0FBQyxxQkFBcUIsZUFBZSxDQUFDLDZCQUE2QixlQUFlLENBQUMsMkJBQTJCLGVBQWUsQ0FBQyxtQkFBbUIsZUFBZSxDQUFDLHNCQUFzQixlQUFlLENBQUMseUJBQXlCLGVBQWUsQ0FBQyxtQkFBbUIsZUFBZSxDQUFDLG1CQUFtQixlQUFlLENBQUMsbUJBQW1CLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLHVCQUF1QixlQUFlLENBQUMsMEJBQTBCLGVBQWUsQ0FBQywwQkFBMEIsZUFBZSxDQUFDLGdCQUFnQixlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQyxzQkFBc0IsZUFBZSxDQUFDLGlCQUFpQixlQUFlLENBQUMsd0JBQXdCLGVBQWUsQ0FBQyx3QkFBd0IsZUFBZSxDQUFDLHlCQUF5QixlQUFlLENBQUMsd0JBQXdCLGVBQWUsQ0FBQyx1QkFBdUIsZUFBZSxDQUFDLHdCQUF3QixlQUFlLENBQUMsdUJBQXVCLGVBQWUsQ0FBQyxnQkFBZ0IsZUFBZSxDQUFDLHVCQUF1QixlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLHVCQUF1QixlQUFlLENBQUMseUJBQXlCLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLG9CQUFvQixlQUFlLENBQUMsd0JBQXdCLGVBQWUsQ0FBQyx1QkFBdUIsZUFBZSxDQUFDLDhCQUE4QixlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLG9CQUFvQixlQUFlLENBQUMsZUFBZSxlQUFlLENBQUMsdUJBQXVCLGVBQWUsQ0FBQyx1QkFBdUIsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMsZ0JBQWdCLGVBQWUsQ0FBQyxvQkFBb0IsZUFBZSxDQUFDLG1CQUFtQixlQUFlLENBQUMsaUJBQWlCLGVBQWUsQ0FBQyx3QkFBd0IsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMsc0JBQXNCLGVBQWUsQ0FBQyxtQkFBbUIsZUFBZSxDQUFDLDBCQUEwQixlQUFlLENBQUMsZUFBZSxlQUFlLENBQUMsZ0JBQWdCLGVBQWUsQ0FBQyxnQkFBZ0IsZUFBZSxDQUFDLGlCQUFpQixlQUFlLENBQUMsZ0JBQWdCLGVBQWUsQ0FBQyxvQkFBb0IsZUFBZSxDQUFDLDBCQUEwQixlQUFlLENBQUMseUJBQXlCLGVBQWUsQ0FBQyxvQkFBb0IsZUFBZSxDQUFDLHVCQUF1QixlQUFlLENBQUMsc0JBQXNCLGVBQWUsQ0FBQyxjQUFjLGVBQWUsQ0FBQyxvQkFBb0IsZUFBZSxDQUFDLG1CQUFtQixlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQyx1QkFBdUIsZUFBZSxDQUFDLDZCQUE2QixlQUFlLENBQUMsNEJBQTRCLGVBQWUsQ0FBQyw0QkFBNEIsZUFBZSxDQUFDLCtCQUErQixlQUFlLENBQUMsc0NBQXNDLGVBQWUsQ0FBQyx1QkFBdUIsZUFBZSxDQUFDLHFCQUFxQixlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQyxzQkFBc0IsZUFBZSxDQUFDLGlCQUFpQixlQUFlLENBQUMsd0JBQXdCLGVBQWUsQ0FBQyxnQkFBZ0IsZUFBZSxDQUFDLHNCQUFzQixlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQyxxQkFBcUIsZUFBZSxDQUFDLGlCQUFpQixlQUFlLENBQUMsdUJBQXVCLGVBQWUsQ0FBQywyQkFBMkIsZUFBZSxDQUFDLGlCQUFpQixlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQyxnQkFBZ0IsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMsdUJBQXVCLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLGlCQUFpQixlQUFlLENBQUMseUJBQXlCLGVBQWUsQ0FBQyx3QkFBd0IsZUFBZSxDQUFDLGVBQWUsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMseUJBQXlCLGVBQWUsQ0FBQyxjQUFjLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLG1CQUFtQixlQUFlLENBQUMsMEJBQTBCLGVBQWUsQ0FBQyxpQkFBaUIsZUFBZSxDQUFDLGdCQUFnQixlQUFlLENBQUMsaUJBQWlCLGVBQWUsQ0FBQyxvQkFBb0IsZUFBZSxDQUFDLHFCQUFxQixlQUFlLENBQUMsZ0JBQWdCLGVBQWUsQ0FBQyxvQkFBb0IsZUFBZSxDQUFDLHVCQUF1QixlQUFlLENBQUMsNEJBQTRCLGVBQWUsQ0FBQyxzQkFBc0IsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMsa0JBQWtCLGVBQWUsQ0FBQyxzQkFBc0IsZUFBZSxDQUFDLG1CQUFtQixlQUFlLENBQUMsa0JBQWtCLGVBQWUsQ0FBQyxlQUFlLGVBQWUsQ0FBQyxnQkFBZ0IsZUFBZSxDQUFDLHVCQUF1QixlQUFlLENBQUMsbUJBQW1CLGVBQWUsQ0FBQyxxQkFBcUIsZUFBZSxDQUFDLHVCQUF1QixlQUFlLENBQUMsc0JBQXNCLGVBQWUsQ0FBQyxpQkFBaUIsZUFBZSxDQUFDLG9CQUFvQixlQUFlLENBQUMseUJBQXlCLGVBQWUsQ0FBQyxvQkFBb0IsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMsaUJBQWlCLGVBQWUsQ0FBQyx3QkFBd0IsZUFBZSxDQUFDLHNCQUFzQixlQUFlLENBQUMsbUJBQW1CLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLHlCQUF5QixlQUFlLENBQUMsZ0JBQWdCLGVBQWUsQ0FBQyxpQkFBaUIsZUFBZSxDQUFDLGlCQUFpQixlQUFlLENBQUMsaUJBQWlCLGVBQWUsQ0FBQyx1QkFBdUIsZUFBZSxDQUFDLGlCQUFpQixlQUFlLENBQUMsd0JBQXdCLGVBQWUsQ0FBQyxtQkFBbUIsZUFBZSxDQUFDLGdCQUFnQixlQUFlLENBQUMsY0FBYyxlQUFlLENBQUMsZUFBZSxlQUFlLENBQUMsMkJBQTJCLGVBQWUsQ0FBQyx1QkFBdUIsZUFBZSxDQUFDLHNCQUFzQixlQUFlLENBQUMscUJBQXFCLGVBQWUsQ0FBQyxpQkFBaUIsZUFBZSxDQUFDLHFCQUFxQixlQUFlLENBQUMsaUJBQWlCLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMsb0JBQW9CLGVBQWUsQ0FBQywyQkFBMkIsZUFBZSxDQUFDLHNCQUFzQixlQUFlLENBQUMsaUJBQWlCLGVBQWUsQ0FBQyxnQkFBZ0IsZUFBZSxDQUFDLHVCQUF1QixlQUFlLENBQUMsd0JBQXdCLGVBQWUsQ0FBQywyQkFBMkIsZUFBZSxDQUFDLDJCQUEyQixlQUFlLENBQUMsMEJBQTBCLGVBQWUsQ0FBQyxtQkFBbUIsZUFBZSxDQUFDLHNCQUFzQixlQUFlLENBQUMsb0JBQW9CLGVBQWUsQ0FBQyxxQkFBcUIsZUFBZSxDQUFDLDRCQUE0QixlQUFlLENBQUMsc0JBQXNCLGVBQWUsQ0FBQyxzQkFBc0IsZUFBZSxDQUFDLG1CQUFtQixlQUFlLENBQUMsa0JBQWtCLGVBQWUsQ0FBQyxpQkFBaUIsZUFBZSxDQUFDLGdCQUFnQixlQUFlLENBQUMsZ0JBQWdCLGVBQWUsQ0FBQyx1QkFBdUIsZUFBZSxDQUFDLHdCQUF3QixlQUFlLENBQUMsaUJBQWlCLGVBQWUsQ0FBQyxrQkFBa0IsZUFBZSxDQUFDLGdDQUFnQyxlQUFlLENBQUMsZ0JBQWdCLGVBQWUsQ0FBQyxvQkFBb0IsZUFBZSxDQUFDLGlCQUFpQixlQUFlLENBQUMsbUJBQW1CLGVBQWUsQ0FBQywwQkFBMEIsZUFBZSxDQUFDLFNBQVMsU0FBUyxtQkFBbUIsV0FBVyxZQUFZLGdCQUFnQixVQUFVLGtCQUFrQixTQUFTLENBQUMsbURBQW1ELFVBQVUsWUFBWSxTQUFTLGlCQUFpQixnQkFBZ0IsVUFBVSxDQUFDLFdBQVcsbUNBQW1DLGtCQUFrQixnQkFBZ0IsdUNBQXVDLG9TQUFvUyxDQUFDLEtBQUssa0NBQWtDLENBQUMsV0FBVyxpQ0FBaUMsa0JBQWtCLGdCQUFnQix3Q0FBd0MseVNBQXlTLENBQUMsS0FBSyxlQUFlLENBQUMsV0FBVyxpQ0FBaUMsa0JBQWtCLGdCQUFnQixzQ0FBc0MsK1JBQStSLENBQUMsY0FBYyxnQ0FBZ0MsQ0FBQyxTQUFTLGVBQWUsQ0FBQyIsImZpbGUiOiIuLi9mb250YXdlc29tZS52NS4wLjEwLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogRm9udCBBd2Vzb21lIEZyZWUgNS4wLjEwIGJ5IEBmb250YXdlc29tZSAtIGh0dHBzOi8vZm9udGF3ZXNvbWUuY29tXG4gKiBMaWNlbnNlIC0gaHR0cHM6Ly9mb250YXdlc29tZS5jb20vbGljZW5zZSAoSWNvbnM6IENDIEJZIDQuMCwgRm9udHM6IFNJTCBPRkwgMS4xLCBDb2RlOiBNSVQgTGljZW5zZSlcbiAqL1xuLmZhLC5mYWIsLmZhbCwuZmFyLC5mYXN7LW1vei1vc3gtZm9udC1zbW9vdGhpbmc6Z3JheXNjYWxlOy13ZWJraXQtZm9udC1zbW9vdGhpbmc6YW50aWFsaWFzZWQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC12YXJpYW50Om5vcm1hbDt0ZXh0LXJlbmRlcmluZzphdXRvO2xpbmUtaGVpZ2h0OjF9LmZhLWxne2ZvbnQtc2l6ZToxLjMzMzMzZW07bGluZS1oZWlnaHQ6Ljc1ZW07dmVydGljYWwtYWxpZ246LS4wNjY3ZW19LmZhLXhze2ZvbnQtc2l6ZTouNzVlbX0uZmEtc217Zm9udC1zaXplOi44NzVlbX0uZmEtMXh7Zm9udC1zaXplOjFlbX0uZmEtMnh7Zm9udC1zaXplOjJlbX0uZmEtM3h7Zm9udC1zaXplOjNlbX0uZmEtNHh7Zm9udC1zaXplOjRlbX0uZmEtNXh7Zm9udC1zaXplOjVlbX0uZmEtNnh7Zm9udC1zaXplOjZlbX0uZmEtN3h7Zm9udC1zaXplOjdlbX0uZmEtOHh7Zm9udC1zaXplOjhlbX0uZmEtOXh7Zm9udC1zaXplOjllbX0uZmEtMTB4e2ZvbnQtc2l6ZToxMGVtfS5mYS1md3t0ZXh0LWFsaWduOmNlbnRlcjt3aWR0aDoxLjI1ZW19LmZhLXVse2xpc3Qtc3R5bGUtdHlwZTpub25lO21hcmdpbi1sZWZ0OjIuNWVtO3BhZGRpbmctbGVmdDowfS5mYS11bD5saXtwb3NpdGlvbjpyZWxhdGl2ZX0uZmEtbGl7bGVmdDotMmVtO3Bvc2l0aW9uOmFic29sdXRlO3RleHQtYWxpZ246Y2VudGVyO3dpZHRoOjJlbTtsaW5lLWhlaWdodDppbmhlcml0fS5mYS1ib3JkZXJ7Ym9yZGVyOi4wOGVtIHNvbGlkICNlZWU7Ym9yZGVyLXJhZGl1czouMWVtO3BhZGRpbmc6LjJlbSAuMjVlbSAuMTVlbX0uZmEtcHVsbC1sZWZ0e2Zsb2F0OmxlZnR9LmZhLXB1bGwtcmlnaHR7ZmxvYXQ6cmlnaHR9LmZhLmZhLXB1bGwtbGVmdCwuZmFiLmZhLXB1bGwtbGVmdCwuZmFsLmZhLXB1bGwtbGVmdCwuZmFyLmZhLXB1bGwtbGVmdCwuZmFzLmZhLXB1bGwtbGVmdHttYXJnaW4tcmlnaHQ6LjNlbX0uZmEuZmEtcHVsbC1yaWdodCwuZmFiLmZhLXB1bGwtcmlnaHQsLmZhbC5mYS1wdWxsLXJpZ2h0LC5mYXIuZmEtcHVsbC1yaWdodCwuZmFzLmZhLXB1bGwtcmlnaHR7bWFyZ2luLWxlZnQ6LjNlbX0uZmEtc3BpbnthbmltYXRpb246YSAycyBpbmZpbml0ZSBsaW5lYXJ9LmZhLXB1bHNle2FuaW1hdGlvbjphIDFzIGluZmluaXRlIHN0ZXBzKDgpfUBrZXlmcmFtZXMgYXswJXt0cmFuc2Zvcm06cm90YXRlKDBkZWcpfXRve3RyYW5zZm9ybTpyb3RhdGUoMXR1cm4pfX0uZmEtcm90YXRlLTkwey1tcy1maWx0ZXI6XCJwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQmFzaWNJbWFnZShyb3RhdGlvbj0xKVwiO3RyYW5zZm9ybTpyb3RhdGUoOTBkZWcpfS5mYS1yb3RhdGUtMTgwey1tcy1maWx0ZXI6XCJwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQmFzaWNJbWFnZShyb3RhdGlvbj0yKVwiO3RyYW5zZm9ybTpyb3RhdGUoMTgwZGVnKX0uZmEtcm90YXRlLTI3MHstbXMtZmlsdGVyOlwicHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkJhc2ljSW1hZ2Uocm90YXRpb249MylcIjt0cmFuc2Zvcm06cm90YXRlKDI3MGRlZyl9LmZhLWZsaXAtaG9yaXpvbnRhbHstbXMtZmlsdGVyOlwicHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkJhc2ljSW1hZ2Uocm90YXRpb249MCwgbWlycm9yPTEpXCI7dHJhbnNmb3JtOnNjYWxlWCgtMSl9LmZhLWZsaXAtdmVydGljYWx7dHJhbnNmb3JtOnNjYWxlWSgtMSl9LmZhLWZsaXAtaG9yaXpvbnRhbC5mYS1mbGlwLXZlcnRpY2FsLC5mYS1mbGlwLXZlcnRpY2Fsey1tcy1maWx0ZXI6XCJwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQmFzaWNJbWFnZShyb3RhdGlvbj0yLCBtaXJyb3I9MSlcIn0uZmEtZmxpcC1ob3Jpem9udGFsLmZhLWZsaXAtdmVydGljYWx7dHJhbnNmb3JtOnNjYWxlKC0xKX06cm9vdCAuZmEtZmxpcC1ob3Jpem9udGFsLDpyb290IC5mYS1mbGlwLXZlcnRpY2FsLDpyb290IC5mYS1yb3RhdGUtOTAsOnJvb3QgLmZhLXJvdGF0ZS0xODAsOnJvb3QgLmZhLXJvdGF0ZS0yNzB7LXdlYmtpdC1maWx0ZXI6bm9uZTtmaWx0ZXI6bm9uZX0uZmEtc3RhY2t7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjJlbTtsaW5lLWhlaWdodDoyZW07cG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwtYWxpZ246bWlkZGxlO3dpZHRoOjJlbX0uZmEtc3RhY2stMXgsLmZhLXN0YWNrLTJ4e2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTt0ZXh0LWFsaWduOmNlbnRlcjt3aWR0aDoxMDAlfS5mYS1zdGFjay0xeHtsaW5lLWhlaWdodDppbmhlcml0fS5mYS1zdGFjay0yeHtmb250LXNpemU6MmVtfS5mYS1pbnZlcnNle2NvbG9yOiNmZmZ9LmZhLTUwMHB4OmJlZm9yZXtjb250ZW50OlwiXFxmMjZlXCJ9LmZhLWFjY2Vzc2libGUtaWNvbjpiZWZvcmV7Y29udGVudDpcIlxcZjM2OFwifS5mYS1hY2N1c29mdDpiZWZvcmV7Y29udGVudDpcIlxcZjM2OVwifS5mYS1hZGRyZXNzLWJvb2s6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyYjlcIn0uZmEtYWRkcmVzcy1jYXJkOmJlZm9yZXtjb250ZW50OlwiXFxmMmJiXCJ9LmZhLWFkanVzdDpiZWZvcmV7Y29udGVudDpcIlxcZjA0MlwifS5mYS1hZG46YmVmb3Jle2NvbnRlbnQ6XCJcXGYxNzBcIn0uZmEtYWR2ZXJzYWw6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzNmFcIn0uZmEtYWZmaWxpYXRldGhlbWU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzNmJcIn0uZmEtYWxnb2xpYTpiZWZvcmV7Y29udGVudDpcIlxcZjM2Y1wifS5mYS1hbGlnbi1jZW50ZXI6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwMzdcIn0uZmEtYWxpZ24tanVzdGlmeTpiZWZvcmV7Y29udGVudDpcIlxcZjAzOVwifS5mYS1hbGlnbi1sZWZ0OmJlZm9yZXtjb250ZW50OlwiXFxmMDM2XCJ9LmZhLWFsaWduLXJpZ2h0OmJlZm9yZXtjb250ZW50OlwiXFxmMDM4XCJ9LmZhLWFsbGVyZ2llczpiZWZvcmV7Y29udGVudDpcIlxcZjQ2MVwifS5mYS1hbWF6b246YmVmb3Jle2NvbnRlbnQ6XCJcXGYyNzBcIn0uZmEtYW1hem9uLXBheTpiZWZvcmV7Y29udGVudDpcIlxcZjQyY1wifS5mYS1hbWJ1bGFuY2U6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwZjlcIn0uZmEtYW1lcmljYW4tc2lnbi1sYW5ndWFnZS1pbnRlcnByZXRpbmc6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyYTNcIn0uZmEtYW1pbGlhOmJlZm9yZXtjb250ZW50OlwiXFxmMzZkXCJ9LmZhLWFuY2hvcjpiZWZvcmV7Y29udGVudDpcIlxcZjEzZFwifS5mYS1hbmRyb2lkOmJlZm9yZXtjb250ZW50OlwiXFxmMTdiXCJ9LmZhLWFuZ2VsbGlzdDpiZWZvcmV7Y29udGVudDpcIlxcZjIwOVwifS5mYS1hbmdsZS1kb3VibGUtZG93bjpiZWZvcmV7Y29udGVudDpcIlxcZjEwM1wifS5mYS1hbmdsZS1kb3VibGUtbGVmdDpiZWZvcmV7Y29udGVudDpcIlxcZjEwMFwifS5mYS1hbmdsZS1kb3VibGUtcmlnaHQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxMDFcIn0uZmEtYW5nbGUtZG91YmxlLXVwOmJlZm9yZXtjb250ZW50OlwiXFxmMTAyXCJ9LmZhLWFuZ2xlLWRvd246YmVmb3Jle2NvbnRlbnQ6XCJcXGYxMDdcIn0uZmEtYW5nbGUtbGVmdDpiZWZvcmV7Y29udGVudDpcIlxcZjEwNFwifS5mYS1hbmdsZS1yaWdodDpiZWZvcmV7Y29udGVudDpcIlxcZjEwNVwifS5mYS1hbmdsZS11cDpiZWZvcmV7Y29udGVudDpcIlxcZjEwNlwifS5mYS1hbmdyeWNyZWF0aXZlOmJlZm9yZXtjb250ZW50OlwiXFxmMzZlXCJ9LmZhLWFuZ3VsYXI6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0MjBcIn0uZmEtYXBwLXN0b3JlOmJlZm9yZXtjb250ZW50OlwiXFxmMzZmXCJ9LmZhLWFwcC1zdG9yZS1pb3M6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzNzBcIn0uZmEtYXBwZXI6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzNzFcIn0uZmEtYXBwbGU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxNzlcIn0uZmEtYXBwbGUtcGF5OmJlZm9yZXtjb250ZW50OlwiXFxmNDE1XCJ9LmZhLWFyY2hpdmU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxODdcIn0uZmEtYXJyb3ctYWx0LWNpcmNsZS1kb3duOmJlZm9yZXtjb250ZW50OlwiXFxmMzU4XCJ9LmZhLWFycm93LWFsdC1jaXJjbGUtbGVmdDpiZWZvcmV7Y29udGVudDpcIlxcZjM1OVwifS5mYS1hcnJvdy1hbHQtY2lyY2xlLXJpZ2h0OmJlZm9yZXtjb250ZW50OlwiXFxmMzVhXCJ9LmZhLWFycm93LWFsdC1jaXJjbGUtdXA6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzNWJcIn0uZmEtYXJyb3ctY2lyY2xlLWRvd246YmVmb3Jle2NvbnRlbnQ6XCJcXGYwYWJcIn0uZmEtYXJyb3ctY2lyY2xlLWxlZnQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwYThcIn0uZmEtYXJyb3ctY2lyY2xlLXJpZ2h0OmJlZm9yZXtjb250ZW50OlwiXFxmMGE5XCJ9LmZhLWFycm93LWNpcmNsZS11cDpiZWZvcmV7Y29udGVudDpcIlxcZjBhYVwifS5mYS1hcnJvdy1kb3duOmJlZm9yZXtjb250ZW50OlwiXFxmMDYzXCJ9LmZhLWFycm93LWxlZnQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwNjBcIn0uZmEtYXJyb3ctcmlnaHQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwNjFcIn0uZmEtYXJyb3ctdXA6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwNjJcIn0uZmEtYXJyb3dzLWFsdDpiZWZvcmV7Y29udGVudDpcIlxcZjBiMlwifS5mYS1hcnJvd3MtYWx0LWg6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzMzdcIn0uZmEtYXJyb3dzLWFsdC12OmJlZm9yZXtjb250ZW50OlwiXFxmMzM4XCJ9LmZhLWFzc2lzdGl2ZS1saXN0ZW5pbmctc3lzdGVtczpiZWZvcmV7Y29udGVudDpcIlxcZjJhMlwifS5mYS1hc3RlcmlzazpiZWZvcmV7Y29udGVudDpcIlxcZjA2OVwifS5mYS1hc3ltbWV0cmlrOmJlZm9yZXtjb250ZW50OlwiXFxmMzcyXCJ9LmZhLWF0OmJlZm9yZXtjb250ZW50OlwiXFxmMWZhXCJ9LmZhLWF1ZGlibGU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzNzNcIn0uZmEtYXVkaW8tZGVzY3JpcHRpb246YmVmb3Jle2NvbnRlbnQ6XCJcXGYyOWVcIn0uZmEtYXV0b3ByZWZpeGVyOmJlZm9yZXtjb250ZW50OlwiXFxmNDFjXCJ9LmZhLWF2aWFuZXg6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzNzRcIn0uZmEtYXZpYXRvOmJlZm9yZXtjb250ZW50OlwiXFxmNDIxXCJ9LmZhLWF3czpiZWZvcmV7Y29udGVudDpcIlxcZjM3NVwifS5mYS1iYWNrd2FyZDpiZWZvcmV7Y29udGVudDpcIlxcZjA0YVwifS5mYS1iYWxhbmNlLXNjYWxlOmJlZm9yZXtjb250ZW50OlwiXFxmMjRlXCJ9LmZhLWJhbjpiZWZvcmV7Y29udGVudDpcIlxcZjA1ZVwifS5mYS1iYW5kLWFpZDpiZWZvcmV7Y29udGVudDpcIlxcZjQ2MlwifS5mYS1iYW5kY2FtcDpiZWZvcmV7Y29udGVudDpcIlxcZjJkNVwifS5mYS1iYXJjb2RlOmJlZm9yZXtjb250ZW50OlwiXFxmMDJhXCJ9LmZhLWJhcnM6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwYzlcIn0uZmEtYmFzZWJhbGwtYmFsbDpiZWZvcmV7Y29udGVudDpcIlxcZjQzM1wifS5mYS1iYXNrZXRiYWxsLWJhbGw6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0MzRcIn0uZmEtYmF0aDpiZWZvcmV7Y29udGVudDpcIlxcZjJjZFwifS5mYS1iYXR0ZXJ5LWVtcHR5OmJlZm9yZXtjb250ZW50OlwiXFxmMjQ0XCJ9LmZhLWJhdHRlcnktZnVsbDpiZWZvcmV7Y29udGVudDpcIlxcZjI0MFwifS5mYS1iYXR0ZXJ5LWhhbGY6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyNDJcIn0uZmEtYmF0dGVyeS1xdWFydGVyOmJlZm9yZXtjb250ZW50OlwiXFxmMjQzXCJ9LmZhLWJhdHRlcnktdGhyZWUtcXVhcnRlcnM6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyNDFcIn0uZmEtYmVkOmJlZm9yZXtjb250ZW50OlwiXFxmMjM2XCJ9LmZhLWJlZXI6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwZmNcIn0uZmEtYmVoYW5jZTpiZWZvcmV7Y29udGVudDpcIlxcZjFiNFwifS5mYS1iZWhhbmNlLXNxdWFyZTpiZWZvcmV7Y29udGVudDpcIlxcZjFiNVwifS5mYS1iZWxsOmJlZm9yZXtjb250ZW50OlwiXFxmMGYzXCJ9LmZhLWJlbGwtc2xhc2g6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxZjZcIn0uZmEtYmljeWNsZTpiZWZvcmV7Y29udGVudDpcIlxcZjIwNlwifS5mYS1iaW1vYmplY3Q6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzNzhcIn0uZmEtYmlub2N1bGFyczpiZWZvcmV7Y29udGVudDpcIlxcZjFlNVwifS5mYS1iaXJ0aGRheS1jYWtlOmJlZm9yZXtjb250ZW50OlwiXFxmMWZkXCJ9LmZhLWJpdGJ1Y2tldDpiZWZvcmV7Y29udGVudDpcIlxcZjE3MVwifS5mYS1iaXRjb2luOmJlZm9yZXtjb250ZW50OlwiXFxmMzc5XCJ9LmZhLWJpdHk6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzN2FcIn0uZmEtYmxhY2stdGllOmJlZm9yZXtjb250ZW50OlwiXFxmMjdlXCJ9LmZhLWJsYWNrYmVycnk6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzN2JcIn0uZmEtYmxpbmQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyOWRcIn0uZmEtYmxvZ2dlcjpiZWZvcmV7Y29udGVudDpcIlxcZjM3Y1wifS5mYS1ibG9nZ2VyLWI6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzN2RcIn0uZmEtYmx1ZXRvb3RoOmJlZm9yZXtjb250ZW50OlwiXFxmMjkzXCJ9LmZhLWJsdWV0b290aC1iOmJlZm9yZXtjb250ZW50OlwiXFxmMjk0XCJ9LmZhLWJvbGQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwMzJcIn0uZmEtYm9sdDpiZWZvcmV7Y29udGVudDpcIlxcZjBlN1wifS5mYS1ib21iOmJlZm9yZXtjb250ZW50OlwiXFxmMWUyXCJ9LmZhLWJvb2s6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwMmRcIn0uZmEtYm9va21hcms6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwMmVcIn0uZmEtYm93bGluZy1iYWxsOmJlZm9yZXtjb250ZW50OlwiXFxmNDM2XCJ9LmZhLWJveDpiZWZvcmV7Y29udGVudDpcIlxcZjQ2NlwifS5mYS1ib3gtb3BlbjpiZWZvcmV7Y29udGVudDpcIlxcZjQ5ZVwifS5mYS1ib3hlczpiZWZvcmV7Y29udGVudDpcIlxcZjQ2OFwifS5mYS1icmFpbGxlOmJlZm9yZXtjb250ZW50OlwiXFxmMmExXCJ9LmZhLWJyaWVmY2FzZTpiZWZvcmV7Y29udGVudDpcIlxcZjBiMVwifS5mYS1icmllZmNhc2UtbWVkaWNhbDpiZWZvcmV7Y29udGVudDpcIlxcZjQ2OVwifS5mYS1idGM6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxNWFcIn0uZmEtYnVnOmJlZm9yZXtjb250ZW50OlwiXFxmMTg4XCJ9LmZhLWJ1aWxkaW5nOmJlZm9yZXtjb250ZW50OlwiXFxmMWFkXCJ9LmZhLWJ1bGxob3JuOmJlZm9yZXtjb250ZW50OlwiXFxmMGExXCJ9LmZhLWJ1bGxzZXllOmJlZm9yZXtjb250ZW50OlwiXFxmMTQwXCJ9LmZhLWJ1cm46YmVmb3Jle2NvbnRlbnQ6XCJcXGY0NmFcIn0uZmEtYnVyb21vYmVsZXhwZXJ0ZTpiZWZvcmV7Y29udGVudDpcIlxcZjM3ZlwifS5mYS1idXM6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyMDdcIn0uZmEtYnV5c2VsbGFkczpiZWZvcmV7Y29udGVudDpcIlxcZjIwZFwifS5mYS1jYWxjdWxhdG9yOmJlZm9yZXtjb250ZW50OlwiXFxmMWVjXCJ9LmZhLWNhbGVuZGFyOmJlZm9yZXtjb250ZW50OlwiXFxmMTMzXCJ9LmZhLWNhbGVuZGFyLWFsdDpiZWZvcmV7Y29udGVudDpcIlxcZjA3M1wifS5mYS1jYWxlbmRhci1jaGVjazpiZWZvcmV7Y29udGVudDpcIlxcZjI3NFwifS5mYS1jYWxlbmRhci1taW51czpiZWZvcmV7Y29udGVudDpcIlxcZjI3MlwifS5mYS1jYWxlbmRhci1wbHVzOmJlZm9yZXtjb250ZW50OlwiXFxmMjcxXCJ9LmZhLWNhbGVuZGFyLXRpbWVzOmJlZm9yZXtjb250ZW50OlwiXFxmMjczXCJ9LmZhLWNhbWVyYTpiZWZvcmV7Y29udGVudDpcIlxcZjAzMFwifS5mYS1jYW1lcmEtcmV0cm86YmVmb3Jle2NvbnRlbnQ6XCJcXGYwODNcIn0uZmEtY2Fwc3VsZXM6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0NmJcIn0uZmEtY2FyOmJlZm9yZXtjb250ZW50OlwiXFxmMWI5XCJ9LmZhLWNhcmV0LWRvd246YmVmb3Jle2NvbnRlbnQ6XCJcXGYwZDdcIn0uZmEtY2FyZXQtbGVmdDpiZWZvcmV7Y29udGVudDpcIlxcZjBkOVwifS5mYS1jYXJldC1yaWdodDpiZWZvcmV7Y29udGVudDpcIlxcZjBkYVwifS5mYS1jYXJldC1zcXVhcmUtZG93bjpiZWZvcmV7Y29udGVudDpcIlxcZjE1MFwifS5mYS1jYXJldC1zcXVhcmUtbGVmdDpiZWZvcmV7Y29udGVudDpcIlxcZjE5MVwifS5mYS1jYXJldC1zcXVhcmUtcmlnaHQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxNTJcIn0uZmEtY2FyZXQtc3F1YXJlLXVwOmJlZm9yZXtjb250ZW50OlwiXFxmMTUxXCJ9LmZhLWNhcmV0LXVwOmJlZm9yZXtjb250ZW50OlwiXFxmMGQ4XCJ9LmZhLWNhcnQtYXJyb3ctZG93bjpiZWZvcmV7Y29udGVudDpcIlxcZjIxOFwifS5mYS1jYXJ0LXBsdXM6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyMTdcIn0uZmEtY2MtYW1hem9uLXBheTpiZWZvcmV7Y29udGVudDpcIlxcZjQyZFwifS5mYS1jYy1hbWV4OmJlZm9yZXtjb250ZW50OlwiXFxmMWYzXCJ9LmZhLWNjLWFwcGxlLXBheTpiZWZvcmV7Y29udGVudDpcIlxcZjQxNlwifS5mYS1jYy1kaW5lcnMtY2x1YjpiZWZvcmV7Y29udGVudDpcIlxcZjI0Y1wifS5mYS1jYy1kaXNjb3ZlcjpiZWZvcmV7Y29udGVudDpcIlxcZjFmMlwifS5mYS1jYy1qY2I6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyNGJcIn0uZmEtY2MtbWFzdGVyY2FyZDpiZWZvcmV7Y29udGVudDpcIlxcZjFmMVwifS5mYS1jYy1wYXlwYWw6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxZjRcIn0uZmEtY2Mtc3RyaXBlOmJlZm9yZXtjb250ZW50OlwiXFxmMWY1XCJ9LmZhLWNjLXZpc2E6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxZjBcIn0uZmEtY2VudGVyY29kZTpiZWZvcmV7Y29udGVudDpcIlxcZjM4MFwifS5mYS1jZXJ0aWZpY2F0ZTpiZWZvcmV7Y29udGVudDpcIlxcZjBhM1wifS5mYS1jaGFydC1hcmVhOmJlZm9yZXtjb250ZW50OlwiXFxmMWZlXCJ9LmZhLWNoYXJ0LWJhcjpiZWZvcmV7Y29udGVudDpcIlxcZjA4MFwifS5mYS1jaGFydC1saW5lOmJlZm9yZXtjb250ZW50OlwiXFxmMjAxXCJ9LmZhLWNoYXJ0LXBpZTpiZWZvcmV7Y29udGVudDpcIlxcZjIwMFwifS5mYS1jaGVjazpiZWZvcmV7Y29udGVudDpcIlxcZjAwY1wifS5mYS1jaGVjay1jaXJjbGU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwNThcIn0uZmEtY2hlY2stc3F1YXJlOmJlZm9yZXtjb250ZW50OlwiXFxmMTRhXCJ9LmZhLWNoZXNzOmJlZm9yZXtjb250ZW50OlwiXFxmNDM5XCJ9LmZhLWNoZXNzLWJpc2hvcDpiZWZvcmV7Y29udGVudDpcIlxcZjQzYVwifS5mYS1jaGVzcy1ib2FyZDpiZWZvcmV7Y29udGVudDpcIlxcZjQzY1wifS5mYS1jaGVzcy1raW5nOmJlZm9yZXtjb250ZW50OlwiXFxmNDNmXCJ9LmZhLWNoZXNzLWtuaWdodDpiZWZvcmV7Y29udGVudDpcIlxcZjQ0MVwifS5mYS1jaGVzcy1wYXduOmJlZm9yZXtjb250ZW50OlwiXFxmNDQzXCJ9LmZhLWNoZXNzLXF1ZWVuOmJlZm9yZXtjb250ZW50OlwiXFxmNDQ1XCJ9LmZhLWNoZXNzLXJvb2s6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0NDdcIn0uZmEtY2hldnJvbi1jaXJjbGUtZG93bjpiZWZvcmV7Y29udGVudDpcIlxcZjEzYVwifS5mYS1jaGV2cm9uLWNpcmNsZS1sZWZ0OmJlZm9yZXtjb250ZW50OlwiXFxmMTM3XCJ9LmZhLWNoZXZyb24tY2lyY2xlLXJpZ2h0OmJlZm9yZXtjb250ZW50OlwiXFxmMTM4XCJ9LmZhLWNoZXZyb24tY2lyY2xlLXVwOmJlZm9yZXtjb250ZW50OlwiXFxmMTM5XCJ9LmZhLWNoZXZyb24tZG93bjpiZWZvcmV7Y29udGVudDpcIlxcZjA3OFwifS5mYS1jaGV2cm9uLWxlZnQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwNTNcIn0uZmEtY2hldnJvbi1yaWdodDpiZWZvcmV7Y29udGVudDpcIlxcZjA1NFwifS5mYS1jaGV2cm9uLXVwOmJlZm9yZXtjb250ZW50OlwiXFxmMDc3XCJ9LmZhLWNoaWxkOmJlZm9yZXtjb250ZW50OlwiXFxmMWFlXCJ9LmZhLWNocm9tZTpiZWZvcmV7Y29udGVudDpcIlxcZjI2OFwifS5mYS1jaXJjbGU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxMTFcIn0uZmEtY2lyY2xlLW5vdGNoOmJlZm9yZXtjb250ZW50OlwiXFxmMWNlXCJ9LmZhLWNsaXBib2FyZDpiZWZvcmV7Y29udGVudDpcIlxcZjMyOFwifS5mYS1jbGlwYm9hcmQtY2hlY2s6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0NmNcIn0uZmEtY2xpcGJvYXJkLWxpc3Q6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0NmRcIn0uZmEtY2xvY2s6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwMTdcIn0uZmEtY2xvbmU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyNGRcIn0uZmEtY2xvc2VkLWNhcHRpb25pbmc6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyMGFcIn0uZmEtY2xvdWQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwYzJcIn0uZmEtY2xvdWQtZG93bmxvYWQtYWx0OmJlZm9yZXtjb250ZW50OlwiXFxmMzgxXCJ9LmZhLWNsb3VkLXVwbG9hZC1hbHQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzODJcIn0uZmEtY2xvdWRzY2FsZTpiZWZvcmV7Y29udGVudDpcIlxcZjM4M1wifS5mYS1jbG91ZHNtaXRoOmJlZm9yZXtjb250ZW50OlwiXFxmMzg0XCJ9LmZhLWNsb3VkdmVyc2lmeTpiZWZvcmV7Y29udGVudDpcIlxcZjM4NVwifS5mYS1jb2RlOmJlZm9yZXtjb250ZW50OlwiXFxmMTIxXCJ9LmZhLWNvZGUtYnJhbmNoOmJlZm9yZXtjb250ZW50OlwiXFxmMTI2XCJ9LmZhLWNvZGVwZW46YmVmb3Jle2NvbnRlbnQ6XCJcXGYxY2JcIn0uZmEtY29kaWVwaWU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyODRcIn0uZmEtY29mZmVlOmJlZm9yZXtjb250ZW50OlwiXFxmMGY0XCJ9LmZhLWNvZzpiZWZvcmV7Y29udGVudDpcIlxcZjAxM1wifS5mYS1jb2dzOmJlZm9yZXtjb250ZW50OlwiXFxmMDg1XCJ9LmZhLWNvbHVtbnM6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwZGJcIn0uZmEtY29tbWVudDpiZWZvcmV7Y29udGVudDpcIlxcZjA3NVwifS5mYS1jb21tZW50LWFsdDpiZWZvcmV7Y29udGVudDpcIlxcZjI3YVwifS5mYS1jb21tZW50LWRvdHM6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0YWRcIn0uZmEtY29tbWVudC1zbGFzaDpiZWZvcmV7Y29udGVudDpcIlxcZjRiM1wifS5mYS1jb21tZW50czpiZWZvcmV7Y29udGVudDpcIlxcZjA4NlwifS5mYS1jb21wYXNzOmJlZm9yZXtjb250ZW50OlwiXFxmMTRlXCJ9LmZhLWNvbXByZXNzOmJlZm9yZXtjb250ZW50OlwiXFxmMDY2XCJ9LmZhLWNvbm5lY3RkZXZlbG9wOmJlZm9yZXtjb250ZW50OlwiXFxmMjBlXCJ9LmZhLWNvbnRhbzpiZWZvcmV7Y29udGVudDpcIlxcZjI2ZFwifS5mYS1jb3B5OmJlZm9yZXtjb250ZW50OlwiXFxmMGM1XCJ9LmZhLWNvcHlyaWdodDpiZWZvcmV7Y29udGVudDpcIlxcZjFmOVwifS5mYS1jb3VjaDpiZWZvcmV7Y29udGVudDpcIlxcZjRiOFwifS5mYS1jcGFuZWw6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzODhcIn0uZmEtY3JlYXRpdmUtY29tbW9uczpiZWZvcmV7Y29udGVudDpcIlxcZjI1ZVwifS5mYS1jcmVkaXQtY2FyZDpiZWZvcmV7Y29udGVudDpcIlxcZjA5ZFwifS5mYS1jcm9wOmJlZm9yZXtjb250ZW50OlwiXFxmMTI1XCJ9LmZhLWNyb3NzaGFpcnM6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwNWJcIn0uZmEtY3NzMzpiZWZvcmV7Y29udGVudDpcIlxcZjEzY1wifS5mYS1jc3MzLWFsdDpiZWZvcmV7Y29udGVudDpcIlxcZjM4YlwifS5mYS1jdWJlOmJlZm9yZXtjb250ZW50OlwiXFxmMWIyXCJ9LmZhLWN1YmVzOmJlZm9yZXtjb250ZW50OlwiXFxmMWIzXCJ9LmZhLWN1dDpiZWZvcmV7Y29udGVudDpcIlxcZjBjNFwifS5mYS1jdXR0bGVmaXNoOmJlZm9yZXtjb250ZW50OlwiXFxmMzhjXCJ9LmZhLWQtYW5kLWQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzOGRcIn0uZmEtZGFzaGN1YmU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyMTBcIn0uZmEtZGF0YWJhc2U6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxYzBcIn0uZmEtZGVhZjpiZWZvcmV7Y29udGVudDpcIlxcZjJhNFwifS5mYS1kZWxpY2lvdXM6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxYTVcIn0uZmEtZGVwbG95ZG9nOmJlZm9yZXtjb250ZW50OlwiXFxmMzhlXCJ9LmZhLWRlc2twcm86YmVmb3Jle2NvbnRlbnQ6XCJcXGYzOGZcIn0uZmEtZGVza3RvcDpiZWZvcmV7Y29udGVudDpcIlxcZjEwOFwifS5mYS1kZXZpYW50YXJ0OmJlZm9yZXtjb250ZW50OlwiXFxmMWJkXCJ9LmZhLWRpYWdub3NlczpiZWZvcmV7Y29udGVudDpcIlxcZjQ3MFwifS5mYS1kaWdnOmJlZm9yZXtjb250ZW50OlwiXFxmMWE2XCJ9LmZhLWRpZ2l0YWwtb2NlYW46YmVmb3Jle2NvbnRlbnQ6XCJcXGYzOTFcIn0uZmEtZGlzY29yZDpiZWZvcmV7Y29udGVudDpcIlxcZjM5MlwifS5mYS1kaXNjb3Vyc2U6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzOTNcIn0uZmEtZG5hOmJlZm9yZXtjb250ZW50OlwiXFxmNDcxXCJ9LmZhLWRvY2h1YjpiZWZvcmV7Y29udGVudDpcIlxcZjM5NFwifS5mYS1kb2NrZXI6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzOTVcIn0uZmEtZG9sbGFyLXNpZ246YmVmb3Jle2NvbnRlbnQ6XCJcXGYxNTVcIn0uZmEtZG9sbHk6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0NzJcIn0uZmEtZG9sbHktZmxhdGJlZDpiZWZvcmV7Y29udGVudDpcIlxcZjQ3NFwifS5mYS1kb25hdGU6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0YjlcIn0uZmEtZG90LWNpcmNsZTpiZWZvcmV7Y29udGVudDpcIlxcZjE5MlwifS5mYS1kb3ZlOmJlZm9yZXtjb250ZW50OlwiXFxmNGJhXCJ9LmZhLWRvd25sb2FkOmJlZm9yZXtjb250ZW50OlwiXFxmMDE5XCJ9LmZhLWRyYWZ0MmRpZ2l0YWw6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzOTZcIn0uZmEtZHJpYmJibGU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxN2RcIn0uZmEtZHJpYmJibGUtc3F1YXJlOmJlZm9yZXtjb250ZW50OlwiXFxmMzk3XCJ9LmZhLWRyb3Bib3g6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxNmJcIn0uZmEtZHJ1cGFsOmJlZm9yZXtjb250ZW50OlwiXFxmMWE5XCJ9LmZhLWR5YWxvZzpiZWZvcmV7Y29udGVudDpcIlxcZjM5OVwifS5mYS1lYXJseWJpcmRzOmJlZm9yZXtjb250ZW50OlwiXFxmMzlhXCJ9LmZhLWVkZ2U6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyODJcIn0uZmEtZWRpdDpiZWZvcmV7Y29udGVudDpcIlxcZjA0NFwifS5mYS1lamVjdDpiZWZvcmV7Y29udGVudDpcIlxcZjA1MlwifS5mYS1lbGVtZW50b3I6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0MzBcIn0uZmEtZWxsaXBzaXMtaDpiZWZvcmV7Y29udGVudDpcIlxcZjE0MVwifS5mYS1lbGxpcHNpcy12OmJlZm9yZXtjb250ZW50OlwiXFxmMTQyXCJ9LmZhLWVtYmVyOmJlZm9yZXtjb250ZW50OlwiXFxmNDIzXCJ9LmZhLWVtcGlyZTpiZWZvcmV7Y29udGVudDpcIlxcZjFkMVwifS5mYS1lbnZlbG9wZTpiZWZvcmV7Y29udGVudDpcIlxcZjBlMFwifS5mYS1lbnZlbG9wZS1vcGVuOmJlZm9yZXtjb250ZW50OlwiXFxmMmI2XCJ9LmZhLWVudmVsb3BlLXNxdWFyZTpiZWZvcmV7Y29udGVudDpcIlxcZjE5OVwifS5mYS1lbnZpcmE6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyOTlcIn0uZmEtZXJhc2VyOmJlZm9yZXtjb250ZW50OlwiXFxmMTJkXCJ9LmZhLWVybGFuZzpiZWZvcmV7Y29udGVudDpcIlxcZjM5ZFwifS5mYS1ldGhlcmV1bTpiZWZvcmV7Y29udGVudDpcIlxcZjQyZVwifS5mYS1ldHN5OmJlZm9yZXtjb250ZW50OlwiXFxmMmQ3XCJ9LmZhLWV1cm8tc2lnbjpiZWZvcmV7Y29udGVudDpcIlxcZjE1M1wifS5mYS1leGNoYW5nZS1hbHQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzNjJcIn0uZmEtZXhjbGFtYXRpb246YmVmb3Jle2NvbnRlbnQ6XCJcXGYxMmFcIn0uZmEtZXhjbGFtYXRpb24tY2lyY2xlOmJlZm9yZXtjb250ZW50OlwiXFxmMDZhXCJ9LmZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlOmJlZm9yZXtjb250ZW50OlwiXFxmMDcxXCJ9LmZhLWV4cGFuZDpiZWZvcmV7Y29udGVudDpcIlxcZjA2NVwifS5mYS1leHBhbmQtYXJyb3dzLWFsdDpiZWZvcmV7Y29udGVudDpcIlxcZjMxZVwifS5mYS1leHBlZGl0ZWRzc2w6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyM2VcIn0uZmEtZXh0ZXJuYWwtbGluay1hbHQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzNWRcIn0uZmEtZXh0ZXJuYWwtbGluay1zcXVhcmUtYWx0OmJlZm9yZXtjb250ZW50OlwiXFxmMzYwXCJ9LmZhLWV5ZTpiZWZvcmV7Y29udGVudDpcIlxcZjA2ZVwifS5mYS1leWUtZHJvcHBlcjpiZWZvcmV7Y29udGVudDpcIlxcZjFmYlwifS5mYS1leWUtc2xhc2g6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwNzBcIn0uZmEtZmFjZWJvb2s6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwOWFcIn0uZmEtZmFjZWJvb2stZjpiZWZvcmV7Y29udGVudDpcIlxcZjM5ZVwifS5mYS1mYWNlYm9vay1tZXNzZW5nZXI6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzOWZcIn0uZmEtZmFjZWJvb2stc3F1YXJlOmJlZm9yZXtjb250ZW50OlwiXFxmMDgyXCJ9LmZhLWZhc3QtYmFja3dhcmQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwNDlcIn0uZmEtZmFzdC1mb3J3YXJkOmJlZm9yZXtjb250ZW50OlwiXFxmMDUwXCJ9LmZhLWZheDpiZWZvcmV7Y29udGVudDpcIlxcZjFhY1wifS5mYS1mZW1hbGU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxODJcIn0uZmEtZmlnaHRlci1qZXQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwZmJcIn0uZmEtZmlsZTpiZWZvcmV7Y29udGVudDpcIlxcZjE1YlwifS5mYS1maWxlLWFsdDpiZWZvcmV7Y29udGVudDpcIlxcZjE1Y1wifS5mYS1maWxlLWFyY2hpdmU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxYzZcIn0uZmEtZmlsZS1hdWRpbzpiZWZvcmV7Y29udGVudDpcIlxcZjFjN1wifS5mYS1maWxlLWNvZGU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxYzlcIn0uZmEtZmlsZS1leGNlbDpiZWZvcmV7Y29udGVudDpcIlxcZjFjM1wifS5mYS1maWxlLWltYWdlOmJlZm9yZXtjb250ZW50OlwiXFxmMWM1XCJ9LmZhLWZpbGUtbWVkaWNhbDpiZWZvcmV7Y29udGVudDpcIlxcZjQ3N1wifS5mYS1maWxlLW1lZGljYWwtYWx0OmJlZm9yZXtjb250ZW50OlwiXFxmNDc4XCJ9LmZhLWZpbGUtcGRmOmJlZm9yZXtjb250ZW50OlwiXFxmMWMxXCJ9LmZhLWZpbGUtcG93ZXJwb2ludDpiZWZvcmV7Y29udGVudDpcIlxcZjFjNFwifS5mYS1maWxlLXZpZGVvOmJlZm9yZXtjb250ZW50OlwiXFxmMWM4XCJ9LmZhLWZpbGUtd29yZDpiZWZvcmV7Y29udGVudDpcIlxcZjFjMlwifS5mYS1maWxtOmJlZm9yZXtjb250ZW50OlwiXFxmMDA4XCJ9LmZhLWZpbHRlcjpiZWZvcmV7Y29udGVudDpcIlxcZjBiMFwifS5mYS1maXJlOmJlZm9yZXtjb250ZW50OlwiXFxmMDZkXCJ9LmZhLWZpcmUtZXh0aW5ndWlzaGVyOmJlZm9yZXtjb250ZW50OlwiXFxmMTM0XCJ9LmZhLWZpcmVmb3g6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyNjlcIn0uZmEtZmlyc3QtYWlkOmJlZm9yZXtjb250ZW50OlwiXFxmNDc5XCJ9LmZhLWZpcnN0LW9yZGVyOmJlZm9yZXtjb250ZW50OlwiXFxmMmIwXCJ9LmZhLWZpcnN0ZHJhZnQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzYTFcIn0uZmEtZmxhZzpiZWZvcmV7Y29udGVudDpcIlxcZjAyNFwifS5mYS1mbGFnLWNoZWNrZXJlZDpiZWZvcmV7Y29udGVudDpcIlxcZjExZVwifS5mYS1mbGFzazpiZWZvcmV7Y29udGVudDpcIlxcZjBjM1wifS5mYS1mbGlja3I6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxNmVcIn0uZmEtZmxpcGJvYXJkOmJlZm9yZXtjb250ZW50OlwiXFxmNDRkXCJ9LmZhLWZseTpiZWZvcmV7Y29udGVudDpcIlxcZjQxN1wifS5mYS1mb2xkZXI6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwN2JcIn0uZmEtZm9sZGVyLW9wZW46YmVmb3Jle2NvbnRlbnQ6XCJcXGYwN2NcIn0uZmEtZm9udDpiZWZvcmV7Y29udGVudDpcIlxcZjAzMVwifS5mYS1mb250LWF3ZXNvbWU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyYjRcIn0uZmEtZm9udC1hd2Vzb21lLWFsdDpiZWZvcmV7Y29udGVudDpcIlxcZjM1Y1wifS5mYS1mb250LWF3ZXNvbWUtZmxhZzpiZWZvcmV7Y29udGVudDpcIlxcZjQyNVwifS5mYS1mb250aWNvbnM6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyODBcIn0uZmEtZm9udGljb25zLWZpOmJlZm9yZXtjb250ZW50OlwiXFxmM2EyXCJ9LmZhLWZvb3RiYWxsLWJhbGw6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0NGVcIn0uZmEtZm9ydC1hd2Vzb21lOmJlZm9yZXtjb250ZW50OlwiXFxmMjg2XCJ9LmZhLWZvcnQtYXdlc29tZS1hbHQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzYTNcIn0uZmEtZm9ydW1iZWU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyMTFcIn0uZmEtZm9yd2FyZDpiZWZvcmV7Y29udGVudDpcIlxcZjA0ZVwifS5mYS1mb3Vyc3F1YXJlOmJlZm9yZXtjb250ZW50OlwiXFxmMTgwXCJ9LmZhLWZyZWUtY29kZS1jYW1wOmJlZm9yZXtjb250ZW50OlwiXFxmMmM1XCJ9LmZhLWZyZWVic2Q6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzYTRcIn0uZmEtZnJvd246YmVmb3Jle2NvbnRlbnQ6XCJcXGYxMTlcIn0uZmEtZnV0Ym9sOmJlZm9yZXtjb250ZW50OlwiXFxmMWUzXCJ9LmZhLWdhbWVwYWQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxMWJcIn0uZmEtZ2F2ZWw6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwZTNcIn0uZmEtZ2VtOmJlZm9yZXtjb250ZW50OlwiXFxmM2E1XCJ9LmZhLWdlbmRlcmxlc3M6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyMmRcIn0uZmEtZ2V0LXBvY2tldDpiZWZvcmV7Y29udGVudDpcIlxcZjI2NVwifS5mYS1nZzpiZWZvcmV7Y29udGVudDpcIlxcZjI2MFwifS5mYS1nZy1jaXJjbGU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyNjFcIn0uZmEtZ2lmdDpiZWZvcmV7Y29udGVudDpcIlxcZjA2YlwifS5mYS1naXQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxZDNcIn0uZmEtZ2l0LXNxdWFyZTpiZWZvcmV7Y29udGVudDpcIlxcZjFkMlwifS5mYS1naXRodWI6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwOWJcIn0uZmEtZ2l0aHViLWFsdDpiZWZvcmV7Y29udGVudDpcIlxcZjExM1wifS5mYS1naXRodWItc3F1YXJlOmJlZm9yZXtjb250ZW50OlwiXFxmMDkyXCJ9LmZhLWdpdGtyYWtlbjpiZWZvcmV7Y29udGVudDpcIlxcZjNhNlwifS5mYS1naXRsYWI6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyOTZcIn0uZmEtZ2l0dGVyOmJlZm9yZXtjb250ZW50OlwiXFxmNDI2XCJ9LmZhLWdsYXNzLW1hcnRpbmk6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwMDBcIn0uZmEtZ2xpZGU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyYTVcIn0uZmEtZ2xpZGUtZzpiZWZvcmV7Y29udGVudDpcIlxcZjJhNlwifS5mYS1nbG9iZTpiZWZvcmV7Y29udGVudDpcIlxcZjBhY1wifS5mYS1nb2ZvcmU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzYTdcIn0uZmEtZ29sZi1iYWxsOmJlZm9yZXtjb250ZW50OlwiXFxmNDUwXCJ9LmZhLWdvb2RyZWFkczpiZWZvcmV7Y29udGVudDpcIlxcZjNhOFwifS5mYS1nb29kcmVhZHMtZzpiZWZvcmV7Y29udGVudDpcIlxcZjNhOVwifS5mYS1nb29nbGU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxYTBcIn0uZmEtZ29vZ2xlLWRyaXZlOmJlZm9yZXtjb250ZW50OlwiXFxmM2FhXCJ9LmZhLWdvb2dsZS1wbGF5OmJlZm9yZXtjb250ZW50OlwiXFxmM2FiXCJ9LmZhLWdvb2dsZS1wbHVzOmJlZm9yZXtjb250ZW50OlwiXFxmMmIzXCJ9LmZhLWdvb2dsZS1wbHVzLWc6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwZDVcIn0uZmEtZ29vZ2xlLXBsdXMtc3F1YXJlOmJlZm9yZXtjb250ZW50OlwiXFxmMGQ0XCJ9LmZhLWdvb2dsZS13YWxsZXQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxZWVcIn0uZmEtZ3JhZHVhdGlvbi1jYXA6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxOWRcIn0uZmEtZ3JhdGlwYXk6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxODRcIn0uZmEtZ3JhdjpiZWZvcmV7Y29udGVudDpcIlxcZjJkNlwifS5mYS1ncmlwZmlyZTpiZWZvcmV7Y29udGVudDpcIlxcZjNhY1wifS5mYS1ncnVudDpiZWZvcmV7Y29udGVudDpcIlxcZjNhZFwifS5mYS1ndWxwOmJlZm9yZXtjb250ZW50OlwiXFxmM2FlXCJ9LmZhLWgtc3F1YXJlOmJlZm9yZXtjb250ZW50OlwiXFxmMGZkXCJ9LmZhLWhhY2tlci1uZXdzOmJlZm9yZXtjb250ZW50OlwiXFxmMWQ0XCJ9LmZhLWhhY2tlci1uZXdzLXNxdWFyZTpiZWZvcmV7Y29udGVudDpcIlxcZjNhZlwifS5mYS1oYW5kLWhvbGRpbmc6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0YmRcIn0uZmEtaGFuZC1ob2xkaW5nLWhlYXJ0OmJlZm9yZXtjb250ZW50OlwiXFxmNGJlXCJ9LmZhLWhhbmQtaG9sZGluZy11c2Q6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0YzBcIn0uZmEtaGFuZC1saXphcmQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyNThcIn0uZmEtaGFuZC1wYXBlcjpiZWZvcmV7Y29udGVudDpcIlxcZjI1NlwifS5mYS1oYW5kLXBlYWNlOmJlZm9yZXtjb250ZW50OlwiXFxmMjViXCJ9LmZhLWhhbmQtcG9pbnQtZG93bjpiZWZvcmV7Y29udGVudDpcIlxcZjBhN1wifS5mYS1oYW5kLXBvaW50LWxlZnQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwYTVcIn0uZmEtaGFuZC1wb2ludC1yaWdodDpiZWZvcmV7Y29udGVudDpcIlxcZjBhNFwifS5mYS1oYW5kLXBvaW50LXVwOmJlZm9yZXtjb250ZW50OlwiXFxmMGE2XCJ9LmZhLWhhbmQtcG9pbnRlcjpiZWZvcmV7Y29udGVudDpcIlxcZjI1YVwifS5mYS1oYW5kLXJvY2s6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyNTVcIn0uZmEtaGFuZC1zY2lzc29yczpiZWZvcmV7Y29udGVudDpcIlxcZjI1N1wifS5mYS1oYW5kLXNwb2NrOmJlZm9yZXtjb250ZW50OlwiXFxmMjU5XCJ9LmZhLWhhbmRzOmJlZm9yZXtjb250ZW50OlwiXFxmNGMyXCJ9LmZhLWhhbmRzLWhlbHBpbmc6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0YzRcIn0uZmEtaGFuZHNoYWtlOmJlZm9yZXtjb250ZW50OlwiXFxmMmI1XCJ9LmZhLWhhc2h0YWc6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyOTJcIn0uZmEtaGRkOmJlZm9yZXtjb250ZW50OlwiXFxmMGEwXCJ9LmZhLWhlYWRpbmc6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxZGNcIn0uZmEtaGVhZHBob25lczpiZWZvcmV7Y29udGVudDpcIlxcZjAyNVwifS5mYS1oZWFydDpiZWZvcmV7Y29udGVudDpcIlxcZjAwNFwifS5mYS1oZWFydGJlYXQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyMWVcIn0uZmEtaGlwczpiZWZvcmV7Y29udGVudDpcIlxcZjQ1MlwifS5mYS1oaXJlLWEtaGVscGVyOmJlZm9yZXtjb250ZW50OlwiXFxmM2IwXCJ9LmZhLWhpc3Rvcnk6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxZGFcIn0uZmEtaG9ja2V5LXB1Y2s6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0NTNcIn0uZmEtaG9tZTpiZWZvcmV7Y29udGVudDpcIlxcZjAxNVwifS5mYS1ob29saTpiZWZvcmV7Y29udGVudDpcIlxcZjQyN1wifS5mYS1ob3NwaXRhbDpiZWZvcmV7Y29udGVudDpcIlxcZjBmOFwifS5mYS1ob3NwaXRhbC1hbHQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0N2RcIn0uZmEtaG9zcGl0YWwtc3ltYm9sOmJlZm9yZXtjb250ZW50OlwiXFxmNDdlXCJ9LmZhLWhvdGphcjpiZWZvcmV7Y29udGVudDpcIlxcZjNiMVwifS5mYS1ob3VyZ2xhc3M6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyNTRcIn0uZmEtaG91cmdsYXNzLWVuZDpiZWZvcmV7Y29udGVudDpcIlxcZjI1M1wifS5mYS1ob3VyZ2xhc3MtaGFsZjpiZWZvcmV7Y29udGVudDpcIlxcZjI1MlwifS5mYS1ob3VyZ2xhc3Mtc3RhcnQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyNTFcIn0uZmEtaG91eno6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyN2NcIn0uZmEtaHRtbDU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxM2JcIn0uZmEtaHVic3BvdDpiZWZvcmV7Y29udGVudDpcIlxcZjNiMlwifS5mYS1pLWN1cnNvcjpiZWZvcmV7Y29udGVudDpcIlxcZjI0NlwifS5mYS1pZC1iYWRnZTpiZWZvcmV7Y29udGVudDpcIlxcZjJjMVwifS5mYS1pZC1jYXJkOmJlZm9yZXtjb250ZW50OlwiXFxmMmMyXCJ9LmZhLWlkLWNhcmQtYWx0OmJlZm9yZXtjb250ZW50OlwiXFxmNDdmXCJ9LmZhLWltYWdlOmJlZm9yZXtjb250ZW50OlwiXFxmMDNlXCJ9LmZhLWltYWdlczpiZWZvcmV7Y29udGVudDpcIlxcZjMwMlwifS5mYS1pbWRiOmJlZm9yZXtjb250ZW50OlwiXFxmMmQ4XCJ9LmZhLWluYm94OmJlZm9yZXtjb250ZW50OlwiXFxmMDFjXCJ9LmZhLWluZGVudDpiZWZvcmV7Y29udGVudDpcIlxcZjAzY1wifS5mYS1pbmR1c3RyeTpiZWZvcmV7Y29udGVudDpcIlxcZjI3NVwifS5mYS1pbmZvOmJlZm9yZXtjb250ZW50OlwiXFxmMTI5XCJ9LmZhLWluZm8tY2lyY2xlOmJlZm9yZXtjb250ZW50OlwiXFxmMDVhXCJ9LmZhLWluc3RhZ3JhbTpiZWZvcmV7Y29udGVudDpcIlxcZjE2ZFwifS5mYS1pbnRlcm5ldC1leHBsb3JlcjpiZWZvcmV7Y29udGVudDpcIlxcZjI2YlwifS5mYS1pb3hob3N0OmJlZm9yZXtjb250ZW50OlwiXFxmMjA4XCJ9LmZhLWl0YWxpYzpiZWZvcmV7Y29udGVudDpcIlxcZjAzM1wifS5mYS1pdHVuZXM6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzYjRcIn0uZmEtaXR1bmVzLW5vdGU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzYjVcIn0uZmEtamF2YTpiZWZvcmV7Y29udGVudDpcIlxcZjRlNFwifS5mYS1qZW5raW5zOmJlZm9yZXtjb250ZW50OlwiXFxmM2I2XCJ9LmZhLWpvZ2V0OmJlZm9yZXtjb250ZW50OlwiXFxmM2I3XCJ9LmZhLWpvb21sYTpiZWZvcmV7Y29udGVudDpcIlxcZjFhYVwifS5mYS1qczpiZWZvcmV7Y29udGVudDpcIlxcZjNiOFwifS5mYS1qcy1zcXVhcmU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzYjlcIn0uZmEtanNmaWRkbGU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxY2NcIn0uZmEta2V5OmJlZm9yZXtjb250ZW50OlwiXFxmMDg0XCJ9LmZhLWtleWJvYXJkOmJlZm9yZXtjb250ZW50OlwiXFxmMTFjXCJ9LmZhLWtleWNkbjpiZWZvcmV7Y29udGVudDpcIlxcZjNiYVwifS5mYS1raWNrc3RhcnRlcjpiZWZvcmV7Y29udGVudDpcIlxcZjNiYlwifS5mYS1raWNrc3RhcnRlci1rOmJlZm9yZXtjb250ZW50OlwiXFxmM2JjXCJ9LmZhLWtvcnZ1ZTpiZWZvcmV7Y29udGVudDpcIlxcZjQyZlwifS5mYS1sYW5ndWFnZTpiZWZvcmV7Y29udGVudDpcIlxcZjFhYlwifS5mYS1sYXB0b3A6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxMDlcIn0uZmEtbGFyYXZlbDpiZWZvcmV7Y29udGVudDpcIlxcZjNiZFwifS5mYS1sYXN0Zm06YmVmb3Jle2NvbnRlbnQ6XCJcXGYyMDJcIn0uZmEtbGFzdGZtLXNxdWFyZTpiZWZvcmV7Y29udGVudDpcIlxcZjIwM1wifS5mYS1sZWFmOmJlZm9yZXtjb250ZW50OlwiXFxmMDZjXCJ9LmZhLWxlYW5wdWI6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyMTJcIn0uZmEtbGVtb246YmVmb3Jle2NvbnRlbnQ6XCJcXGYwOTRcIn0uZmEtbGVzczpiZWZvcmV7Y29udGVudDpcIlxcZjQxZFwifS5mYS1sZXZlbC1kb3duLWFsdDpiZWZvcmV7Y29udGVudDpcIlxcZjNiZVwifS5mYS1sZXZlbC11cC1hbHQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzYmZcIn0uZmEtbGlmZS1yaW5nOmJlZm9yZXtjb250ZW50OlwiXFxmMWNkXCJ9LmZhLWxpZ2h0YnVsYjpiZWZvcmV7Y29udGVudDpcIlxcZjBlYlwifS5mYS1saW5lOmJlZm9yZXtjb250ZW50OlwiXFxmM2MwXCJ9LmZhLWxpbms6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwYzFcIn0uZmEtbGlua2VkaW46YmVmb3Jle2NvbnRlbnQ6XCJcXGYwOGNcIn0uZmEtbGlua2VkaW4taW46YmVmb3Jle2NvbnRlbnQ6XCJcXGYwZTFcIn0uZmEtbGlub2RlOmJlZm9yZXtjb250ZW50OlwiXFxmMmI4XCJ9LmZhLWxpbnV4OmJlZm9yZXtjb250ZW50OlwiXFxmMTdjXCJ9LmZhLWxpcmEtc2lnbjpiZWZvcmV7Y29udGVudDpcIlxcZjE5NVwifS5mYS1saXN0OmJlZm9yZXtjb250ZW50OlwiXFxmMDNhXCJ9LmZhLWxpc3QtYWx0OmJlZm9yZXtjb250ZW50OlwiXFxmMDIyXCJ9LmZhLWxpc3Qtb2w6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwY2JcIn0uZmEtbGlzdC11bDpiZWZvcmV7Y29udGVudDpcIlxcZjBjYVwifS5mYS1sb2NhdGlvbi1hcnJvdzpiZWZvcmV7Y29udGVudDpcIlxcZjEyNFwifS5mYS1sb2NrOmJlZm9yZXtjb250ZW50OlwiXFxmMDIzXCJ9LmZhLWxvY2stb3BlbjpiZWZvcmV7Y29udGVudDpcIlxcZjNjMVwifS5mYS1sb25nLWFycm93LWFsdC1kb3duOmJlZm9yZXtjb250ZW50OlwiXFxmMzA5XCJ9LmZhLWxvbmctYXJyb3ctYWx0LWxlZnQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzMGFcIn0uZmEtbG9uZy1hcnJvdy1hbHQtcmlnaHQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzMGJcIn0uZmEtbG9uZy1hcnJvdy1hbHQtdXA6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzMGNcIn0uZmEtbG93LXZpc2lvbjpiZWZvcmV7Y29udGVudDpcIlxcZjJhOFwifS5mYS1seWZ0OmJlZm9yZXtjb250ZW50OlwiXFxmM2MzXCJ9LmZhLW1hZ2VudG86YmVmb3Jle2NvbnRlbnQ6XCJcXGYzYzRcIn0uZmEtbWFnaWM6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwZDBcIn0uZmEtbWFnbmV0OmJlZm9yZXtjb250ZW50OlwiXFxmMDc2XCJ9LmZhLW1hbGU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxODNcIn0uZmEtbWFwOmJlZm9yZXtjb250ZW50OlwiXFxmMjc5XCJ9LmZhLW1hcC1tYXJrZXI6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwNDFcIn0uZmEtbWFwLW1hcmtlci1hbHQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzYzVcIn0uZmEtbWFwLXBpbjpiZWZvcmV7Y29udGVudDpcIlxcZjI3NlwifS5mYS1tYXAtc2lnbnM6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyNzdcIn0uZmEtbWFyczpiZWZvcmV7Y29udGVudDpcIlxcZjIyMlwifS5mYS1tYXJzLWRvdWJsZTpiZWZvcmV7Y29udGVudDpcIlxcZjIyN1wifS5mYS1tYXJzLXN0cm9rZTpiZWZvcmV7Y29udGVudDpcIlxcZjIyOVwifS5mYS1tYXJzLXN0cm9rZS1oOmJlZm9yZXtjb250ZW50OlwiXFxmMjJiXCJ9LmZhLW1hcnMtc3Ryb2tlLXY6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyMmFcIn0uZmEtbWF4Y2RuOmJlZm9yZXtjb250ZW50OlwiXFxmMTM2XCJ9LmZhLW1lZGFwcHM6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzYzZcIn0uZmEtbWVkaXVtOmJlZm9yZXtjb250ZW50OlwiXFxmMjNhXCJ9LmZhLW1lZGl1bS1tOmJlZm9yZXtjb250ZW50OlwiXFxmM2M3XCJ9LmZhLW1lZGtpdDpiZWZvcmV7Y29udGVudDpcIlxcZjBmYVwifS5mYS1tZWRydDpiZWZvcmV7Y29udGVudDpcIlxcZjNjOFwifS5mYS1tZWV0dXA6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyZTBcIn0uZmEtbWVoOmJlZm9yZXtjb250ZW50OlwiXFxmMTFhXCJ9LmZhLW1lcmN1cnk6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyMjNcIn0uZmEtbWljcm9jaGlwOmJlZm9yZXtjb250ZW50OlwiXFxmMmRiXCJ9LmZhLW1pY3JvcGhvbmU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxMzBcIn0uZmEtbWljcm9waG9uZS1zbGFzaDpiZWZvcmV7Y29udGVudDpcIlxcZjEzMVwifS5mYS1taWNyb3NvZnQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzY2FcIn0uZmEtbWludXM6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwNjhcIn0uZmEtbWludXMtY2lyY2xlOmJlZm9yZXtjb250ZW50OlwiXFxmMDU2XCJ9LmZhLW1pbnVzLXNxdWFyZTpiZWZvcmV7Y29udGVudDpcIlxcZjE0NlwifS5mYS1taXg6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzY2JcIn0uZmEtbWl4Y2xvdWQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyODlcIn0uZmEtbWl6dW5pOmJlZm9yZXtjb250ZW50OlwiXFxmM2NjXCJ9LmZhLW1vYmlsZTpiZWZvcmV7Y29udGVudDpcIlxcZjEwYlwifS5mYS1tb2JpbGUtYWx0OmJlZm9yZXtjb250ZW50OlwiXFxmM2NkXCJ9LmZhLW1vZHg6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyODVcIn0uZmEtbW9uZXJvOmJlZm9yZXtjb250ZW50OlwiXFxmM2QwXCJ9LmZhLW1vbmV5LWJpbGwtYWx0OmJlZm9yZXtjb250ZW50OlwiXFxmM2QxXCJ9LmZhLW1vb246YmVmb3Jle2NvbnRlbnQ6XCJcXGYxODZcIn0uZmEtbW90b3JjeWNsZTpiZWZvcmV7Y29udGVudDpcIlxcZjIxY1wifS5mYS1tb3VzZS1wb2ludGVyOmJlZm9yZXtjb250ZW50OlwiXFxmMjQ1XCJ9LmZhLW11c2ljOmJlZm9yZXtjb250ZW50OlwiXFxmMDAxXCJ9LmZhLW5hcHN0ZXI6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzZDJcIn0uZmEtbmV1dGVyOmJlZm9yZXtjb250ZW50OlwiXFxmMjJjXCJ9LmZhLW5ld3NwYXBlcjpiZWZvcmV7Y29udGVudDpcIlxcZjFlYVwifS5mYS1uaW50ZW5kby1zd2l0Y2g6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0MThcIn0uZmEtbm9kZTpiZWZvcmV7Y29udGVudDpcIlxcZjQxOVwifS5mYS1ub2RlLWpzOmJlZm9yZXtjb250ZW50OlwiXFxmM2QzXCJ9LmZhLW5vdGVzLW1lZGljYWw6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0ODFcIn0uZmEtbnBtOmJlZm9yZXtjb250ZW50OlwiXFxmM2Q0XCJ9LmZhLW5zODpiZWZvcmV7Y29udGVudDpcIlxcZjNkNVwifS5mYS1udXRyaXRpb25peDpiZWZvcmV7Y29udGVudDpcIlxcZjNkNlwifS5mYS1vYmplY3QtZ3JvdXA6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyNDdcIn0uZmEtb2JqZWN0LXVuZ3JvdXA6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyNDhcIn0uZmEtb2Rub2tsYXNzbmlraTpiZWZvcmV7Y29udGVudDpcIlxcZjI2M1wifS5mYS1vZG5va2xhc3NuaWtpLXNxdWFyZTpiZWZvcmV7Y29udGVudDpcIlxcZjI2NFwifS5mYS1vcGVuY2FydDpiZWZvcmV7Y29udGVudDpcIlxcZjIzZFwifS5mYS1vcGVuaWQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxOWJcIn0uZmEtb3BlcmE6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyNmFcIn0uZmEtb3B0aW4tbW9uc3RlcjpiZWZvcmV7Y29udGVudDpcIlxcZjIzY1wifS5mYS1vc2k6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0MWFcIn0uZmEtb3V0ZGVudDpiZWZvcmV7Y29udGVudDpcIlxcZjAzYlwifS5mYS1wYWdlNDpiZWZvcmV7Y29udGVudDpcIlxcZjNkN1wifS5mYS1wYWdlbGluZXM6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxOGNcIn0uZmEtcGFpbnQtYnJ1c2g6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxZmNcIn0uZmEtcGFsZmVkOmJlZm9yZXtjb250ZW50OlwiXFxmM2Q4XCJ9LmZhLXBhbGxldDpiZWZvcmV7Y29udGVudDpcIlxcZjQ4MlwifS5mYS1wYXBlci1wbGFuZTpiZWZvcmV7Y29udGVudDpcIlxcZjFkOFwifS5mYS1wYXBlcmNsaXA6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwYzZcIn0uZmEtcGFyYWNodXRlLWJveDpiZWZvcmV7Y29udGVudDpcIlxcZjRjZFwifS5mYS1wYXJhZ3JhcGg6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxZGRcIn0uZmEtcGFzdGU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwZWFcIn0uZmEtcGF0cmVvbjpiZWZvcmV7Y29udGVudDpcIlxcZjNkOVwifS5mYS1wYXVzZTpiZWZvcmV7Y29udGVudDpcIlxcZjA0Y1wifS5mYS1wYXVzZS1jaXJjbGU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyOGJcIn0uZmEtcGF3OmJlZm9yZXtjb250ZW50OlwiXFxmMWIwXCJ9LmZhLXBheXBhbDpiZWZvcmV7Y29udGVudDpcIlxcZjFlZFwifS5mYS1wZW4tc3F1YXJlOmJlZm9yZXtjb250ZW50OlwiXFxmMTRiXCJ9LmZhLXBlbmNpbC1hbHQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzMDNcIn0uZmEtcGVvcGxlLWNhcnJ5OmJlZm9yZXtjb250ZW50OlwiXFxmNGNlXCJ9LmZhLXBlcmNlbnQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyOTVcIn0uZmEtcGVyaXNjb3BlOmJlZm9yZXtjb250ZW50OlwiXFxmM2RhXCJ9LmZhLXBoYWJyaWNhdG9yOmJlZm9yZXtjb250ZW50OlwiXFxmM2RiXCJ9LmZhLXBob2VuaXgtZnJhbWV3b3JrOmJlZm9yZXtjb250ZW50OlwiXFxmM2RjXCJ9LmZhLXBob25lOmJlZm9yZXtjb250ZW50OlwiXFxmMDk1XCJ9LmZhLXBob25lLXNsYXNoOmJlZm9yZXtjb250ZW50OlwiXFxmM2RkXCJ9LmZhLXBob25lLXNxdWFyZTpiZWZvcmV7Y29udGVudDpcIlxcZjA5OFwifS5mYS1waG9uZS12b2x1bWU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyYTBcIn0uZmEtcGhwOmJlZm9yZXtjb250ZW50OlwiXFxmNDU3XCJ9LmZhLXBpZWQtcGlwZXI6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyYWVcIn0uZmEtcGllZC1waXBlci1hbHQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxYThcIn0uZmEtcGllZC1waXBlci1oYXQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0ZTVcIn0uZmEtcGllZC1waXBlci1wcDpiZWZvcmV7Y29udGVudDpcIlxcZjFhN1wifS5mYS1waWdneS1iYW5rOmJlZm9yZXtjb250ZW50OlwiXFxmNGQzXCJ9LmZhLXBpbGxzOmJlZm9yZXtjb250ZW50OlwiXFxmNDg0XCJ9LmZhLXBpbnRlcmVzdDpiZWZvcmV7Y29udGVudDpcIlxcZjBkMlwifS5mYS1waW50ZXJlc3QtcDpiZWZvcmV7Y29udGVudDpcIlxcZjIzMVwifS5mYS1waW50ZXJlc3Qtc3F1YXJlOmJlZm9yZXtjb250ZW50OlwiXFxmMGQzXCJ9LmZhLXBsYW5lOmJlZm9yZXtjb250ZW50OlwiXFxmMDcyXCJ9LmZhLXBsYXk6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwNGJcIn0uZmEtcGxheS1jaXJjbGU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxNDRcIn0uZmEtcGxheXN0YXRpb246YmVmb3Jle2NvbnRlbnQ6XCJcXGYzZGZcIn0uZmEtcGx1ZzpiZWZvcmV7Y29udGVudDpcIlxcZjFlNlwifS5mYS1wbHVzOmJlZm9yZXtjb250ZW50OlwiXFxmMDY3XCJ9LmZhLXBsdXMtY2lyY2xlOmJlZm9yZXtjb250ZW50OlwiXFxmMDU1XCJ9LmZhLXBsdXMtc3F1YXJlOmJlZm9yZXtjb250ZW50OlwiXFxmMGZlXCJ9LmZhLXBvZGNhc3Q6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyY2VcIn0uZmEtcG9vOmJlZm9yZXtjb250ZW50OlwiXFxmMmZlXCJ9LmZhLXBvdW5kLXNpZ246YmVmb3Jle2NvbnRlbnQ6XCJcXGYxNTRcIn0uZmEtcG93ZXItb2ZmOmJlZm9yZXtjb250ZW50OlwiXFxmMDExXCJ9LmZhLXByZXNjcmlwdGlvbi1ib3R0bGU6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0ODVcIn0uZmEtcHJlc2NyaXB0aW9uLWJvdHRsZS1hbHQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0ODZcIn0uZmEtcHJpbnQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwMmZcIn0uZmEtcHJvY2VkdXJlczpiZWZvcmV7Y29udGVudDpcIlxcZjQ4N1wifS5mYS1wcm9kdWN0LWh1bnQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyODhcIn0uZmEtcHVzaGVkOmJlZm9yZXtjb250ZW50OlwiXFxmM2UxXCJ9LmZhLXB1enpsZS1waWVjZTpiZWZvcmV7Y29udGVudDpcIlxcZjEyZVwifS5mYS1weXRob246YmVmb3Jle2NvbnRlbnQ6XCJcXGYzZTJcIn0uZmEtcXE6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxZDZcIn0uZmEtcXJjb2RlOmJlZm9yZXtjb250ZW50OlwiXFxmMDI5XCJ9LmZhLXF1ZXN0aW9uOmJlZm9yZXtjb250ZW50OlwiXFxmMTI4XCJ9LmZhLXF1ZXN0aW9uLWNpcmNsZTpiZWZvcmV7Y29udGVudDpcIlxcZjA1OVwifS5mYS1xdWlkZGl0Y2g6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0NThcIn0uZmEtcXVpbnNjYXBlOmJlZm9yZXtjb250ZW50OlwiXFxmNDU5XCJ9LmZhLXF1b3JhOmJlZm9yZXtjb250ZW50OlwiXFxmMmM0XCJ9LmZhLXF1b3RlLWxlZnQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxMGRcIn0uZmEtcXVvdGUtcmlnaHQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxMGVcIn0uZmEtcmFuZG9tOmJlZm9yZXtjb250ZW50OlwiXFxmMDc0XCJ9LmZhLXJhdmVscnk6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyZDlcIn0uZmEtcmVhY3Q6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0MWJcIn0uZmEtcmVhZG1lOmJlZm9yZXtjb250ZW50OlwiXFxmNGQ1XCJ9LmZhLXJlYmVsOmJlZm9yZXtjb250ZW50OlwiXFxmMWQwXCJ9LmZhLXJlY3ljbGU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxYjhcIn0uZmEtcmVkLXJpdmVyOmJlZm9yZXtjb250ZW50OlwiXFxmM2UzXCJ9LmZhLXJlZGRpdDpiZWZvcmV7Y29udGVudDpcIlxcZjFhMVwifS5mYS1yZWRkaXQtYWxpZW46YmVmb3Jle2NvbnRlbnQ6XCJcXGYyODFcIn0uZmEtcmVkZGl0LXNxdWFyZTpiZWZvcmV7Y29udGVudDpcIlxcZjFhMlwifS5mYS1yZWRvOmJlZm9yZXtjb250ZW50OlwiXFxmMDFlXCJ9LmZhLXJlZG8tYWx0OmJlZm9yZXtjb250ZW50OlwiXFxmMmY5XCJ9LmZhLXJlZ2lzdGVyZWQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyNWRcIn0uZmEtcmVuZGFjdDpiZWZvcmV7Y29udGVudDpcIlxcZjNlNFwifS5mYS1yZW5yZW46YmVmb3Jle2NvbnRlbnQ6XCJcXGYxOGJcIn0uZmEtcmVwbHk6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzZTVcIn0uZmEtcmVwbHktYWxsOmJlZm9yZXtjb250ZW50OlwiXFxmMTIyXCJ9LmZhLXJlcGx5ZDpiZWZvcmV7Y29udGVudDpcIlxcZjNlNlwifS5mYS1yZXNvbHZpbmc6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzZTdcIn0uZmEtcmV0d2VldDpiZWZvcmV7Y29udGVudDpcIlxcZjA3OVwifS5mYS1yaWJib246YmVmb3Jle2NvbnRlbnQ6XCJcXGY0ZDZcIn0uZmEtcm9hZDpiZWZvcmV7Y29udGVudDpcIlxcZjAxOFwifS5mYS1yb2NrZXQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxMzVcIn0uZmEtcm9ja2V0Y2hhdDpiZWZvcmV7Y29udGVudDpcIlxcZjNlOFwifS5mYS1yb2Nrcm1zOmJlZm9yZXtjb250ZW50OlwiXFxmM2U5XCJ9LmZhLXJzczpiZWZvcmV7Y29udGVudDpcIlxcZjA5ZVwifS5mYS1yc3Mtc3F1YXJlOmJlZm9yZXtjb250ZW50OlwiXFxmMTQzXCJ9LmZhLXJ1YmxlLXNpZ246YmVmb3Jle2NvbnRlbnQ6XCJcXGYxNThcIn0uZmEtcnVwZWUtc2lnbjpiZWZvcmV7Y29udGVudDpcIlxcZjE1NlwifS5mYS1zYWZhcmk6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyNjdcIn0uZmEtc2FzczpiZWZvcmV7Y29udGVudDpcIlxcZjQxZVwifS5mYS1zYXZlOmJlZm9yZXtjb250ZW50OlwiXFxmMGM3XCJ9LmZhLXNjaGxpeDpiZWZvcmV7Y29udGVudDpcIlxcZjNlYVwifS5mYS1zY3JpYmQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyOGFcIn0uZmEtc2VhcmNoOmJlZm9yZXtjb250ZW50OlwiXFxmMDAyXCJ9LmZhLXNlYXJjaC1taW51czpiZWZvcmV7Y29udGVudDpcIlxcZjAxMFwifS5mYS1zZWFyY2gtcGx1czpiZWZvcmV7Y29udGVudDpcIlxcZjAwZVwifS5mYS1zZWFyY2hlbmdpbjpiZWZvcmV7Y29udGVudDpcIlxcZjNlYlwifS5mYS1zZWVkbGluZzpiZWZvcmV7Y29udGVudDpcIlxcZjRkOFwifS5mYS1zZWxsY2FzdDpiZWZvcmV7Y29udGVudDpcIlxcZjJkYVwifS5mYS1zZWxsc3k6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyMTNcIn0uZmEtc2VydmVyOmJlZm9yZXtjb250ZW50OlwiXFxmMjMzXCJ9LmZhLXNlcnZpY2VzdGFjazpiZWZvcmV7Y29udGVudDpcIlxcZjNlY1wifS5mYS1zaGFyZTpiZWZvcmV7Y29udGVudDpcIlxcZjA2NFwifS5mYS1zaGFyZS1hbHQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxZTBcIn0uZmEtc2hhcmUtYWx0LXNxdWFyZTpiZWZvcmV7Y29udGVudDpcIlxcZjFlMVwifS5mYS1zaGFyZS1zcXVhcmU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxNGRcIn0uZmEtc2hla2VsLXNpZ246YmVmb3Jle2NvbnRlbnQ6XCJcXGYyMGJcIn0uZmEtc2hpZWxkLWFsdDpiZWZvcmV7Y29udGVudDpcIlxcZjNlZFwifS5mYS1zaGlwOmJlZm9yZXtjb250ZW50OlwiXFxmMjFhXCJ9LmZhLXNoaXBwaW5nLWZhc3Q6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0OGJcIn0uZmEtc2hpcnRzaW5idWxrOmJlZm9yZXtjb250ZW50OlwiXFxmMjE0XCJ9LmZhLXNob3BwaW5nLWJhZzpiZWZvcmV7Y29udGVudDpcIlxcZjI5MFwifS5mYS1zaG9wcGluZy1iYXNrZXQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyOTFcIn0uZmEtc2hvcHBpbmctY2FydDpiZWZvcmV7Y29udGVudDpcIlxcZjA3YVwifS5mYS1zaG93ZXI6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyY2NcIn0uZmEtc2lnbjpiZWZvcmV7Y29udGVudDpcIlxcZjRkOVwifS5mYS1zaWduLWluLWFsdDpiZWZvcmV7Y29udGVudDpcIlxcZjJmNlwifS5mYS1zaWduLWxhbmd1YWdlOmJlZm9yZXtjb250ZW50OlwiXFxmMmE3XCJ9LmZhLXNpZ24tb3V0LWFsdDpiZWZvcmV7Y29udGVudDpcIlxcZjJmNVwifS5mYS1zaWduYWw6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwMTJcIn0uZmEtc2ltcGx5YnVpbHQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyMTVcIn0uZmEtc2lzdHJpeDpiZWZvcmV7Y29udGVudDpcIlxcZjNlZVwifS5mYS1zaXRlbWFwOmJlZm9yZXtjb250ZW50OlwiXFxmMGU4XCJ9LmZhLXNreWF0bGFzOmJlZm9yZXtjb250ZW50OlwiXFxmMjE2XCJ9LmZhLXNreXBlOmJlZm9yZXtjb250ZW50OlwiXFxmMTdlXCJ9LmZhLXNsYWNrOmJlZm9yZXtjb250ZW50OlwiXFxmMTk4XCJ9LmZhLXNsYWNrLWhhc2g6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzZWZcIn0uZmEtc2xpZGVycy1oOmJlZm9yZXtjb250ZW50OlwiXFxmMWRlXCJ9LmZhLXNsaWRlc2hhcmU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxZTdcIn0uZmEtc21pbGU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxMThcIn0uZmEtc21va2luZzpiZWZvcmV7Y29udGVudDpcIlxcZjQ4ZFwifS5mYS1zbmFwY2hhdDpiZWZvcmV7Y29udGVudDpcIlxcZjJhYlwifS5mYS1zbmFwY2hhdC1naG9zdDpiZWZvcmV7Y29udGVudDpcIlxcZjJhY1wifS5mYS1zbmFwY2hhdC1zcXVhcmU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyYWRcIn0uZmEtc25vd2ZsYWtlOmJlZm9yZXtjb250ZW50OlwiXFxmMmRjXCJ9LmZhLXNvcnQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwZGNcIn0uZmEtc29ydC1hbHBoYS1kb3duOmJlZm9yZXtjb250ZW50OlwiXFxmMTVkXCJ9LmZhLXNvcnQtYWxwaGEtdXA6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxNWVcIn0uZmEtc29ydC1hbW91bnQtZG93bjpiZWZvcmV7Y29udGVudDpcIlxcZjE2MFwifS5mYS1zb3J0LWFtb3VudC11cDpiZWZvcmV7Y29udGVudDpcIlxcZjE2MVwifS5mYS1zb3J0LWRvd246YmVmb3Jle2NvbnRlbnQ6XCJcXGYwZGRcIn0uZmEtc29ydC1udW1lcmljLWRvd246YmVmb3Jle2NvbnRlbnQ6XCJcXGYxNjJcIn0uZmEtc29ydC1udW1lcmljLXVwOmJlZm9yZXtjb250ZW50OlwiXFxmMTYzXCJ9LmZhLXNvcnQtdXA6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwZGVcIn0uZmEtc291bmRjbG91ZDpiZWZvcmV7Y29udGVudDpcIlxcZjFiZVwifS5mYS1zcGFjZS1zaHV0dGxlOmJlZm9yZXtjb250ZW50OlwiXFxmMTk3XCJ9LmZhLXNwZWFrYXA6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzZjNcIn0uZmEtc3Bpbm5lcjpiZWZvcmV7Y29udGVudDpcIlxcZjExMFwifS5mYS1zcG90aWZ5OmJlZm9yZXtjb250ZW50OlwiXFxmMWJjXCJ9LmZhLXNxdWFyZTpiZWZvcmV7Y29udGVudDpcIlxcZjBjOFwifS5mYS1zcXVhcmUtZnVsbDpiZWZvcmV7Y29udGVudDpcIlxcZjQ1Y1wifS5mYS1zdGFjay1leGNoYW5nZTpiZWZvcmV7Y29udGVudDpcIlxcZjE4ZFwifS5mYS1zdGFjay1vdmVyZmxvdzpiZWZvcmV7Y29udGVudDpcIlxcZjE2Y1wifS5mYS1zdGFyOmJlZm9yZXtjb250ZW50OlwiXFxmMDA1XCJ9LmZhLXN0YXItaGFsZjpiZWZvcmV7Y29udGVudDpcIlxcZjA4OVwifS5mYS1zdGF5bGlua2VkOmJlZm9yZXtjb250ZW50OlwiXFxmM2Y1XCJ9LmZhLXN0ZWFtOmJlZm9yZXtjb250ZW50OlwiXFxmMWI2XCJ9LmZhLXN0ZWFtLXNxdWFyZTpiZWZvcmV7Y29udGVudDpcIlxcZjFiN1wifS5mYS1zdGVhbS1zeW1ib2w6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzZjZcIn0uZmEtc3RlcC1iYWNrd2FyZDpiZWZvcmV7Y29udGVudDpcIlxcZjA0OFwifS5mYS1zdGVwLWZvcndhcmQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwNTFcIn0uZmEtc3RldGhvc2NvcGU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwZjFcIn0uZmEtc3RpY2tlci1tdWxlOmJlZm9yZXtjb250ZW50OlwiXFxmM2Y3XCJ9LmZhLXN0aWNreS1ub3RlOmJlZm9yZXtjb250ZW50OlwiXFxmMjQ5XCJ9LmZhLXN0b3A6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwNGRcIn0uZmEtc3RvcC1jaXJjbGU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyOGRcIn0uZmEtc3RvcHdhdGNoOmJlZm9yZXtjb250ZW50OlwiXFxmMmYyXCJ9LmZhLXN0cmF2YTpiZWZvcmV7Y29udGVudDpcIlxcZjQyOFwifS5mYS1zdHJlZXQtdmlldzpiZWZvcmV7Y29udGVudDpcIlxcZjIxZFwifS5mYS1zdHJpa2V0aHJvdWdoOmJlZm9yZXtjb250ZW50OlwiXFxmMGNjXCJ9LmZhLXN0cmlwZTpiZWZvcmV7Y29udGVudDpcIlxcZjQyOVwifS5mYS1zdHJpcGUtczpiZWZvcmV7Y29udGVudDpcIlxcZjQyYVwifS5mYS1zdHVkaW92aW5hcmk6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzZjhcIn0uZmEtc3R1bWJsZXVwb246YmVmb3Jle2NvbnRlbnQ6XCJcXGYxYTRcIn0uZmEtc3R1bWJsZXVwb24tY2lyY2xlOmJlZm9yZXtjb250ZW50OlwiXFxmMWEzXCJ9LmZhLXN1YnNjcmlwdDpiZWZvcmV7Y29udGVudDpcIlxcZjEyY1wifS5mYS1zdWJ3YXk6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyMzlcIn0uZmEtc3VpdGNhc2U6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwZjJcIn0uZmEtc3VuOmJlZm9yZXtjb250ZW50OlwiXFxmMTg1XCJ9LmZhLXN1cGVycG93ZXJzOmJlZm9yZXtjb250ZW50OlwiXFxmMmRkXCJ9LmZhLXN1cGVyc2NyaXB0OmJlZm9yZXtjb250ZW50OlwiXFxmMTJiXCJ9LmZhLXN1cHBsZTpiZWZvcmV7Y29udGVudDpcIlxcZjNmOVwifS5mYS1zeW5jOmJlZm9yZXtjb250ZW50OlwiXFxmMDIxXCJ9LmZhLXN5bmMtYWx0OmJlZm9yZXtjb250ZW50OlwiXFxmMmYxXCJ9LmZhLXN5cmluZ2U6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0OGVcIn0uZmEtdGFibGU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwY2VcIn0uZmEtdGFibGUtdGVubmlzOmJlZm9yZXtjb250ZW50OlwiXFxmNDVkXCJ9LmZhLXRhYmxldDpiZWZvcmV7Y29udGVudDpcIlxcZjEwYVwifS5mYS10YWJsZXQtYWx0OmJlZm9yZXtjb250ZW50OlwiXFxmM2ZhXCJ9LmZhLXRhYmxldHM6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0OTBcIn0uZmEtdGFjaG9tZXRlci1hbHQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzZmRcIn0uZmEtdGFnOmJlZm9yZXtjb250ZW50OlwiXFxmMDJiXCJ9LmZhLXRhZ3M6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwMmNcIn0uZmEtdGFwZTpiZWZvcmV7Y29udGVudDpcIlxcZjRkYlwifS5mYS10YXNrczpiZWZvcmV7Y29udGVudDpcIlxcZjBhZVwifS5mYS10YXhpOmJlZm9yZXtjb250ZW50OlwiXFxmMWJhXCJ9LmZhLXRlbGVncmFtOmJlZm9yZXtjb250ZW50OlwiXFxmMmM2XCJ9LmZhLXRlbGVncmFtLXBsYW5lOmJlZm9yZXtjb250ZW50OlwiXFxmM2ZlXCJ9LmZhLXRlbmNlbnQtd2VpYm86YmVmb3Jle2NvbnRlbnQ6XCJcXGYxZDVcIn0uZmEtdGVybWluYWw6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxMjBcIn0uZmEtdGV4dC1oZWlnaHQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwMzRcIn0uZmEtdGV4dC13aWR0aDpiZWZvcmV7Y29udGVudDpcIlxcZjAzNVwifS5mYS10aDpiZWZvcmV7Y29udGVudDpcIlxcZjAwYVwifS5mYS10aC1sYXJnZTpiZWZvcmV7Y29udGVudDpcIlxcZjAwOVwifS5mYS10aC1saXN0OmJlZm9yZXtjb250ZW50OlwiXFxmMDBiXCJ9LmZhLXRoZW1laXNsZTpiZWZvcmV7Y29udGVudDpcIlxcZjJiMlwifS5mYS10aGVybW9tZXRlcjpiZWZvcmV7Y29udGVudDpcIlxcZjQ5MVwifS5mYS10aGVybW9tZXRlci1lbXB0eTpiZWZvcmV7Y29udGVudDpcIlxcZjJjYlwifS5mYS10aGVybW9tZXRlci1mdWxsOmJlZm9yZXtjb250ZW50OlwiXFxmMmM3XCJ9LmZhLXRoZXJtb21ldGVyLWhhbGY6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyYzlcIn0uZmEtdGhlcm1vbWV0ZXItcXVhcnRlcjpiZWZvcmV7Y29udGVudDpcIlxcZjJjYVwifS5mYS10aGVybW9tZXRlci10aHJlZS1xdWFydGVyczpiZWZvcmV7Y29udGVudDpcIlxcZjJjOFwifS5mYS10aHVtYnMtZG93bjpiZWZvcmV7Y29udGVudDpcIlxcZjE2NVwifS5mYS10aHVtYnMtdXA6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxNjRcIn0uZmEtdGh1bWJ0YWNrOmJlZm9yZXtjb250ZW50OlwiXFxmMDhkXCJ9LmZhLXRpY2tldC1hbHQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYzZmZcIn0uZmEtdGltZXM6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwMGRcIn0uZmEtdGltZXMtY2lyY2xlOmJlZm9yZXtjb250ZW50OlwiXFxmMDU3XCJ9LmZhLXRpbnQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwNDNcIn0uZmEtdG9nZ2xlLW9mZjpiZWZvcmV7Y29udGVudDpcIlxcZjIwNFwifS5mYS10b2dnbGUtb246YmVmb3Jle2NvbnRlbnQ6XCJcXGYyMDVcIn0uZmEtdHJhZGVtYXJrOmJlZm9yZXtjb250ZW50OlwiXFxmMjVjXCJ9LmZhLXRyYWluOmJlZm9yZXtjb250ZW50OlwiXFxmMjM4XCJ9LmZhLXRyYW5zZ2VuZGVyOmJlZm9yZXtjb250ZW50OlwiXFxmMjI0XCJ9LmZhLXRyYW5zZ2VuZGVyLWFsdDpiZWZvcmV7Y29udGVudDpcIlxcZjIyNVwifS5mYS10cmFzaDpiZWZvcmV7Y29udGVudDpcIlxcZjFmOFwifS5mYS10cmFzaC1hbHQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyZWRcIn0uZmEtdHJlZTpiZWZvcmV7Y29udGVudDpcIlxcZjFiYlwifS5mYS10cmVsbG86YmVmb3Jle2NvbnRlbnQ6XCJcXGYxODFcIn0uZmEtdHJpcGFkdmlzb3I6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyNjJcIn0uZmEtdHJvcGh5OmJlZm9yZXtjb250ZW50OlwiXFxmMDkxXCJ9LmZhLXRydWNrOmJlZm9yZXtjb250ZW50OlwiXFxmMGQxXCJ9LmZhLXRydWNrLWxvYWRpbmc6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0ZGVcIn0uZmEtdHJ1Y2stbW92aW5nOmJlZm9yZXtjb250ZW50OlwiXFxmNGRmXCJ9LmZhLXR0eTpiZWZvcmV7Y29udGVudDpcIlxcZjFlNFwifS5mYS10dW1ibHI6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxNzNcIn0uZmEtdHVtYmxyLXNxdWFyZTpiZWZvcmV7Y29udGVudDpcIlxcZjE3NFwifS5mYS10djpiZWZvcmV7Y29udGVudDpcIlxcZjI2Y1wifS5mYS10d2l0Y2g6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxZThcIn0uZmEtdHdpdHRlcjpiZWZvcmV7Y29udGVudDpcIlxcZjA5OVwifS5mYS10d2l0dGVyLXNxdWFyZTpiZWZvcmV7Y29udGVudDpcIlxcZjA4MVwifS5mYS10eXBvMzpiZWZvcmV7Y29udGVudDpcIlxcZjQyYlwifS5mYS11YmVyOmJlZm9yZXtjb250ZW50OlwiXFxmNDAyXCJ9LmZhLXVpa2l0OmJlZm9yZXtjb250ZW50OlwiXFxmNDAzXCJ9LmZhLXVtYnJlbGxhOmJlZm9yZXtjb250ZW50OlwiXFxmMGU5XCJ9LmZhLXVuZGVybGluZTpiZWZvcmV7Y29udGVudDpcIlxcZjBjZFwifS5mYS11bmRvOmJlZm9yZXtjb250ZW50OlwiXFxmMGUyXCJ9LmZhLXVuZG8tYWx0OmJlZm9yZXtjb250ZW50OlwiXFxmMmVhXCJ9LmZhLXVuaXJlZ2lzdHJ5OmJlZm9yZXtjb250ZW50OlwiXFxmNDA0XCJ9LmZhLXVuaXZlcnNhbC1hY2Nlc3M6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyOWFcIn0uZmEtdW5pdmVyc2l0eTpiZWZvcmV7Y29udGVudDpcIlxcZjE5Y1wifS5mYS11bmxpbms6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxMjdcIn0uZmEtdW5sb2NrOmJlZm9yZXtjb250ZW50OlwiXFxmMDljXCJ9LmZhLXVubG9jay1hbHQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxM2VcIn0uZmEtdW50YXBwZDpiZWZvcmV7Y29udGVudDpcIlxcZjQwNVwifS5mYS11cGxvYWQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwOTNcIn0uZmEtdXNiOmJlZm9yZXtjb250ZW50OlwiXFxmMjg3XCJ9LmZhLXVzZXI6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwMDdcIn0uZmEtdXNlci1jaXJjbGU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyYmRcIn0uZmEtdXNlci1tZDpiZWZvcmV7Y29udGVudDpcIlxcZjBmMFwifS5mYS11c2VyLXBsdXM6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyMzRcIn0uZmEtdXNlci1zZWNyZXQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyMWJcIn0uZmEtdXNlci10aW1lczpiZWZvcmV7Y29udGVudDpcIlxcZjIzNVwifS5mYS11c2VyczpiZWZvcmV7Y29udGVudDpcIlxcZjBjMFwifS5mYS11c3N1bm5haDpiZWZvcmV7Y29udGVudDpcIlxcZjQwN1wifS5mYS11dGVuc2lsLXNwb29uOmJlZm9yZXtjb250ZW50OlwiXFxmMmU1XCJ9LmZhLXV0ZW5zaWxzOmJlZm9yZXtjb250ZW50OlwiXFxmMmU3XCJ9LmZhLXZhYWRpbjpiZWZvcmV7Y29udGVudDpcIlxcZjQwOFwifS5mYS12ZW51czpiZWZvcmV7Y29udGVudDpcIlxcZjIyMVwifS5mYS12ZW51cy1kb3VibGU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyMjZcIn0uZmEtdmVudXMtbWFyczpiZWZvcmV7Y29udGVudDpcIlxcZjIyOFwifS5mYS12aWFjb2luOmJlZm9yZXtjb250ZW50OlwiXFxmMjM3XCJ9LmZhLXZpYWRlbzpiZWZvcmV7Y29udGVudDpcIlxcZjJhOVwifS5mYS12aWFkZW8tc3F1YXJlOmJlZm9yZXtjb250ZW50OlwiXFxmMmFhXCJ9LmZhLXZpYWw6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0OTJcIn0uZmEtdmlhbHM6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0OTNcIn0uZmEtdmliZXI6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0MDlcIn0uZmEtdmlkZW86YmVmb3Jle2NvbnRlbnQ6XCJcXGYwM2RcIn0uZmEtdmlkZW8tc2xhc2g6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0ZTJcIn0uZmEtdmltZW86YmVmb3Jle2NvbnRlbnQ6XCJcXGY0MGFcIn0uZmEtdmltZW8tc3F1YXJlOmJlZm9yZXtjb250ZW50OlwiXFxmMTk0XCJ9LmZhLXZpbWVvLXY6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyN2RcIn0uZmEtdmluZTpiZWZvcmV7Y29udGVudDpcIlxcZjFjYVwifS5mYS12azpiZWZvcmV7Y29udGVudDpcIlxcZjE4OVwifS5mYS12bnY6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0MGJcIn0uZmEtdm9sbGV5YmFsbC1iYWxsOmJlZm9yZXtjb250ZW50OlwiXFxmNDVmXCJ9LmZhLXZvbHVtZS1kb3duOmJlZm9yZXtjb250ZW50OlwiXFxmMDI3XCJ9LmZhLXZvbHVtZS1vZmY6YmVmb3Jle2NvbnRlbnQ6XCJcXGYwMjZcIn0uZmEtdm9sdW1lLXVwOmJlZm9yZXtjb250ZW50OlwiXFxmMDI4XCJ9LmZhLXZ1ZWpzOmJlZm9yZXtjb250ZW50OlwiXFxmNDFmXCJ9LmZhLXdhcmVob3VzZTpiZWZvcmV7Y29udGVudDpcIlxcZjQ5NFwifS5mYS13ZWlibzpiZWZvcmV7Y29udGVudDpcIlxcZjE4YVwifS5mYS13ZWlnaHQ6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0OTZcIn0uZmEtd2VpeGluOmJlZm9yZXtjb250ZW50OlwiXFxmMWQ3XCJ9LmZhLXdoYXRzYXBwOmJlZm9yZXtjb250ZW50OlwiXFxmMjMyXCJ9LmZhLXdoYXRzYXBwLXNxdWFyZTpiZWZvcmV7Y29udGVudDpcIlxcZjQwY1wifS5mYS13aGVlbGNoYWlyOmJlZm9yZXtjb250ZW50OlwiXFxmMTkzXCJ9LmZhLXdobWNzOmJlZm9yZXtjb250ZW50OlwiXFxmNDBkXCJ9LmZhLXdpZmk6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxZWJcIn0uZmEtd2lraXBlZGlhLXc6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyNjZcIn0uZmEtd2luZG93LWNsb3NlOmJlZm9yZXtjb250ZW50OlwiXFxmNDEwXCJ9LmZhLXdpbmRvdy1tYXhpbWl6ZTpiZWZvcmV7Y29udGVudDpcIlxcZjJkMFwifS5mYS13aW5kb3ctbWluaW1pemU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyZDFcIn0uZmEtd2luZG93LXJlc3RvcmU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyZDJcIn0uZmEtd2luZG93czpiZWZvcmV7Y29udGVudDpcIlxcZjE3YVwifS5mYS13aW5lLWdsYXNzOmJlZm9yZXtjb250ZW50OlwiXFxmNGUzXCJ9LmZhLXdvbi1zaWduOmJlZm9yZXtjb250ZW50OlwiXFxmMTU5XCJ9LmZhLXdvcmRwcmVzczpiZWZvcmV7Y29udGVudDpcIlxcZjE5YVwifS5mYS13b3JkcHJlc3Mtc2ltcGxlOmJlZm9yZXtjb250ZW50OlwiXFxmNDExXCJ9LmZhLXdwYmVnaW5uZXI6YmVmb3Jle2NvbnRlbnQ6XCJcXGYyOTdcIn0uZmEtd3BleHBsb3JlcjpiZWZvcmV7Y29udGVudDpcIlxcZjJkZVwifS5mYS13cGZvcm1zOmJlZm9yZXtjb250ZW50OlwiXFxmMjk4XCJ9LmZhLXdyZW5jaDpiZWZvcmV7Y29udGVudDpcIlxcZjBhZFwifS5mYS14LXJheTpiZWZvcmV7Y29udGVudDpcIlxcZjQ5N1wifS5mYS14Ym94OmJlZm9yZXtjb250ZW50OlwiXFxmNDEyXCJ9LmZhLXhpbmc6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxNjhcIn0uZmEteGluZy1zcXVhcmU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxNjlcIn0uZmEteS1jb21iaW5hdG9yOmJlZm9yZXtjb250ZW50OlwiXFxmMjNiXCJ9LmZhLXlhaG9vOmJlZm9yZXtjb250ZW50OlwiXFxmMTllXCJ9LmZhLXlhbmRleDpiZWZvcmV7Y29udGVudDpcIlxcZjQxM1wifS5mYS15YW5kZXgtaW50ZXJuYXRpb25hbDpiZWZvcmV7Y29udGVudDpcIlxcZjQxNFwifS5mYS15ZWxwOmJlZm9yZXtjb250ZW50OlwiXFxmMWU5XCJ9LmZhLXllbi1zaWduOmJlZm9yZXtjb250ZW50OlwiXFxmMTU3XCJ9LmZhLXlvYXN0OmJlZm9yZXtjb250ZW50OlwiXFxmMmIxXCJ9LmZhLXlvdXR1YmU6YmVmb3Jle2NvbnRlbnQ6XCJcXGYxNjdcIn0uZmEteW91dHViZS1zcXVhcmU6YmVmb3Jle2NvbnRlbnQ6XCJcXGY0MzFcIn0uc3Itb25seXtib3JkZXI6MDtjbGlwOnJlY3QoMCwwLDAsMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweH0uc3Itb25seS1mb2N1c2FibGU6YWN0aXZlLC5zci1vbmx5LWZvY3VzYWJsZTpmb2N1c3tjbGlwOmF1dG87aGVpZ2h0OmF1dG87bWFyZ2luOjA7b3ZlcmZsb3c6dmlzaWJsZTtwb3NpdGlvbjpzdGF0aWM7d2lkdGg6YXV0b31AZm9udC1mYWNle2ZvbnQtZmFtaWx5OkZvbnQgQXdlc29tZVxcIDUgQnJhbmRzO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OjQwMDtzcmM6dXJsKC4uL3dlYmZvbnRzL2ZhLWJyYW5kcy00MDAuZW90KTtzcmM6dXJsKC4uL3dlYmZvbnRzL2ZhLWJyYW5kcy00MDAuZW90PyNpZWZpeCkgZm9ybWF0KFwiZW1iZWRkZWQtb3BlbnR5cGVcIiksdXJsKC4uL3dlYmZvbnRzL2ZhLWJyYW5kcy00MDAud29mZjIpIGZvcm1hdChcIndvZmYyXCIpLHVybCguLi93ZWJmb250cy9mYS1icmFuZHMtNDAwLndvZmYpIGZvcm1hdChcIndvZmZcIiksdXJsKC4uL3dlYmZvbnRzL2ZhLWJyYW5kcy00MDAudHRmKSBmb3JtYXQoXCJ0cnVldHlwZVwiKSx1cmwoLi4vd2ViZm9udHMvZmEtYnJhbmRzLTQwMC5zdmcjZm9udGF3ZXNvbWUpIGZvcm1hdChcInN2Z1wiKX0uZmFie2ZvbnQtZmFtaWx5OkZvbnQgQXdlc29tZVxcIDUgQnJhbmRzfUBmb250LWZhY2V7Zm9udC1mYW1pbHk6Rm9udCBBd2Vzb21lXFwgNSBGcmVlO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OjQwMDtzcmM6dXJsKC4uL3dlYmZvbnRzL2ZhLXJlZ3VsYXItNDAwLmVvdCk7c3JjOnVybCguLi93ZWJmb250cy9mYS1yZWd1bGFyLTQwMC5lb3Q/I2llZml4KSBmb3JtYXQoXCJlbWJlZGRlZC1vcGVudHlwZVwiKSx1cmwoLi4vd2ViZm9udHMvZmEtcmVndWxhci00MDAud29mZjIpIGZvcm1hdChcIndvZmYyXCIpLHVybCguLi93ZWJmb250cy9mYS1yZWd1bGFyLTQwMC53b2ZmKSBmb3JtYXQoXCJ3b2ZmXCIpLHVybCguLi93ZWJmb250cy9mYS1yZWd1bGFyLTQwMC50dGYpIGZvcm1hdChcInRydWV0eXBlXCIpLHVybCguLi93ZWJmb250cy9mYS1yZWd1bGFyLTQwMC5zdmcjZm9udGF3ZXNvbWUpIGZvcm1hdChcInN2Z1wiKX0uZmFye2ZvbnQtd2VpZ2h0OjQwMH1AZm9udC1mYWNle2ZvbnQtZmFtaWx5OkZvbnQgQXdlc29tZVxcIDUgRnJlZTtmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDo5MDA7c3JjOnVybCguLi93ZWJmb250cy9mYS1zb2xpZC05MDAuZW90KTtzcmM6dXJsKC4uL3dlYmZvbnRzL2ZhLXNvbGlkLTkwMC5lb3Q/I2llZml4KSBmb3JtYXQoXCJlbWJlZGRlZC1vcGVudHlwZVwiKSx1cmwoLi4vd2ViZm9udHMvZmEtc29saWQtOTAwLndvZmYyKSBmb3JtYXQoXCJ3b2ZmMlwiKSx1cmwoLi4vd2ViZm9udHMvZmEtc29saWQtOTAwLndvZmYpIGZvcm1hdChcIndvZmZcIiksdXJsKC4uL3dlYmZvbnRzL2ZhLXNvbGlkLTkwMC50dGYpIGZvcm1hdChcInRydWV0eXBlXCIpLHVybCguLi93ZWJmb250cy9mYS1zb2xpZC05MDAuc3ZnI2ZvbnRhd2Vzb21lKSBmb3JtYXQoXCJzdmdcIil9LmZhLC5mYXIsLmZhc3tmb250LWZhbWlseTpGb250IEF3ZXNvbWVcXCA1IEZyZWV9LmZhLC5mYXN7Zm9udC13ZWlnaHQ6OTAwfVxuIl19 */
\ No newline at end of file
diff --git a/ui/static/css/normalize.css b/ui/static/css/normalize.css
new file mode 100644
index 0000000..879fb66
--- /dev/null
+++ b/ui/static/css/normalize.css
@@ -0,0 +1,2 @@
+/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}[hidden],template{display:none}
+/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL25vcm1hbGl6ZS5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNEVBQTRFLEtBVzFFLGlCQUFrQiw2QkFDYSxDQUNoQyxLQVVDLFFBQVUsQ0FDWCxLQU9DLGFBQWUsQ0FDaEIsR0FRQyxjQUFlLGNBQ0UsQ0FDbEIsR0FXQyx1QkFBd0IsU0FDZCxnQkFDUSxDQUNuQixJQVFDLGdDQUFrQyxhQUNuQixDQUNoQixFQVVDLDRCQUE4QixDQUMvQixZQVFDLG1CQUFvQiwwQkFDTyx5Q0FDM0IsZ0NBQWtDLENBQ25DLFNBUUMsa0JBQW9CLENBQ3JCLGNBVUMsZ0NBQWtDLGFBQ25CLENBQ2hCLE1BT0MsYUFBZSxDQUNoQixRQVNDLGNBQWUsY0FDQSxrQkFDSSx1QkFDTSxDQUMxQixJQUdDLGFBQWdCLENBQ2pCLElBR0MsU0FBWSxDQUNiLElBVUMsaUJBQW1CLENBQ3BCLHNDQWVDLG9CQUFxQixlQUNMLGlCQUNFLFFBQ1IsQ0FDWCxhQVNDLGdCQUFrQixDQUNuQixjQVNDLG1CQUFxQixDQUN0QixnREFVQyx5QkFBMkIsQ0FDNUIsd0hBVUMsa0JBQW1CLFNBQ1IsQ0FDWiw0R0FVQyw2QkFBK0IsQ0FDaEMsU0FPQywwQkFBK0IsQ0FDaEMsT0FVQyxzQkFBdUIsY0FDUixjQUNBLGVBQ0MsVUFDTCxrQkFDUyxDQUNyQixTQU9DLHVCQUF5QixDQUMxQixTQU9DLGFBQWUsQ0FDaEIsNkJBU0Msc0JBQXVCLFNBQ1osQ0FDWixrRkFRQyxXQUFhLENBQ2QsY0FRQyw2QkFBOEIsbUJBQ1QsQ0FDdEIseUNBT0MsdUJBQXlCLENBQzFCLDZCQVFDLDBCQUEyQixZQUNiLENBQ2YsUUFVQyxhQUFlLENBQ2hCLFFBT0MsaUJBQW1CLENBQ3BCLGtCQWtCQyxZQUFjLENBQ2YiLCJmaWxlIjoiLi4vbm9ybWFsaXplLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi8qISBub3JtYWxpemUuY3NzIHY4LjAuMSB8IE1JVCBMaWNlbnNlIHwgZ2l0aHViLmNvbS9uZWNvbGFzL25vcm1hbGl6ZS5jc3MgKi9cblxuLyogRG9jdW1lbnRcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qKlxuICogMS4gQ29ycmVjdCB0aGUgbGluZSBoZWlnaHQgaW4gYWxsIGJyb3dzZXJzLlxuICogMi4gUHJldmVudCBhZGp1c3RtZW50cyBvZiBmb250IHNpemUgYWZ0ZXIgb3JpZW50YXRpb24gY2hhbmdlcyBpbiBpT1MuXG4gKi9cblxuaHRtbCB7XG4gIGxpbmUtaGVpZ2h0OiAxLjE1OyAvKiAxICovXG4gIC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLyogMiAqL1xufVxuXG4vKiBTZWN0aW9uc1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyoqXG4gKiBSZW1vdmUgdGhlIG1hcmdpbiBpbiBhbGwgYnJvd3NlcnMuXG4gKi9cblxuYm9keSB7XG4gIG1hcmdpbjogMDtcbn1cblxuLyoqXG4gKiBSZW5kZXIgdGhlIGBtYWluYCBlbGVtZW50IGNvbnNpc3RlbnRseSBpbiBJRS5cbiAqL1xuXG5tYWluIHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5cbi8qKlxuICogQ29ycmVjdCB0aGUgZm9udCBzaXplIGFuZCBtYXJnaW4gb24gYGgxYCBlbGVtZW50cyB3aXRoaW4gYHNlY3Rpb25gIGFuZFxuICogYGFydGljbGVgIGNvbnRleHRzIGluIENocm9tZSwgRmlyZWZveCwgYW5kIFNhZmFyaS5cbiAqL1xuXG5oMSB7XG4gIGZvbnQtc2l6ZTogMmVtO1xuICBtYXJnaW46IDAuNjdlbSAwO1xufVxuXG4vKiBHcm91cGluZyBjb250ZW50XG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKipcbiAqIDEuIEFkZCB0aGUgY29ycmVjdCBib3ggc2l6aW5nIGluIEZpcmVmb3guXG4gKiAyLiBTaG93IHRoZSBvdmVyZmxvdyBpbiBFZGdlIGFuZCBJRS5cbiAqL1xuXG5ociB7XG4gIGJveC1zaXppbmc6IGNvbnRlbnQtYm94OyAvKiAxICovXG4gIGhlaWdodDogMDsgLyogMSAqL1xuICBvdmVyZmxvdzogdmlzaWJsZTsgLyogMiAqL1xufVxuXG4vKipcbiAqIDEuIENvcnJlY3QgdGhlIGluaGVyaXRhbmNlIGFuZCBzY2FsaW5nIG9mIGZvbnQgc2l6ZSBpbiBhbGwgYnJvd3NlcnMuXG4gKiAyLiBDb3JyZWN0IHRoZSBvZGQgYGVtYCBmb250IHNpemluZyBpbiBhbGwgYnJvd3NlcnMuXG4gKi9cblxucHJlIHtcbiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZSwgbW9ub3NwYWNlOyAvKiAxICovXG4gIGZvbnQtc2l6ZTogMWVtOyAvKiAyICovXG59XG5cbi8qIFRleHQtbGV2ZWwgc2VtYW50aWNzXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKipcbiAqIFJlbW92ZSB0aGUgZ3JheSBiYWNrZ3JvdW5kIG9uIGFjdGl2ZSBsaW5rcyBpbiBJRSAxMC5cbiAqL1xuXG5hIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG59XG5cbi8qKlxuICogMS4gUmVtb3ZlIHRoZSBib3R0b20gYm9yZGVyIGluIENocm9tZSA1Ny1cbiAqIDIuIEFkZCB0aGUgY29ycmVjdCB0ZXh0IGRlY29yYXRpb24gaW4gQ2hyb21lLCBFZGdlLCBJRSwgT3BlcmEsIGFuZCBTYWZhcmkuXG4gKi9cblxuYWJiclt0aXRsZV0ge1xuICBib3JkZXItYm90dG9tOiBub25lOyAvKiAxICovXG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyAvKiAyICovXG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lIGRvdHRlZDsgLyogMiAqL1xufVxuXG4vKipcbiAqIEFkZCB0aGUgY29ycmVjdCBmb250IHdlaWdodCBpbiBDaHJvbWUsIEVkZ2UsIGFuZCBTYWZhcmkuXG4gKi9cblxuYixcbnN0cm9uZyB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkZXI7XG59XG5cbi8qKlxuICogMS4gQ29ycmVjdCB0aGUgaW5oZXJpdGFuY2UgYW5kIHNjYWxpbmcgb2YgZm9udCBzaXplIGluIGFsbCBicm93c2Vycy5cbiAqIDIuIENvcnJlY3QgdGhlIG9kZCBgZW1gIGZvbnQgc2l6aW5nIGluIGFsbCBicm93c2Vycy5cbiAqL1xuXG5jb2RlLFxua2JkLFxuc2FtcCB7XG4gIGZvbnQtZmFtaWx5OiBtb25vc3BhY2UsIG1vbm9zcGFjZTsgLyogMSAqL1xuICBmb250LXNpemU6IDFlbTsgLyogMiAqL1xufVxuXG4vKipcbiAqIEFkZCB0aGUgY29ycmVjdCBmb250IHNpemUgaW4gYWxsIGJyb3dzZXJzLlxuICovXG5cbnNtYWxsIHtcbiAgZm9udC1zaXplOiA4MCU7XG59XG5cbi8qKlxuICogUHJldmVudCBgc3ViYCBhbmQgYHN1cGAgZWxlbWVudHMgZnJvbSBhZmZlY3RpbmcgdGhlIGxpbmUgaGVpZ2h0IGluXG4gKiBhbGwgYnJvd3NlcnMuXG4gKi9cblxuc3ViLFxuc3VwIHtcbiAgZm9udC1zaXplOiA3NSU7XG4gIGxpbmUtaGVpZ2h0OiAwO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcbn1cblxuc3ViIHtcbiAgYm90dG9tOiAtMC4yNWVtO1xufVxuXG5zdXAge1xuICB0b3A6IC0wLjVlbTtcbn1cblxuLyogRW1iZWRkZWQgY29udGVudFxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyoqXG4gKiBSZW1vdmUgdGhlIGJvcmRlciBvbiBpbWFnZXMgaW5zaWRlIGxpbmtzIGluIElFIDEwLlxuICovXG5cbmltZyB7XG4gIGJvcmRlci1zdHlsZTogbm9uZTtcbn1cblxuLyogRm9ybXNcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qKlxuICogMS4gQ2hhbmdlIHRoZSBmb250IHN0eWxlcyBpbiBhbGwgYnJvd3NlcnMuXG4gKiAyLiBSZW1vdmUgdGhlIG1hcmdpbiBpbiBGaXJlZm94IGFuZCBTYWZhcmkuXG4gKi9cblxuYnV0dG9uLFxuaW5wdXQsXG5vcHRncm91cCxcbnNlbGVjdCxcbnRleHRhcmVhIHtcbiAgZm9udC1mYW1pbHk6IGluaGVyaXQ7IC8qIDEgKi9cbiAgZm9udC1zaXplOiAxMDAlOyAvKiAxICovXG4gIGxpbmUtaGVpZ2h0OiAxLjE1OyAvKiAxICovXG4gIG1hcmdpbjogMDsgLyogMiAqL1xufVxuXG4vKipcbiAqIFNob3cgdGhlIG92ZXJmbG93IGluIElFLlxuICogMS4gU2hvdyB0aGUgb3ZlcmZsb3cgaW4gRWRnZS5cbiAqL1xuXG5idXR0b24sXG5pbnB1dCB7IC8qIDEgKi9cbiAgb3ZlcmZsb3c6IHZpc2libGU7XG59XG5cbi8qKlxuICogUmVtb3ZlIHRoZSBpbmhlcml0YW5jZSBvZiB0ZXh0IHRyYW5zZm9ybSBpbiBFZGdlLCBGaXJlZm94LCBhbmQgSUUuXG4gKiAxLiBSZW1vdmUgdGhlIGluaGVyaXRhbmNlIG9mIHRleHQgdHJhbnNmb3JtIGluIEZpcmVmb3guXG4gKi9cblxuYnV0dG9uLFxuc2VsZWN0IHsgLyogMSAqL1xuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcbn1cblxuLyoqXG4gKiBDb3JyZWN0IHRoZSBpbmFiaWxpdHkgdG8gc3R5bGUgY2xpY2thYmxlIHR5cGVzIGluIGlPUyBhbmQgU2FmYXJpLlxuICovXG5cbmJ1dHRvbixcblt0eXBlPVwiYnV0dG9uXCJdLFxuW3R5cGU9XCJyZXNldFwiXSxcblt0eXBlPVwic3VibWl0XCJdIHtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBidXR0b247XG59XG5cbi8qKlxuICogUmVtb3ZlIHRoZSBpbm5lciBib3JkZXIgYW5kIHBhZGRpbmcgaW4gRmlyZWZveC5cbiAqL1xuXG5idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsXG5bdHlwZT1cImJ1dHRvblwiXTo6LW1vei1mb2N1cy1pbm5lcixcblt0eXBlPVwicmVzZXRcIl06Oi1tb3otZm9jdXMtaW5uZXIsXG5bdHlwZT1cInN1Ym1pdFwiXTo6LW1vei1mb2N1cy1pbm5lciB7XG4gIGJvcmRlci1zdHlsZTogbm9uZTtcbiAgcGFkZGluZzogMDtcbn1cblxuLyoqXG4gKiBSZXN0b3JlIHRoZSBmb2N1cyBzdHlsZXMgdW5zZXQgYnkgdGhlIHByZXZpb3VzIHJ1bGUuXG4gKi9cblxuYnV0dG9uOi1tb3otZm9jdXNyaW5nLFxuW3R5cGU9XCJidXR0b25cIl06LW1vei1mb2N1c3JpbmcsXG5bdHlwZT1cInJlc2V0XCJdOi1tb3otZm9jdXNyaW5nLFxuW3R5cGU9XCJzdWJtaXRcIl06LW1vei1mb2N1c3Jpbmcge1xuICBvdXRsaW5lOiAxcHggZG90dGVkIEJ1dHRvblRleHQ7XG59XG5cbi8qKlxuICogQ29ycmVjdCB0aGUgcGFkZGluZyBpbiBGaXJlZm94LlxuICovXG5cbmZpZWxkc2V0IHtcbiAgcGFkZGluZzogMC4zNWVtIDAuNzVlbSAwLjYyNWVtO1xufVxuXG4vKipcbiAqIDEuIENvcnJlY3QgdGhlIHRleHQgd3JhcHBpbmcgaW4gRWRnZSBhbmQgSUUuXG4gKiAyLiBDb3JyZWN0IHRoZSBjb2xvciBpbmhlcml0YW5jZSBmcm9tIGBmaWVsZHNldGAgZWxlbWVudHMgaW4gSUUuXG4gKiAzLiBSZW1vdmUgdGhlIHBhZGRpbmcgc28gZGV2ZWxvcGVycyBhcmUgbm90IGNhdWdodCBvdXQgd2hlbiB0aGV5IHplcm8gb3V0XG4gKiAgICBgZmllbGRzZXRgIGVsZW1lbnRzIGluIGFsbCBicm93c2Vycy5cbiAqL1xuXG5sZWdlbmQge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94OyAvKiAxICovXG4gIGNvbG9yOiBpbmhlcml0OyAvKiAyICovXG4gIGRpc3BsYXk6IHRhYmxlOyAvKiAxICovXG4gIG1heC13aWR0aDogMTAwJTsgLyogMSAqL1xuICBwYWRkaW5nOiAwOyAvKiAzICovXG4gIHdoaXRlLXNwYWNlOiBub3JtYWw7IC8qIDEgKi9cbn1cblxuLyoqXG4gKiBBZGQgdGhlIGNvcnJlY3QgdmVydGljYWwgYWxpZ25tZW50IGluIENocm9tZSwgRmlyZWZveCwgYW5kIE9wZXJhLlxuICovXG5cbnByb2dyZXNzIHtcbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xufVxuXG4vKipcbiAqIFJlbW92ZSB0aGUgZGVmYXVsdCB2ZXJ0aWNhbCBzY3JvbGxiYXIgaW4gSUUgMTArLlxuICovXG5cbnRleHRhcmVhIHtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG5cbi8qKlxuICogMS4gQWRkIHRoZSBjb3JyZWN0IGJveCBzaXppbmcgaW4gSUUgMTAuXG4gKiAyLiBSZW1vdmUgdGhlIHBhZGRpbmcgaW4gSUUgMTAuXG4gKi9cblxuW3R5cGU9XCJjaGVja2JveFwiXSxcblt0eXBlPVwicmFkaW9cIl0ge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94OyAvKiAxICovXG4gIHBhZGRpbmc6IDA7IC8qIDIgKi9cbn1cblxuLyoqXG4gKiBDb3JyZWN0IHRoZSBjdXJzb3Igc3R5bGUgb2YgaW5jcmVtZW50IGFuZCBkZWNyZW1lbnQgYnV0dG9ucyBpbiBDaHJvbWUuXG4gKi9cblxuW3R5cGU9XCJudW1iZXJcIl06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sXG5bdHlwZT1cIm51bWJlclwiXTo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiB7XG4gIGhlaWdodDogYXV0bztcbn1cblxuLyoqXG4gKiAxLiBDb3JyZWN0IHRoZSBvZGQgYXBwZWFyYW5jZSBpbiBDaHJvbWUgYW5kIFNhZmFyaS5cbiAqIDIuIENvcnJlY3QgdGhlIG91dGxpbmUgc3R5bGUgaW4gU2FmYXJpLlxuICovXG5cblt0eXBlPVwic2VhcmNoXCJdIHtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7IC8qIDEgKi9cbiAgb3V0bGluZS1vZmZzZXQ6IC0ycHg7IC8qIDIgKi9cbn1cblxuLyoqXG4gKiBSZW1vdmUgdGhlIGlubmVyIHBhZGRpbmcgaW4gQ2hyb21lIGFuZCBTYWZhcmkgb24gbWFjT1MuXG4gKi9cblxuW3R5cGU9XCJzZWFyY2hcIl06Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb24ge1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG59XG5cbi8qKlxuICogMS4gQ29ycmVjdCB0aGUgaW5hYmlsaXR5IHRvIHN0eWxlIGNsaWNrYWJsZSB0eXBlcyBpbiBpT1MgYW5kIFNhZmFyaS5cbiAqIDIuIENoYW5nZSBmb250IHByb3BlcnRpZXMgdG8gYGluaGVyaXRgIGluIFNhZmFyaS5cbiAqL1xuXG46Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9uIHtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBidXR0b247IC8qIDEgKi9cbiAgZm9udDogaW5oZXJpdDsgLyogMiAqL1xufVxuXG4vKiBJbnRlcmFjdGl2ZVxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLypcbiAqIEFkZCB0aGUgY29ycmVjdCBkaXNwbGF5IGluIEVkZ2UsIElFIDEwKywgYW5kIEZpcmVmb3guXG4gKi9cblxuZGV0YWlscyB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4vKlxuICogQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gYWxsIGJyb3dzZXJzLlxuICovXG5cbnN1bW1hcnkge1xuICBkaXNwbGF5OiBsaXN0LWl0ZW07XG59XG5cbi8qIE1pc2NcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qKlxuICogQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gSUUgMTArLlxuICovXG5cbnRlbXBsYXRlIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyoqXG4gKiBBZGQgdGhlIGNvcnJlY3QgZGlzcGxheSBpbiBJRSAxMC5cbiAqL1xuXG5baGlkZGVuXSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4iXX0= */
\ No newline at end of file
diff --git a/ui/static/css/style.css b/ui/static/css/style.css
new file mode 100644
index 0000000..ca3b105
--- /dev/null
+++ b/ui/static/css/style.css
@@ -0,0 +1,2 @@
+html{height:100%}body{display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column}body header{width:1040px;display:grid;grid-template-columns:150px auto auto;grid-template-rows:auto;grid-template-areas:"icon title nav" "icon subtitle nav";grid-column-gap:1rem;margin:1rem auto 0}body header>a{grid-area:icon;justify-self:left}body header>a img{max-width:160px;max-height:70px;display:block}body header>h1{grid-area:title;color:#2f3749;align-self:end;margin:0;font-size:1.5em;font-weight:700}body header>h1 a{text-decoration:none;color:inherit}body header>h2{grid-area:subtitle;align-self:start;font-size:80%;margin:0;color:#9ca7b7;font-weight:lighter}body header>h2 a{text-decoration:none;color:inherit}body header>nav{grid-area:nav;justify-self:end;align-self:center}body header>nav a,body header>nav span{margin-right:1em;text-decoration:none;color:grey;font-size:80%}body header>nav .endpoint-button{color:inherit}body header>nav .endpoint-button.selected{text-decoration:underline}body header>nav .access-button{background-color:#e4e7ec;color:grey;border-radius:5px;padding:.3em .5em;border:1px solid #d4d7df}body header>nav .access-button:active{position:relative;top:1px}body header>nav .access-button.selected{color:#fff;background-color:#999a9b;border:1px solid #848484}body header>nav .login-button{background-color:#435061;color:#fff;font-weight:700;border-radius:5px;padding:.3em 1.25em;border:1px solid #001a3b;-webkit-transition:box-shadow .2s;transition:box-shadow .2s}body header>nav .login-button:active{position:relative;top:1px}form#query{background-color:#eff3f6;color:#333;box-sizing:border-box;width:100%;padding:1em 1em 2em;margin:1em 0 2em;border-top:1px solid #e5e8ea;font-size:90%}form#query div.form-container{display:grid;grid-template-columns:2fr 1fr;grid-template-rows:auto 225px auto;grid-template-areas:"search search" "datasets filters" "errors errors";justify-items:stretch;-webkit-box-align:stretch;align-items:stretch;grid-gap:0 1rem;width:1040px;margin:0 auto}form#query div.form-container fieldset{border-radius:.5em}form#query div.form-container fieldset legend{padding:0 1ex}form#query div.form-container #include-dataset-responses{border:0;display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row nowrap;-webkit-box-pack:center;justify-content:center;-webkit-box-align:center;align-items:center}form#query div.form-container #include-dataset-responses section{margin-left:1em}form#query div.form-container #include-dataset-responses section label{margin-right:1em}form#query div.form-container #query-search{grid-area:search;display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row nowrap;-webkit-box-pack:justify;justify-content:space-between;-webkit-box-align:center;align-items:center;padding:1em 0;border:none;outline:none}form#query div.form-container #query-search select{padding:0 1em;margin:0}form#query div.form-container #query-search section{position:relative;min-width:50%;margin:0 1em}form#query div.form-container #query-search section input{width:725px;box-sizing:border-box;display:block;padding:.5rem 1.6rem;border:1px solid #ddd;outline:none;background-color:#fff;text-align:center;-webkit-transition:box-shadow .2s;transition:box-shadow .2s}form#query div.form-container #query-search section input::-webkit-input-placeholder{color:#222}form#query div.form-container #query-search section input::-moz-placeholder{color:#222}form#query div.form-container #query-search section input:-ms-input-placeholder{color:#222}form#query div.form-container #query-search section input::-ms-input-placeholder{color:#222}form#query div.form-container #query-search section input::placeholder{color:#222}form#query div.form-container #query-search section input:focus{border:1px solid #51cbee;box-shadow:0 0 5px #51cbee}form#query div.form-container #query-search section label{display:block;position:absolute;top:-1.5em;left:0;width:100%;text-align:center;font-size:80%;opacity:1;visibility:visible;-webkit-transition:opacity .3s,visibility 0ms;transition:opacity .3s,visibility 0ms}form#query div.form-container #query-search section input:placeholder-shown+label{opacity:0;visibility:hidden}form#query div.form-container #query-search button{height:80%;padding:1ex;margin-left:1em;cursor:pointer;text-align:center;display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row nowrap;align-content:center;color:#fff;background-color:#2196f3;outline:none;border:0;border-radius:3px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}form#query div.form-container #query-search button:active{position:relative;top:1px}form#query div.form-container #query-search button p{align-self:center;margin:0;padding-left:5px}form#query div.form-container #query-search button i{align-self:center}form#query div.form-container #query-datasets{grid-area:datasets;display:block;position:relative;padding:0;background-color:#fff;border:.1px solid #e8ebef;border-radius:5px;min-height:128px;min-height:8rem;max-height:100%}form#query div.form-container #query-datasets #datasets-header{display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row nowrap;-webkit-box-pack:justify;justify-content:space-between;margin:0;padding:.5em 1em;height:18px;border-bottom:.1px solid #e8ebef}form#query div.form-container #query-datasets #datasets-header p{display:inline-block;font-size:90%;margin:0;padding:0}form#query div.form-container #query-datasets #datasets-header p span{cursor:pointer}form#query div.form-container #query-datasets section{overflow:auto;max-height:100%;box-sizing:border-box;padding:.5em 1em 1em;display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;-webkit-box-pack:start;justify-content:flex-start}form#query div.form-container #query-datasets section label{display:block;-webkit-box-ordinal-group:2;order:1}form#query div.form-container #query-datasets section label.dataset-not-authorized{opacity:.5;text-decoration:line-through;-webkit-box-ordinal-group:3;order:2}form#query div.form-container #query-filters{grid-area:filters;display:block;position:relative;padding:0;background-color:#fff;border:.1px solid #e8ebef;border-radius:5px;overflow:auto;min-height:128px;min-height:8rem;max-height:100%}form#query div.form-container #query-filters #filters-header{display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row nowrap;-webkit-box-pack:left;justify-content:left;padding:.5em 1em;height:18px;border-bottom:.1px solid #e8ebef}form#query div.form-container #query-filters #filters-header p{font-size:90%;margin:0;padding:0}form#query div.form-container #query-filters i{cursor:pointer;color:#354052}form#query div.form-container #query-filters i.filter-add{display:inline-block}form#query div.form-container #query-filters section{padding:.5em 1em 1em;margin:.5em 0;display:-webkit-box;display:flex;-webkit-box-align:stretch;align-items:stretch}form#query div.form-container #query-filters section input{-webkit-box-flex:1;flex-grow:1;padding:.3em 1em;border:1px solid #ddd;outline:none;-webkit-transition:box-shadow .2s;transition:box-shadow .2s}form#query div.form-container #query-filters section input::-webkit-input-placeholder{color:#222}form#query div.form-container #query-filters section input::-moz-placeholder{color:#222}form#query div.form-container #query-filters section input:-ms-input-placeholder{color:#222}form#query div.form-container #query-filters section input::-ms-input-placeholder{color:#222}form#query div.form-container #query-filters section input::placeholder{color:#222}form#query div.form-container #query-filters section input:focus{box-shadow:0 0 5px #51cbee}form#query div.form-container #query-filters section span{padding:.3em 1em;outline:none;border:1px solid #ddd;line-height:1.15}form#query div.form-container #query-filters section i{margin-left:1ex;align-self:center}form#query div.form-container #query-errors{grid-area:errors;margin:0 auto}form#query div.form-container #query-errors div.error-wrapper{display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row nowrap;margin:2em 0 1em;padding:1.25em 3.5em;border-radius:5px;background-color:#db524b;color:#fff;-webkit-box-pack:center;justify-content:center;position:relative}form#query div.form-container #query-errors div.error-wrapper i{position:absolute;top:8px;left:9px;font-size:20px}form#query div.form-container #query-errors div.error-wrapper code{background-color:#e78d88;display:inline-block;padding:3px 1ex;border-radius:5px;margin:0 .25em}form#query div.form-container #query-errors div.error-wrapper span.bold{font-weight:700;margin-right:.25em}form#query div.form-container #query-errors div.error-wrapper span.query-form{font-weight:700;background-color:#e78d88;display:inline-block;padding:3px 1ex;border-radius:5px;color:#fff;margin-right:.5em;min-width:7.5em;text-align:center}form#query div.form-container #query-errors div.error-wrapper div.small{padding-left:10px;font-size:85%}form#query div.form-container #query-errors div.error-wrapper div.small p{margin-bottom:.5em}form#query div.form-container #query-errors div.error-wrapper div.small ul{margin-top:0;list-style-type:none;text-indent:-10px}main{-webkit-box-flex:1;flex:1;width:1040px;margin:0 auto}main span.label{display:inline;padding:.2em .6em;font-size:75%;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:5px;background-color:grey;color:#fff;border:none}main span.label.label-public{background-color:#5cb85c}main span.label.label-registered{background-color:#f0ad4e}main span.label.label-controlled{background-color:#d9534f}main span.label.label-not_supported{background-color:#ccc}main p{margin:0 0 1em}#info main{padding:0 1em}#info main section{display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row;-webkit-box-align:start;align-items:flex-start;padding:1em;border-top:1px solid #ccc;max-width:100%}#info main section>p{padding:0;-webkit-box-flex:1;flex:1;font-size:12px;margin:.15em 0 0}#info main section>a{display:inline-block;margin:0;padding:0;text-decoration:none}#info main section>a .label{font-size:12px}#info main section>span{margin:.15em 1em 0;display:-webkit-box;display:flex;font-size:75%;border-radius:50%;cursor:help;width:18px;height:18px;-webkit-box-pack:center;justify-content:center;-webkit-box-align:center;align-items:center;background-color:grey;color:#fff}#info main section>span.label-authorized{background-color:#5cb85c}#info main section>span.label-not_authorized{background-color:#d9534f}#beacon-cookies{position:fixed;z-index:1000;bottom:0;right:0;left:0;display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row nowrap;-webkit-box-align:center;align-items:center;-webkit-box-pack:center;justify-content:center;color:#fff;background:#24282a;padding:1em 0;opacity:1}#beacon-cookies>div{width:1000px}#beacon-cookies>div h6{font-size:1.5em;margin:0;padding:0}#beacon-cookies>div p{margin:1em 0}#beacon-cookies>div a{display:inline-block;color:#e05540}#beacon-cookies button{width:140px;margin-left:1em;border-radius:3px;height:2em;color:inherit;background-color:#e05540;border:none;cursor:pointer}#beacon-cookies.hide-me{opacity:0;-webkit-transition:opacity 1s;transition:opacity 1s}#beacon-cookies+footer{margin-bottom:9rem}#beacon-cookies.hide-me+footer{margin-bottom:0;-webkit-transition:margin 1.5s;transition:margin 1.5s}footer{margin-top:2em;padding:2em;background-color:#eff3f6;color:#2f3749;font-size:12px;font-weight:lighter;display:-webkit-box;display:flex}footer section{position:relative}footer section:before{content:"|";display:inline-block;margin:0 1em}footer section:first-of-type{margin-left:auto}footer section:first-of-type:before{content:none}footer input,footer label{cursor:pointer}footer a{text-decoration:none;color:grey}footer a i{color:#2f3749;font-size:120%}#beacon-response{white-space:pre-wrap;position:fixed;top:10vh;bottom:10vh;right:10vw;left:10vw;z-index:100;overflow:auto}#beacon-request,#beacon-response{display:none;box-shadow:0 0 50px 0 #c3c3c3;background:#fff;padding:1em;box-sizing:border-box;border-radius:5px}#beacon-request{position:absolute;right:0;bottom:2em;width:60vw;z-index:101;text-align:center}input#beacon-request-trigger:checked~#beacon-request,input#beacon-response-trigger:checked~#beacon-response{display:block}#response-history{display:none}aside{position:fixed;top:10%;bottom:10%;height:80%;z-index:200;box-sizing:border-box;overflow:auto;width:300px;left:calc(-300px + 1.5em);padding:1.5em;border-radius:0 1em 1em 0;box-shadow:0 2px 5px 0 rgba(0,0,0,.2);background-color:#eff3f6;color:#636363;counter-reset:history}aside>span{display:inline-block;float:right;font-size:.7em;cursor:pointer;margin:.5em 0}aside h1{text-align:right;margin:0 0 1em;color:#2f3749;-webkit-transform:rotate(90deg) translate(-170px,-300px);transform:rotate(90deg) translate(-170px,-300px);-webkit-transform-origin:0 -100%;transform-origin:0 -100%;font-size:1em}aside h1 span{border-radius:50%;padding:.5ex 1ex;margin-left:1ex;font-size:.5em;background-color:#2196f3;color:#fff;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;-webkit-transform:rotate(-90deg);transform:rotate(-90deg);-webkit-transform-origin:center;transform-origin:center;display:inline-block}aside.open,aside:hover{-webkit-transition:left .3s;transition:left .3s;left:0}aside.open h1,aside:hover h1{font-size:1.5em}aside.open h1,aside.open h1 span,aside:hover h1,aside:hover h1 span{-webkit-transform:none;transform:none}aside section{display:block;margin-bottom:1em;border:1px solid #e5e8ea;border-radius:1em 1em 1ex 1ex;font-weight:lighter;background-color:#fff;position:relative}aside section h2{color:#fff;font-weight:lighter}aside section:hover{box-shadow:0 2px 5px 0 rgba(0,0,0,.1)}aside section:hover h2 i.fas{display:inline-block;color:#fff;margin-right:5px}aside section:before{counter-increment:history;content:counter(history);position:absolute;top:-1ex;left:-1ex;z-index:10;border-radius:40%;padding:.5ex 1ex;font-size:70%;background-color:grey;color:#fff}aside section p.long,aside section pre{word-break:break-all}aside section h2{padding:.3em 1em;border-radius:1em 1em 0 0;margin:0;font-size:1em;text-align:center;position:relative;z-index:5}aside section h2.response-Y{background-color:#36ae47}aside section h2.response-N{background-color:#f06543}aside section h2 i.fas{display:none;position:absolute;right:5px;top:0;-webkit-transform:translateY(50%);transform:translateY(50%);width:1em;cursor:pointer}aside section h2 i.fas:hover{text-shadow:0 0 5px #fff}aside section ul{list-style-type:none;font-weight:lighter;font-size:90%;margin:.5em 0;padding:0}aside section ul li{word-break:break-all;display:-webkit-box;display:flex;-webkit-box-pack:justify;justify-content:space-between;border-bottom:1px solid #e5e8ea;padding:.2em 2.5em}aside section ul li span:nth-child(2){color:#a9a9a9}aside section ul li:last-child{border-bottom:none}body{margin:0 auto;min-height:100vh;box-sizing:border-box;font-family:Open Sans,Helvetica Neue,Arial,sans-serif;font-size:14px;color:#636363;line-height:1.4}body,body main#access-levels{width:1140px}body main#access-levels #access-levels-legend{margin-right:50px;padding:.5em;display:-webkit-box;display:flex;-webkit-box-pack:end;justify-content:flex-end}body main#access-levels #access-levels-legend .label{margin:0 1ex}body main#access-levels>nav{display:-webkit-box;display:flex;margin-top:1em;-webkit-box-pack:end;justify-content:flex-end}body main#access-levels>nav input{margin:0 1ex}body main#access-levels .section-title{background-color:#eff3f6;width:100%;height:50px;display:-webkit-box;display:flex;-webkit-box-pack:justify;justify-content:space-between;-webkit-box-align:center;align-items:center;margin-top:2em}body main#access-levels .section-title h1{margin-left:1em;font-size:18px}body main#access-levels .section-title h1 small{font-size:14px;font-weight:lighter;margin-left:.5em}body main#access-levels .section-title div.include-check{font-size:12px;font-weight:lighter;margin-right:1em}body main#access-levels .section-content{width:1040px;margin:0 auto}body main#access-levels .section-content ul.collapsed{list-style-type:none;display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row wrap;margin:2em 0;padding:0}body main#access-levels .section-content ul.collapsed .label{margin:1ex;display:inline-block;font-size:1em}body main#access-levels .section-content ul.expanded{margin:0;padding:0}body main#access-levels .section-content ul.expanded>li{border-top:1px solid #ccc;padding-top:1em;margin-bottom:1em;display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row nowrap;-webkit-box-pack:start;justify-content:flex-start}body main#access-levels .section-content ul.expanded>li:first-child{border-top:none;margin-top:2em}body main#access-levels .section-content ul.expanded>li>span{margin-right:1em;min-width:15em;display:inline-block;text-align:right}body main#access-levels .section-content ul.expanded>li ul{list-style-type:none;margin:0;padding:0;display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row wrap;-webkit-box-pack:start;justify-content:flex-start}body main#access-levels .section-content ul.expanded>li ul .label{margin:0 1ex .5ex 0;display:inline-block;font-size:1em}body main#access-levels .section-content div.datasets{margin:2em auto;display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row wrap;-webkit-box-pack:center;justify-content:center}body main#access-levels .section-content div.datasets p{display:inline-block;text-align:center;padding:1em;margin:0 0 0 1em}body main#access-levels .section-content div.datasets p .label{margin-left:1ex}body main#access-levels .section-content .message{margin:1em}body main#access-levels .section-content .message p{width:70%;padding:.2em;margin:2em auto;border-radius:5px;border:1px solid grey;background-color:#636363;color:#fff;text-align:center;font-weight:lighter}body#response>main{display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row wrap;-webkit-box-align:start;align-items:flex-start;-webkit-box-pack:center;justify-content:center}body#response>main section{min-width:150px;margin:1em;padding:0;border:1px solid #e5e8ea;border-radius:1ex;color:grey;overflow:hidden}body#response>main section h3{font-size:14px;font-weight:400;margin:0;padding:.5em;text-align:center;color:#fff}body#response>main section li{padding:.5em 1em;border-bottom:1px solid #e5e8ea;display:-webkit-box;display:flex;-webkit-box-pack:justify;justify-content:space-between;font-size:90%}body#response>main section li:last-of-type{border-bottom:none}body#response>main section li.handover{background-color:#eff3f6;color:#2196f3;position:relative}body#response>main section li.handover .handover-note{overflow:scroll}body#response>main section li.handover .handover-note a{display:inline-block;color:#2196f3;text-decoration:none}body#response>main section li.handover .handover-note p{display:none;position:absolute;left:50%;top:2px;-webkit-transform:translate(-50%,-100%);transform:translate(-50%,-100%);margin:0 auto;padding:.5em 1em;width:100px;height:40px;color:#fff;background-color:#353c47;z-index:99;overflow:scroll;border-radius:5px;border:2px solid #353c47}body#response>main section li.handover .handover-note:after{content:"";width:0;height:0;display:none;position:absolute;z-index:100;border:5px solid transparent;border-top-color:#353c47;left:50%;top:2px;-webkit-transform:translateX(-50%);transform:translateX(-50%)}body#response>main section li.handover:hover .handover-note:after,body#response>main section li.handover:hover .handover-note p{display:block}body#response>main section li span.variable{display:inline-block;padding-right:.5em}body#response>main section li span.number{display:inline-block}body#response>main section ul{padding:0;margin:0;list-style-type:none}body#response>main section span.number{color:#000;font-weight:700}body#response>main section.exists-Y h3{background-color:#36ae47}body#response>main section.exists-Y h3 span{font-weight:700}body#response>main section.exists-N h3{background-color:#f06543}body#response>main section.exists-N h3 span{font-weight:700}body#response>main.per-variant{margin:0 auto;padding:0}body#response>main.per-variant .noVariantsFound{display:grid;grid-auto-columns:1;grid-auto-rows:2;-webkit-box-pack:center;justify-content:center}body#response>main.per-variant .noVariantsFound section{justify-self:center;width:150px}body#response>main.per-variant .noVariantsFound p{display:inline-block;font-size:80%;color:grey;font-weight:lighter}body#response>main.per-variant .noVariantsFound p span{font-weight:700}body#response>main.per-variant .variantsPanel{display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row nowrap;-webkit-box-align:stretch;align-items:stretch;width:1040px;height:650px;margin:0 auto;padding:0;border:1px solid #eff3f6;border-radius:5px}body#response>main.per-variant .variantsPanel .sidebar-wrapper{background-color:#eff3f6;width:175px;height:100%;overflow:scroll}body#response>main.per-variant .variantsPanel .sidebar-wrapper .sidebar{display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-flow:column nowrap;-webkit-box-pack:stretch;justify-content:stretch}body#response>main.per-variant .variantsPanel .sidebar-wrapper .sidebar .variantButton{background-color:#d6dade;min-height:50px;max-height:100px;display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row nowrap;-webkit-box-pack:center;justify-content:center;color:#fff;overflow:scroll;cursor:pointer}body#response>main.per-variant .variantsPanel .sidebar-wrapper .sidebar .variantButton p{display:inline-block;padding:1em;margin:0;text-align:justify}body#response>main.per-variant .variantsPanel .sidebar-wrapper .sidebar .variantButton:hover{background-color:#ccd0d3}body#response>main.per-variant .variantsPanel .sidebar-wrapper .sidebar .variantButton.selected{background-color:#1d94ee}body#response>main.per-variant .variantsPanel .sidebar-wrapper .sidebar .variantButton:first-child{border-top-left-radius:5px}body#response>main.per-variant .variantsPanel .content-wrapper{background-color:#fff;width:990px;height:100%;overflow:scroll;position:relative}body#response>main.per-variant .variantsPanel .content-wrapper .content{display:none;padding:3.5em 1em 1em 3em;width:90%;grid-column:100%;grid-row:50px auto;grid-template-areas:"variant-header" "datasets";grid-gap:1em}body#response>main.per-variant .variantsPanel .content-wrapper .content.selected{display:grid}body#response>main.per-variant .variantsPanel .content-wrapper .content .header{grid-area:variant-header;margin-left:1em;display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row nowrap}body#response>main.per-variant .variantsPanel .content-wrapper .content .header p{display:inline-block;font-weight:700;margin:0 1em 0 0}body#response>main.per-variant .variantsPanel .content-wrapper .content .header p small{font-weight:lighter;font-size:100%;padding-left:.25em}body#response>main.per-variant .variantsPanel .content-wrapper .content .header div{margin:0;padding:0;text-decoration:none;display:-webkit-box;display:flex}body#response>main.per-variant .variantsPanel .content-wrapper .content .header div .logo{margin:auto .5em;padding:0;position:relative;align-self:center}body#response>main.per-variant .variantsPanel .content-wrapper .content .header div .logo img{width:16px;height:16px;border-radius:30%}body#response>main.per-variant .variantsPanel .content-wrapper .content .header div .logo i{font-size:15px;color:#2196f3}body#response>main.per-variant .variantsPanel .content-wrapper .content .header div .logo:after{content:"";width:0;height:0;display:none;position:absolute;z-index:101;border:8px solid transparent;border-bottom-color:#353c47;left:50%;top:12px;-webkit-transform:translateX(-50%);transform:translateX(-50%)}body#response>main.per-variant .variantsPanel .content-wrapper .content .header div div.result{display:none;position:absolute;height:500px;width:80%;top:67px;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);z-index:101;margin:0 auto;align-self:start}body#response>main.per-variant .variantsPanel .content-wrapper .content .header div div.result .transparent{height:10px;margin:0}body#response>main.per-variant .variantsPanel .content-wrapper .content .header div div.result .content-handover{background-color:#353c47;height:100%;color:#fff;font-family:Courier New,Courier,monospace;font-weight:lighter;padding:1em;border-radius:5px;overflow:scroll}body#response>main.per-variant .variantsPanel .content-wrapper .content .header div div.result .content-handover p{margin-left:1em;font-weight:bolder}body#response>main.per-variant .variantsPanel .content-wrapper .content .header div div.result.small{width:80%}body#response>main.per-variant .variantsPanel .content-wrapper .content .header div div.result.small .content-handover{height:auto;padding:1em;overflow:scroll;display:block}body#response>main.per-variant .variantsPanel .content-wrapper .content .header div div.result.small .content-handover p{font-family:Open Sans,Helvetica Neue,Arial,sans-serif;font-size:90%}body#response>main.per-variant .variantsPanel .content-wrapper .content .header div div.result.small .content-handover p span{font-weight:700}body#response>main.per-variant .variantsPanel .content-wrapper .content .header div div.result.small .content-handover p a{text-decoration:none;color:#fff}body#response>main.per-variant .variantsPanel .content-wrapper .content .header div:hover div.logo:after,body#response>main.per-variant .variantsPanel .content-wrapper .content .header div:hover div.result{display:block}body#response>main.per-variant .variantsPanel .content-wrapper .content .header div.missing div img{opacity:.5;filter:alpha(opacity=50)}body#response>main.per-variant .variantsPanel .content-wrapper .content .header div.missing div i{color:#b1cee5}body#response>main.per-variant .variantsPanel .content-wrapper .content .header div.missing:hover div.logo:after,body#response>main.per-variant .variantsPanel .content-wrapper .content .header div.missing:hover div.result{display:none}body#response>main.per-variant .variantsPanel .content-wrapper .content .dataset-responses{grid-area:datasets;display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row wrap;-webkit-box-align:start;align-items:flex-start;-webkit-box-pack:start;justify-content:start;overflow:scroll;padding-left:1em}body#response>main.per-variant .variantsPanel .content-wrapper .content .dataset-responses section{min-width:150px;margin:1em;padding:0;border:1px solid #e5e8ea;border-radius:1ex;color:grey;overflow:hidden}body#response>main.per-variant .variantsPanel .content-wrapper .content .dataset-responses section h3{font-size:14px;font-weight:400;margin:0;padding:.5em;text-align:center;color:#fff}body#response>main.per-variant .variantsPanel .content-wrapper .content .dataset-responses section li{padding:.5em 1em;border-bottom:1px solid #e5e8ea;display:-webkit-box;display:flex;-webkit-box-pack:justify;justify-content:space-between;font-size:90%}body#response>main.per-variant .variantsPanel .content-wrapper .content .dataset-responses section li:last-of-type{border-bottom:none}body#response>main.per-variant .variantsPanel .content-wrapper .content .dataset-responses section li.handover{background-color:#eff3f6;color:#2196f3;position:relative}body#response>main.per-variant .variantsPanel .content-wrapper .content .dataset-responses section li.handover .handover-note{overflow:scroll}body#response>main.per-variant .variantsPanel .content-wrapper .content .dataset-responses section li.handover .handover-note a{display:inline-block;color:#2196f3;text-decoration:none}body#response>main.per-variant .variantsPanel .content-wrapper .content .dataset-responses section li.handover .handover-note p{display:none;position:absolute;left:50%;top:2px;-webkit-transform:translate(-50%,-100%);transform:translate(-50%,-100%);margin:0 auto;padding:.5em 1em;width:100px;height:40px;color:#fff;background-color:#353c47;z-index:99;overflow:scroll;border-radius:5px;border:2px solid #353c47}body#response>main.per-variant .variantsPanel .content-wrapper .content .dataset-responses section li.handover .handover-note:after{content:"";width:0;height:0;display:none;position:absolute;z-index:100;border:5px solid transparent;border-top-color:#353c47;left:50%;top:2px;-webkit-transform:translateX(-50%);transform:translateX(-50%)}body#response>main.per-variant .variantsPanel .content-wrapper .content .dataset-responses section li.handover:hover .handover-note:after,body#response>main.per-variant .variantsPanel .content-wrapper .content .dataset-responses section li.handover:hover .handover-note p{display:block}body#response>main.per-variant .variantsPanel .content-wrapper .content .dataset-responses section li span.variable{display:inline-block;padding-right:.5em}body#response>main.per-variant .variantsPanel .content-wrapper .content .dataset-responses section li span.number{display:inline-block}body#response>main.per-variant .variantsPanel .content-wrapper .content .dataset-responses section ul{padding:0;margin:0;list-style-type:none}body#response>main.per-variant .variantsPanel .content-wrapper .content .dataset-responses section span.number{color:#000;font-weight:700}body#response>main.per-variant .variantsPanel .content-wrapper .content .dataset-responses section.exists-Y h3{background-color:#36ae47}body#response>main.per-variant .variantsPanel .content-wrapper .content .dataset-responses section.exists-Y h3 span{font-weight:700}body#response>main.per-variant .variantsPanel .content-wrapper .content .dataset-responses section.exists-N h3{background-color:#f06543}body#response>main.per-variant .variantsPanel .content-wrapper .content .dataset-responses section.exists-N h3 span{font-weight:700}body#response>main.per-sample{margin:0 auto;padding:0}body#response>main.per-sample #samplesPanel{display:grid;grid-template-columns:2fr 4fr;grid-template-areas:"sampleCards variantResults";width:1040px;height:650px;margin-bottom:4em;position:relative}body#response>main.per-sample #samplesPanel #samplesWrapper{grid-area:"sampleCards";overflow:scroll;margin:2em 1em 1.25em 0;border-top:1px solid #e5e8ea;border-bottom:1px solid #e5e8ea}body#response>main.per-sample #samplesPanel #samplesWrapper:before{border:5px solid transparent;border-bottom-color:#e5e8ea;top:11px}body#response>main.per-sample #samplesPanel #samplesWrapper:after,body#response>main.per-sample #samplesPanel #samplesWrapper:before{content:"";width:0;height:0;display:block;position:absolute;z-index:100;left:165px;-webkit-transform:translateX(-50%);transform:translateX(-50%)}body#response>main.per-sample #samplesPanel #samplesWrapper:after{border:5px solid transparent;border-top-color:#e5e8ea;bottom:-40px}body#response>main.per-sample #samplesPanel #samplesWrapper .resultCard{margin:1em;padding:0;width:300px;border:1px solid #e5e8ea;border-radius:5px;color:#636363}body#response>main.per-sample #samplesPanel #samplesWrapper .resultCard:hover h3{background-color:#ccd0d3}body#response>main.per-sample #samplesPanel #samplesWrapper .resultCard.selected h3{background-color:#1d94ee}body#response>main.per-sample #samplesPanel #samplesWrapper .resultCard h3{font-size:14px;font-weight:700;margin:0;padding:.5em;text-align:center;color:#fff;background-color:#d6dade;border-radius:5px 5px 0 0}body#response>main.per-sample #samplesPanel #samplesWrapper .resultCard .cardBody{display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row nowrap;-webkit-box-align:stretch;align-items:stretch}body#response>main.per-sample #samplesPanel #samplesWrapper .resultCard .cardBody ul{padding:0;margin:0;list-style-type:none;width:50%}body#response>main.per-sample #samplesPanel #samplesWrapper .resultCard .cardBody ul li{padding:.1em .5em .5em;border-bottom:1px solid #eff3f6;font-size:12px}body#response>main.per-sample #samplesPanel #samplesWrapper .resultCard .cardBody ul li.listTitle{text-align:center;font-weight:700;padding:.5em 1em;color:#636363}body#response>main.per-sample #samplesPanel #samplesWrapper .resultCard .cardBody ul li span{display:block}body#response>main.per-sample #samplesPanel #samplesWrapper .resultCard .cardBody ul li span.var{text-align:left;font-size:10px}body#response>main.per-sample #samplesPanel #samplesWrapper .resultCard .cardBody ul li span.val{text-align:right;font-weight:700;color:grey;font-size:11px}body#response>main.per-sample #samplesPanel #samplesWrapper .resultCard .cardBody ul:first-child{border-right:1px solid #e5e8ea}body#response>main.per-sample #samplesPanel .resultVariants{grid-area:"variantResults";display:none}body#response>main.per-sample #samplesPanel .resultVariants.selected{display:block}body#response>main.per-sample #samplesPanel .resultVariants>p{font-size:15px;font-weight:700;margin:.5em .25em}body#response>main.per-sample #samplesPanel .resultVariants .per-variant{margin:0 auto;padding:0}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .noVariantsFound{display:grid;grid-auto-columns:1;grid-auto-rows:2;-webkit-box-pack:center;justify-content:center}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .noVariantsFound section{justify-self:center;width:150px}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .noVariantsFound p{display:inline-block;font-size:80%;color:grey;font-weight:lighter}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .noVariantsFound p span{font-weight:700}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel{display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row nowrap;-webkit-box-align:stretch;align-items:stretch;width:1040px;height:650px;margin:0 auto;padding:0;border:1px solid #eff3f6;border-radius:5px}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .sidebar-wrapper{background-color:#eff3f6;width:175px;height:100%;overflow:scroll}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .sidebar-wrapper .sidebar{display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-flow:column nowrap;-webkit-box-pack:stretch;justify-content:stretch}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .sidebar-wrapper .sidebar .variantButton{background-color:#d6dade;min-height:50px;max-height:100px;display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row nowrap;-webkit-box-pack:center;justify-content:center;color:#fff;overflow:scroll;cursor:pointer}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .sidebar-wrapper .sidebar .variantButton p{display:inline-block;padding:1em;margin:0;text-align:justify}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .sidebar-wrapper .sidebar .variantButton:hover{background-color:#ccd0d3}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .sidebar-wrapper .sidebar .variantButton.selected{background-color:#1d94ee}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .sidebar-wrapper .sidebar .variantButton:first-child{border-top-left-radius:5px}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper{background-color:#fff;width:990px;height:100%;overflow:scroll;position:relative}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content{display:none;padding:3.5em 1em 1em 3em;width:90%;grid-column:100%;grid-row:50px auto;grid-template-areas:"variant-header" "datasets";grid-gap:1em}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content.selected{display:grid}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .header{grid-area:variant-header;margin-left:1em;display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row nowrap}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .header p{display:inline-block;font-weight:700;margin:0 1em 0 0}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .header p small{font-weight:lighter;font-size:100%;padding-left:.25em}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .header div{margin:0;padding:0;text-decoration:none;display:-webkit-box;display:flex}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .header div .logo{margin:auto .5em;padding:0;position:relative;align-self:center}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .header div .logo img{width:16px;height:16px;border-radius:30%}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .header div .logo i{font-size:15px;color:#2196f3}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .header div .logo:after{content:"";width:0;height:0;display:none;position:absolute;z-index:101;border:8px solid transparent;border-bottom-color:#353c47;left:50%;top:12px;-webkit-transform:translateX(-50%);transform:translateX(-50%)}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .header div div.result{display:none;position:absolute;height:500px;width:80%;top:67px;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);z-index:101;margin:0 auto;align-self:start}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .header div div.result .transparent{height:10px;margin:0}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .header div div.result .content-handover{background-color:#353c47;height:100%;color:#fff;font-family:Courier New,Courier,monospace;font-weight:lighter;padding:1em;border-radius:5px;overflow:scroll}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .header div div.result .content-handover p{margin-left:1em;font-weight:bolder}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .header div div.result.small{width:80%}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .header div div.result.small .content-handover{height:auto;padding:1em;overflow:scroll;display:block}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .header div div.result.small .content-handover p{font-family:Open Sans,Helvetica Neue,Arial,sans-serif;font-size:90%}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .header div div.result.small .content-handover p span{font-weight:700}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .header div div.result.small .content-handover p a{text-decoration:none;color:#fff}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .header div:hover div.logo:after,body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .header div:hover div.result{display:block}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .header div.missing div img{opacity:.5;filter:alpha(opacity=50)}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .header div.missing div i{color:#b1cee5}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .header div.missing:hover div.logo:after,body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .header div.missing:hover div.result{display:none}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .dataset-responses{grid-area:datasets;display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row wrap;-webkit-box-align:start;align-items:flex-start;-webkit-box-pack:start;justify-content:start;overflow:scroll;padding-left:1em}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .dataset-responses section{min-width:150px;margin:1em;padding:0;border:1px solid #e5e8ea;border-radius:1ex;color:grey;overflow:hidden}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .dataset-responses section h3{font-size:14px;font-weight:400;margin:0;padding:.5em;text-align:center;color:#fff}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .dataset-responses section li{padding:.5em 1em;border-bottom:1px solid #e5e8ea;display:-webkit-box;display:flex;-webkit-box-pack:justify;justify-content:space-between;font-size:90%}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .dataset-responses section li:last-of-type{border-bottom:none}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .dataset-responses section li.handover{background-color:#eff3f6;color:#2196f3;position:relative}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .dataset-responses section li.handover .handover-note{overflow:scroll}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .dataset-responses section li.handover .handover-note a{display:inline-block;color:#2196f3;text-decoration:none}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .dataset-responses section li.handover .handover-note p{display:none;position:absolute;left:50%;top:2px;-webkit-transform:translate(-50%,-100%);transform:translate(-50%,-100%);margin:0 auto;padding:.5em 1em;width:100px;height:40px;color:#fff;background-color:#353c47;z-index:99;overflow:scroll;border-radius:5px;border:2px solid #353c47}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .dataset-responses section li.handover .handover-note:after{content:"";width:0;height:0;display:none;position:absolute;z-index:100;border:5px solid transparent;border-top-color:#353c47;left:50%;top:2px;-webkit-transform:translateX(-50%);transform:translateX(-50%)}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .dataset-responses section li.handover:hover .handover-note:after,body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .dataset-responses section li.handover:hover .handover-note p{display:block}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .dataset-responses section li span.variable{display:inline-block;padding-right:.5em}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .dataset-responses section li span.number{display:inline-block}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .dataset-responses section ul{padding:0;margin:0;list-style-type:none}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .dataset-responses section span.number{color:#000;font-weight:700}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .dataset-responses section.exists-Y h3{background-color:#36ae47}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .dataset-responses section.exists-Y h3 span{font-weight:700}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .dataset-responses section.exists-N h3{background-color:#f06543}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .dataset-responses section.exists-N h3 span{font-weight:700}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel,body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper{width:auto}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .sidebar-wrapper{flex-shrink:0;width:165px}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .sidebar-wrapper .content{width:auto}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper{width:100%}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content{padding:2.5em 1.5em 1em 2em}body#response>main.per-sample #samplesPanel .resultVariants .per-variant .variantsPanel .content-wrapper .content .header div div.result{top:55px}.handover-note:hover:after,.handover-note:hover p{display:block}@-webkit-keyframes fadeAway{0%{width:100%}to{width:0}}@keyframes fadeAway{0%{width:100%}to{width:0}}ul#messages{position:fixed;bottom:1em;right:1em;z-index:1000;width:300px;list-style-type:none;display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:reverse;flex-direction:column-reverse}ul#messages li{text-align:center;background:#fff;color:#000;border-radius:1ex;border:1px solid #000;margin:1ex 0;padding:1ex;position:relative;box-sizing:border-box}ul#messages li.hidden{display:none}ul#messages li:after{content:"-";text-indent:-30000px;position:absolute;bottom:1px;right:1px;height:2px;width:calc(100% - 2px);background:#000;border-radius:1ex;-webkit-animation-name:fadeAway;animation-name:fadeAway;-webkit-animation-timing-function:linear;animation-timing-function:linear;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-duration:5s;animation-duration:5s}ul#messages li:hover:after{-webkit-animation:none;animation:none}ul#messages li.message-info{background:#5cb85c;border-color:#5cb85c}ul#messages li.message-info:after{background:#449d44}ul#messages li.message-error{background:#d9534f;border-color:#d9534f}ul#messages li.message-error:after{background:#c9302c}ul#messages li.message-warning{background:#f0ad4e;border-color:#f0ad4e}ul#messages li.message-warning:after{background:#ec971f}
+/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3Njc3MvX2Jhc2Uuc2NzcyIsIi4uL3N0eWxlLmNzcyIsIi4uLy4uL3Njc3MvX3F1ZXJ5LnNjc3MiLCIuLi8uLi9zY3NzL19tYWluLnNjc3MiLCIuLi8uLi9zY3NzL192YXJpYWJsZXMuc2NzcyIsIi4uLy4uL3Njc3MvX2Nvb2tpZXMuc2NzcyIsIi4uLy4uL3Njc3MvX2Zvb3Rlci5zY3NzIiwiLi4vLi4vc2Nzcy9faGlzdG9yeS5zY3NzIiwiLi4vLi4vc2Nzcy9fbGV2ZWxzLnNjc3MiLCIuLi8uLi9zY3NzL19yZXN1bHQuc2NzcyIsIi4uLy4uL3Njc3MvX2RhdGFzZXRBbGxlbGVSZXNwb25zZXMuc2NzcyIsIi4uLy4uL3Njc3MvX3ZhcmlhbnRzUGFuZWwuc2NzcyIsIi4uLy4uL3Njc3MvX3NhbXBsZXMuc2NzcyIsIi4uLy4uL3Njc3MvX21lc3NhZ2Uuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxLQUNFLFdBQUEsQ0NDRCxBREVELEtBRUUsb0JBQUEsYUFBQSxBQUVBLDRCQUFBLDZCQUFBLHFCQUFBLENDT0QsQURLQyxZQUNJLGFBQUEsQUFFQSxhQUFBLEFBQ0Esc0NBQUEsQUFDQSx3QkFBQSxBQUNBLDREQUFBLEFBRUEscUJBQUEsQUFDQSxrQkFBQSxDQ0pMLEFETUssY0FDSSxlQUFBLEFBQ0EsaUJBQUEsQ0NKVCxBRE1TLGtCQUNJLGdCQUFBLEFBQ0EsZ0JBQUEsQUFDQSxhQUFBLENDSmIsQURRSyxlQUNFLGdCQUFBLEFBQ0EsY0FBQSxBQUNBLGVBQUEsQUFDQSxTQUFBLEFBQ0EsZ0JBQUEsQUFDQSxlQUFBLENDTlAsQURTTyxpQkFBSSxxQkFBQSxBQUNBLGFBQUEsQ0NOWCxBRFVLLGVBQ0UsbUJBQUEsQUFDQSxpQkFBQSxBQUNBLGNBQUEsQUFDQSxTQUFBLEFBQ0EsY0FBQSxBQUNBLG1CQUFBLENDUlAsQURXTyxpQkFDRSxxQkFBQSxBQUNBLGFBQUEsQ0NUVCxBRGNLLGdCQUNFLGNBQUEsQUFDQSxpQkFBQSxBQUNBLGlCQUFBLENDWlAsQURjTyx1Q0FDRSxpQkFBQSxBQUNBLHFCQUFBLEFBQ0EsV0FBQSxBQUNBLGFBQUEsQ0NaVCxBRGVPLGlDQUNFLGFBQUEsQ0NiVCxBRGVTLDBDQUNFLHlCQUFBLENDYlgsQURpQk8sK0JBQ0UseUJBQUEsQUFDQSxXQUFBLEFBQ0Esa0JBQUEsQUFDQSxrQkFBQSxBQUNBLHdCQUFBLENDZlQsQURxQlMsc0NBQ1ksa0JBQUEsQUFBb0IsT0FBQSxDQ2xCekMsQURxQlMsd0NBQ0UsV0FBQSxBQUNBLHlCQUFBLEFBQ0Esd0JBQUEsQ0NuQlgsQUR1Qk8sOEJBQ0UseUJBQUEsQUFDQSxXQUFBLEFBQ0EsZ0JBQUEsQUFDQSxrQkFBQSxBQUNBLG9CQUFBLEFBQ0EseUJBQUEsQUFDQSxrQ0FBQSx5QkFBQSxDQ3JCVCxBRHVCUyxxQ0FDRSxrQkFBQSxBQUFvQixPQUFBLENDcEIvQixBQ3hHRCxXQUdJLHlCQUFBLEFBQ0EsV0FBQSxBQUdBLHNCQUFBLEFBQ0EsV0FBQSxBQUNBLG9CQUFBLEFBQ0gsaUJBQUEsQUFDQSw2QkFBQSxBQUVHLGFBQUEsQ0RzR0gsQUNwR0EsOEJBRUMsYUFBQSxBQUNBLDhCQUFBLEFBRUEsbUNBQUEsQUFFQSx1RUFBQSxBQUdBLHNCQUFBLEFBQ0EsMEJBQUEsb0JBQUEsQUFFQSxnQkFBQSxBQUVBLGFBQUEsQUFDQSxhQUFBLENEeUdELEFDckdDLHVDQUNDLGtCQUFBLENEdUdGLEFDdEdDLDhDQUNDLGFBQUEsQ0R3R0YsQUN6RkMseURBQ0MsU0FBQSxBQUNBLG9CQUFBLGFBQUEsQUFDQSw4QkFBQSw2QkFBQSxxQkFBQSxBQUNBLHdCQUFBLHVCQUFBLEFBQ0EseUJBQUEsa0JBQUEsQ0QyRkYsQUN6RkUsaUVBQ0MsZUFBQSxDRDJGSCxBQzFGRyx1RUFBUSxnQkFBQSxDRDZGWCxBQ3hGQyw0Q0FDQyxpQkFBQSxBQUNBLG9CQUFBLGFBQUEsQUFDQSw4QkFBQSw2QkFBQSxxQkFBQSxBQUNBLHlCQUFBLDhCQUFBLEFBQ0EseUJBQUEsbUJBQUEsQUFDQSxjQUFBLEFBQ0EsWUFBQSxBQUNBLFlBQUEsQ0QwRkYsQUN4RkUsbURBQ0MsY0FBQSxBQUNBLFFBQUEsQ0QwRkgsQUN4RkUsb0RBQ0Msa0JBQUEsQUFDQSxjQUFBLEFBQ0EsWUFBQSxDRDBGSCxBQ3hGRywwREFDQyxZQUFBLEFBQ0Esc0JBQUEsQUFDQSxjQUFBLEFBQ0EscUJBQUEsQUFDQSxzQkFBQSxBQUNBLGFBQUEsQUFDQSxzQkFBQSxBQUNBLGtCQUFBLEFBQ0Esa0NBQUEseUJBQUEsQ0QwRkosQUN6RkkscUZBQWlCLFVBQUEsQ0Q0RnJCLEFDNUZJLDRFQUFpQixVQUFBLENENEZyQixBQzVGSSxnRkFBaUIsVUFBQSxDRDRGckIsQUM1RkksaUZBQWlCLFVBQUEsQ0Q0RnJCLEFDNUZJLHVFQUFpQixVQUFBLENENEZyQixBQzNGSSxnRUFBVSx5QkFBQSxBQUF5QywwQkFBQSxDRCtGdkQsQUM3RkcsMERBQ0MsY0FBQSxBQUNBLGtCQUFBLEFBQ0EsV0FBQSxBQUFhLE9BQUEsQUFDYixXQUFBLEFBQWEsa0JBQUEsQUFDYixjQUFBLEFBQ0EsVUFBQSxBQUNBLG1CQUFBLEFBQ0EsOENBQUEscUNBQUEsQ0RpR0osQUM3Rkcsa0ZBQWtDLFVBQUEsQUFBWSxpQkFBQSxDRGlHakQsQUM3RkUsbURBQ0MsV0FBQSxBQUNBLFlBQUEsQUFDQSxnQkFBQSxBQUNBLGVBQUEsQUFDQSxrQkFBQSxBQUNBLG9CQUFBLGFBQUEsQUFDQSw4QkFBQSw2QkFBQSxxQkFBQSxBQUNBLHFCQUFBLEFBRUEsV0FBQSxBQUNBLHlCQUFBLEFBQ0EsYUFBQSxBQUNBLFNBQUEsQUFDQSxrQkFBQSxBQUVBLHlCQUFBLHNCQUFBLHFCQUFBLGdCQUFBLENENkZILEFDdEZHLDBEQUNBLGtCQUFBLEFBQW9CLE9BQUEsQ0R5RnZCLEFDdEZHLHFEQUNDLGtCQUFBLEFBQ0EsU0FBQSxBQUNBLGdCQUFBLENEd0ZKLEFDdEZHLHFEQUNDLGlCQUFBLENEd0ZKLEFDbkZDLDhDQUNDLG1CQUFBLEFBQ0EsY0FBQSxBQUNBLGtCQUFBLEFBQ0EsVUFBQSxBQUNBLHNCQUFBLEFBQ0EsMEJBQUEsQUFDQSxrQkFBQSxBQUdBLGlCQUFBLGdCQUFBLEFBQ0EsZUFBQSxDRG1GRixBQ3RFRSwrREFDQyxvQkFBQSxhQUFBLEFBQ0EsOEJBQUEsNkJBQUEscUJBQUEsQUFDQSx5QkFBQSw4QkFBQSxBQUNBLFNBQUEsQUFDQSxpQkFBQSxBQUNBLFlBQUEsQUFDQSxnQ0FBQSxDRHdFSCxBQ3JFRyxpRUFDQyxxQkFBQSxBQUNBLGNBQUEsQUFDQSxTQUFBLEFBQ0EsU0FBQSxDRHVFSixBQ3JFSSxzRUFDQyxjQUFBLENEdUVMLEFDakVFLHNEQUNDLGNBQUEsQUFDQSxnQkFBQSxBQUNBLHNCQUFBLEFBQ0EscUJBQUEsQUFDQSxvQkFBQSxhQUFBLEFBQ0EsNEJBQUEsNkJBQUEsc0JBQUEsQUFDQSx1QkFBQSwwQkFBQSxDRG1FSCxBQ2pFRyw0REFDQyxjQUFBLEFBQ0EsNEJBQUEsT0FBQSxDRG1FSixBQ2xFSSxtRkFBMkIsV0FBQSxBQUFjLDZCQUFBLEFBQStCLDRCQUFBLE9BQUEsQ0R1RTVFLEFDbEVDLDZDQUNDLGtCQUFBLEFBQ0EsY0FBQSxBQUNBLGtCQUFBLEFBQ0EsVUFBQSxBQUNBLHNCQUFBLEFBQ0EsMEJBQUEsQUFDQSxrQkFBQSxBQUNBLGNBQUEsQUFFQSxpQkFBQSxnQkFBQSxBQUNBLGVBQUEsQ0RtRUYsQUMvREUsNkRBQ0Msb0JBQUEsYUFBQSxBQUNBLDhCQUFBLDZCQUFBLHFCQUFBLEFBQ0Esc0JBQUEscUJBQUEsQUFDQSxpQkFBQSxBQUNBLFlBQUEsQUFDQSxnQ0FBQSxDRGlFSCxBQy9ERywrREFDQyxjQUFBLEFBQ0EsU0FBQSxBQUNBLFNBQUEsQ0RpRUosQUM3REUsK0NBQUksZUFBQSxBQUNILGFBQUEsQ0RnRUgsQUMvREUsMERBQWUsb0JBQUEsQ0RrRWpCLEFDaEVFLHFEQUNDLHFCQUFBLEFBQ0EsY0FBQSxBQUNBLG9CQUFBLGFBQUEsQUFDQSwwQkFBQSxtQkFBQSxDRG1FSCxBQ2pFRywyREFDQyxtQkFBQSxZQUFBLEFBQ0EsaUJBQUEsQUFDQSxzQkFBQSxBQUNBLGFBQUEsQUFFQSxrQ0FBQSx5QkFBQSxDRGtFSixBQ2pFSSxzRkFBaUIsVUFBQSxDRG9FckIsQUNwRUksNkVBQWlCLFVBQUEsQ0RvRXJCLEFDcEVJLGlGQUFpQixVQUFBLENEb0VyQixBQ3BFSSxrRkFBaUIsVUFBQSxDRG9FckIsQUNwRUksd0VBQWlCLFVBQUEsQ0RvRXJCLEFDbkVJLGlFQUFVLDBCQUFBLENEc0VkLEFDbkVHLDBEQUNDLGlCQUFBLEFBQ0EsYUFBQSxBQUNBLHNCQUFBLEFBQ0EsZ0JBQUEsQ0RxRUosQUNuRUcsdURBQ0MsZ0JBQUEsQUFDQSxpQkFBQSxDRHFFSixBQy9EQyw0Q0FDQyxpQkFBQSxBQUVBLGFBQUEsQ0RnRUYsQUM3REUsOERBQ0Msb0JBQUEsYUFBQSxBQUNBLDhCQUFBLDZCQUFBLHFCQUFBLEFBQ0EsaUJBQUEsQUFDQSxxQkFBQSxBQUVBLGtCQUFBLEFBQ0EseUJBQUEsQUFDQSxXQUFBLEFBQ0Esd0JBQUEsdUJBQUEsQUFDQSxpQkFBQSxDRDhESCxBQzVERyxnRUFDQyxrQkFBQSxBQUNBLFFBQUEsQUFDQSxTQUFBLEFBQ0EsY0FBQSxDRDhESixBQzVERyxtRUFDQyx5QkFBQSxBQUNBLHFCQUFBLEFBQ0EsZ0JBQUEsQUFDQSxrQkFBQSxBQUNBLGNBQUEsQ0Q4REosQUMxREcsd0VBQ0MsZ0JBQUEsQUFDQSxrQkFBQSxDRDRESixBQzFERyw4RUFFQyxnQkFBQSxBQUNBLHlCQUFBLEFBQ0EscUJBQUEsQUFDQSxnQkFBQSxBQUVBLGtCQUFBLEFBQ0EsV0FBQSxBQUNBLGtCQUFBLEFBQ0EsZ0JBQUEsQUFDQSxpQkFBQSxDRDBESixBQ3hERyx3RUFDQyxrQkFBQSxBQUNBLGFBQUEsQ0QwREosQUN6REksMEVBQ0Msa0JBQUEsQ0QyREwsQUN6REksMkVBQ0MsYUFBQSxBQUNBLHFCQUFBLEFBQ0EsaUJBQUEsQ0QyREwsQUUvWUQsS0FFQyxtQkFBQSxPQUFBLEFBQ0EsYUFBQSxBQUNBLGFBQUEsQ0ZrWkEsQUVoWkcsZ0JBQ0YsZUFBQSxBQUNBLGtCQUFBLEFBQ0EsY0FBQSxBQUNBLGNBQUEsQUFFQSxrQkFBQSxBQUNBLG1CQUFBLEFBQ0Esd0JBQUEsQUFDQSxrQkFBQSxBQUdBLHNCQUFBLEFBQ0EsV0FBQSxBQUNBLFdBQUEsQ0Y2WkQsQUUzWkMsNkJBQXFCLHdCQ2FSLENIaVpkLEFFN1pDLGlDQUFxQix3QkNhSixDSG1abEIsQUUvWkMsaUNBQXFCLHdCQ2FKLENIcVpsQixBRWphQyxvQ0FBd0IscUJDYUosQ0h1WnJCLEFFbFpHLE9BQUksY0FBQSxDRnFaUCxBRWhaRyxXQUVGLGFBQUEsQ0ZrWkQsQUVoWkMsbUJBQ0Msb0JBQUEsYUFBQSxBQUNBLDhCQUFBLDZCQUFBLGNBQUEsQUFDQSx3QkFBQSx1QkFBQSxBQUNBLFlBQUEsQUFFQSwwQkFBQSxBQUVBLGNBQUEsQ0ZnWkYsQUU5WUUscUJBQ0MsVUFBQSxBQUVBLG1CQUFBLE9BQUEsQUFDQSxlQUFBLEFBQ0EsZ0JBQUEsQ0ZpWkgsQUUvWUUscUJBQ0MscUJBQUEsQUFDQSxTQUFBLEFBQ0EsVUFBQSxBQUNBLG9CQUFBLENGaVpILEFFaFpHLDRCQUFTLGNBQUEsQ0ZtWlosQUUvWUUsd0JBQ0MsbUJBQUEsQUFDQSxvQkFBQSxhQUFBLEFBQ0EsY0FBQSxBQUNBLGtCQUFBLEFBQ0EsWUFBQSxBQUNBLFdBQUEsQUFDQSxZQUFBLEFBQ0Esd0JBQUEsdUJBQUEsQUFDQSx5QkFBQSxtQkFBQSxBQUlBLHNCQUFBLEFBQXdCLFVBQUEsQ0ZnWjNCLEFFOVlHLHlDQUFxQix3QkMxRFYsQ0gyY2QsQUVoWkcsNkNBQXlCLHdCQ3pEVixDSDRjbEIsQUlsZkQsZ0JBQ0ksZUFBQSxBQUFnQixhQUFBLEFBQ2hCLFNBQUEsQUFDQSxRQUFBLEFBQVMsT0FBQSxBQUNULG9CQUFBLGFBQUEsQUFDQSw4QkFBQSw2QkFBQSxxQkFBQSxBQUNBLHlCQUFBLG1CQUFBLEFBQ0Esd0JBQUEsdUJBQUEsQUFFQSxXQUFBLEFBQWMsbUJBQUEsQUFFZCxjQUFBLEFBd0JBLFNBQUEsQ0orZEgsQUlyZkcsb0JBQ0gsWUFBQSxDSnVmQSxBSXJmQSx1QkFBSyxnQkFBQSxBQUFpQixTQUFBLEFBQVUsU0FBQSxDSjBmaEMsQUl6ZkEsc0JBQUksWUFBQSxDSjRmSixBSTNmQSxzQkFDSSxxQkFBQSxBQUNBLGFBQUEsQ0o2ZkosQUl6ZkcsdUJBQ0gsWUFBQSxBQUNBLGdCQUFBLEFBQ0Esa0JBQUEsQUFDQSxXQUFBLEFBQ0EsY0FBQSxBQUNBLHlCQUFBLEFBQ0EsWUFBQSxBQUNBLGNBQUEsQ0oyZkEsQUl2Zkcsd0JBQVksVUFBQSxBQUFXLDhCQUFBLHFCQUFBLENKMmYxQixBSXZmRCx1QkFBMkIsa0JBQUEsQ0oyZjFCLEFJMWZELCtCQUFtQyxnQkFBQSxBQUFrQiwrQkFBQSxzQkFBQSxDSitmcEQsQUt4aUJELE9BRUksZUFBQSxBQUNBLFlBQUEsQUFHQSx5QkFBQSxBQUNBLGNBQUEsQUFDQSxlQUFBLEFBQ0Esb0JBQUEsQUFFQSxvQkFBQSxZQUFBLENMd2lCSCxBS3RpQkcsZUFBVSxpQkFBQSxDTHlpQmIsQUt4aUJHLHNCQUFrQixZQUFBLEFBQWMscUJBQUEsQUFBc0IsWUFBQSxDTDZpQnpELEFLNWlCRyw2QkFBd0IsZ0JBQUEsQ0wraUIzQixBSzlpQkcsb0NBQWdDLFlBQUEsQ0xpakJuQyxBSy9pQkcsMEJBQWUsY0FBQSxDTGtqQmxCLEFLaGpCRyxTQUNJLHFCQUFBLEFBQ0EsVUFBQSxDTGtqQlAsQUtoakJPLFdBQUcsY0FBQSxBQUFnQixjQUFBLENMb2pCMUIsQUszaUJELGlCQUNtQixxQkFBQSxBQUNmLGVBQUEsQUFBZ0IsU0FBQSxBQUFVLFlBQUEsQUFBYSxXQUFBLEFBQVksVUFBQSxBQUVuRCxZQUFBLEFBR0EsYUFBQSxDTHFqQkgsQUs5aUJELGlDQWJJLGFBQUEsQUFFQSw4QkFBQSxBQUVBLGdCQUFBLEFBQ0EsWUFBQSxBQUVBLHNCQUFBLEFBRUEsaUJBQUEsQ0xpa0JILEFLN2pCRCxnQkFFSSxrQkFBQSxBQUFtQixRQUFBLEFBQVMsV0FBQSxBQUU1QixXQUFBLEFBR0EsWUFBQSxBQUlBLGlCQUFBLENMa2pCSCxBSzdpQkQsNEdBQTJELGFBQUEsQ0xxakIxRCxBTXBuQkQsa0JBQW9CLFlBQUEsQ053bkJuQixBTXRuQkQsTUFFSSxlQUFBLEFBQWdCLFFBQUEsQUFBUyxXQUFBLEFBQ3pCLFdBQUEsQUFDQSxZQUFBLEFBQ0Esc0JBQUEsQUFFQSxjQUFBLEFBQ0EsWUFBQSxBQUVBLDBCQUFBLEFBRUEsY0FBQSxBQUNBLDBCQUFBLEFBRUEsc0NBQUEsQUFLQSx5QkFBQSxBQUNBLGNBQUEsQUFpREEscUJBQUEsQ05xa0JILEFNbm5CRyxXQUFTLHFCQUFBLEFBQXNCLFlBQUEsQUFBYSxlQUFBLEFBQWlCLGVBQUEsQUFBZ0IsYUFBQSxDTjBuQmhGLEFNeG5CRyxTQUNGLGlCQUFBLEFBQ0EsZUFBQSxBQUNBLGNBQUEsQUFnQkEseURBQUEsaURBQUEsQUFDQSxpQ0FBQSx5QkFBQSxBQUtBLGFBQUEsQ04ybUJELEFNaG9CQyxjQUNDLGtCQUFBLEFBQ0EsaUJBQUEsQUFBbUIsZ0JBQUEsQUFDbkIsZUFBQSxBQUNBLHlCQUFBLEFBQ0EsV0FBQSxBQUNBLHlDQUFBLGlDQUFBLHlCQUFBLCtDQUFBLEFBQ0EsaUNBQUEseUJBQUEsQUFDQSxnQ0FBQSx3QkFBQSxBQUNBLG9CQUFBLENObW9CRixBTXBuQkcsdUJBRUYsNEJBQUEsb0JBQUEsQUFDQSxNQUFBLENOcW5CRCxBTW5uQkMsNkJBRUMsZUFBQSxDTnFuQkYsQU1wbkJFLG9FQUZBLHVCQUFBLGNBQUEsQ055bkJGLEFNOW1CRyxjQUNGLGNBQUEsQUFDQSxrQkFBQSxBQUNBLHlCQUFBLEFBQ0EsOEJBQUEsQUFDQSxvQkFBQSxBQUNBLHNCQUFBLEFBV0EsaUJBQUEsQ05zbUJELEFNL21CQyxpQkFBSyxXQUFBLEFBQWMsbUJBQUEsQ05tbkJwQixBTWxuQkMsb0JBQ0MscUNBQUEsQ05vbkJGLEFNbG5CRSw2QkFBVyxxQkFBQSxBQUFzQixXQUFBLEFBQWMsZ0JBQUEsQ051bkJqRCxBTWpuQkMscUJBQ0MsMEJBQUEsQUFDQSx5QkFBQSxBQUNBLGtCQUFBLEFBQW1CLFNBQUEsQUFBVSxVQUFBLEFBQVcsV0FBQSxBQUV4QyxrQkFBQSxBQUNBLGlCQUFBLEFBQ0EsY0FBQSxBQUNBLHNCQUFBLEFBQ0EsVUFBQSxDTnFuQkYsQU1qbkJDLHVDQUNNLG9CQUFBLENOb25CUCxBTWxuQkMsaUJBQ0MsaUJBQUEsQUFDQSwwQkFBQSxBQUNBLFNBQUEsQUFDQSxjQUFBLEFBQ0Esa0JBQUEsQUFDQSxrQkFBQSxBQUFtQixTQUFBLENOcW5CckIsQU1ubkJFLDRCQUFlLHdCQUFBLENOc25CakIsQU1ybkJFLDRCQUFlLHdCQUFBLENOd25CakIsQU10bkJFLHVCQUNDLGFBQUEsQUFDQSxrQkFBQSxBQUFtQixVQUFBLEFBQVcsTUFBQSxBQUFPLGtDQUFBLDBCQUFBLEFBQ3JDLFVBQUEsQUFDQSxjQUFBLENOMm5CSCxBTTFuQkcsNkJBQVUsd0JBQUEsQ042bkJiLEFNeG5CQyxpQkFDQyxxQkFBQSxBQUNBLG9CQUFBLEFBQ0EsY0FBQSxBQUNBLGNBQUEsQUFDQSxTQUFBLENOMG5CRixBTXhuQkUsb0JBQ0MscUJBQUEsQUFDQSxvQkFBQSxhQUFBLEFBQ0EseUJBQUEsOEJBQUEsQUFDQSxnQ0FBQSxBQUNBLGtCQUFBLENOMG5CSCxBTXZuQkcsc0NBQ0MsYUFBQSxDTnluQkosQU10bkJHLCtCQUNDLGtCQUFBLENOd25CSixBTzV3QkQsS0FHQyxjQUFBLEFBQ0EsaUJBQUEsQUFDQSxzQkFBQSxBQUVBLHNEQUFBLEFBQ0EsZUpSaUIsQUlTakIsY0FBQSxBQUNBLGVBQUEsQ1A2d0JBLEFPM3dCQSw2QkFWQSxZQUFBLENQd3hCQSxBTzF3QkMsOENBQ0Msa0JBQUEsQUFDQSxhQUFBLEFBQ0Esb0JBQUEsYUFBQSxBQUNBLHFCQUFBLHdCQUFBLENQNHdCRixBTzN3QkUscURBQVMsWUFBQSxDUDh3QlgsQU8xd0JDLDRCQUNDLG9CQUFBLGFBQUEsQUFDQSxlQUFBLEFBQ0EscUJBQUEsd0JBQUEsQ1A0d0JGLEFPM3dCRSxrQ0FBUSxZQUFBLENQOHdCVixBTzF3QkMsdUNBQ0MseUJBQUEsQUFDQSxXQUFBLEFBQ0EsWUFBQSxBQUNBLG9CQUFBLGFBQUEsQUFDQSx5QkFBQSw4QkFBQSxBQUNBLHlCQUFBLG1CQUFBLEFBQ0EsY0FBQSxDUDR3QkYsQU8xd0JFLDBDQUNDLGdCQUFBLEFBQ0EsY0FBQSxDUDR3QkgsQU8xd0JHLGdEQUNDLGVBQUEsQUFDQSxvQkFBQSxBQUNBLGdCQUFBLENQNHdCSixBT3h3QkUseURBQ0MsZUFBQSxBQUNBLG9CQUFBLEFBQ0EsZ0JBQUEsQ1Awd0JILEFPdHdCQyx5Q0FDQyxhQUFBLEFBQ0EsYUFBQSxDUHd3QkYsQU90d0JFLHNEQUNDLHFCQUFBLEFBQ0Esb0JBQUEsYUFBQSxBQUNBLDhCQUFBLDZCQUFBLG1CQUFBLEFBRUEsYUFBQSxBQUNBLFNBQUEsQ1B3d0JILEFPcndCRyw2REFDQyxXQUFBLEFBQ0EscUJBQUEsQUFDQSxhQUFBLENQd3dCSixBT253QkUscURBQ0MsU0FBQSxBQUNBLFNBQUEsQ1Bxd0JILEFPbndCRyx3REFDQywwQkFBQSxBQUE0QixnQkFBQSxBQUFpQixrQkFBQSxBQUU3QyxvQkFBQSxhQUFBLEFBQ0EsOEJBQUEsNkJBQUEscUJBQUEsQUFDQSx1QkFBQSwwQkFBQSxDUHN3QkosQU9wd0JJLG9FQUFpQixnQkFBQSxBQUFrQixjQUFBLENQd3dCdkMsQU90d0JJLDZEQUNDLGlCQUFBLEFBQ0EsZUFBQSxBQUNBLHFCQUFBLEFBQ0EsZ0JBQUEsQ1B3d0JMLEFPcHdCSSwyREFDQyxxQkFBQSxBQUNBLFNBQUEsQUFBVyxVQUFBLEFBRVgsb0JBQUEsYUFBQSxBQUNBLDhCQUFBLDZCQUFBLG1CQUFBLEFBRUEsdUJBQUEsMEJBQUEsQ1Bxd0JMLEFPbndCSyxrRUFDQyxvQkFBQSxBQUNBLHFCQUFBLEFBQ0EsYUFBQSxDUHN3Qk4sQU85dkJFLHNEQUNDLGdCQUFBLEFBQ0Esb0JBQUEsYUFBQSxBQUNBLDhCQUFBLDZCQUFBLG1CQUFBLEFBQ0Esd0JBQUEsc0JBQUEsQ1Bnd0JILEFPN3ZCRyx3REFDQyxxQkFBQSxBQUNBLGtCQUFBLEFBQ0EsWUFBQSxBQUNBLGdCQUFBLENQK3ZCSixBTzd2QkksK0RBQ0MsZUFBQSxDUCt2QkwsQU8xdkJFLGtEQUNDLFVBQUEsQ1A0dkJILEFPM3ZCRyxvREFDQyxVQUFBLEFBQ0EsYUFBQSxBQUNBLGdCQUFBLEFBQ0Esa0JBQUEsQUFDQSxzQkFBQSxBQUNBLHlCQUFBLEFBQ0EsV0FBQSxBQUNBLGtCQUFBLEFBQ0EsbUJBQUEsQ1A2dkJKLEFRcjVCRCxtQkFFSSxvQkFBQSxhQUFBLEFBQ0EsOEJBQUEsNkJBQUEsbUJBQUEsQUFDQSx3QkFBQSx1QkFBQSxBQUVBLHdCQUFBLHNCQUFBLENSczVCSCxBUzM1QkQsMkJBRUksZ0JBQUEsQUFDQSxXQUFBLEFBRUEsVUFBQSxBQUNBLHlCQUFBLEFBQ0Esa0JBQUEsQUFDQSxXQUFBLEFBRUEsZUFBQSxDVDQ1QkgsQVMxNUJHLDhCQUNJLGVBQUEsQUFDQSxnQkFBQSxBQUNBLFNBQUEsQUFDQSxhQUFBLEFBQ0Esa0JBQUEsQUFDQSxVQUFBLENUNDVCUCxBU3o1QkcsOEJBQ0ksaUJBQUEsQUFDQSxnQ0FBQSxBQUNBLG9CQUFBLGFBQUEsQUFDQSx5QkFBQSw4QkFBQSxBQUNBLGFBQUEsQ1QyNUJQLEFTejVCTywyQ0FDSSxrQkFBQSxDVDI1QlgsQVN6NUJPLHVDQUNJLHlCQUFBLEFBQ0EsY0FBQSxBQUNBLGlCQUFBLENUNDVCWCxBU3o1Qlcsc0RBRUksZUFBQSxDVDA1QmYsQVN2NUJlLHdEQUFJLHFCQUFBLEFBRUEsY0FBQSxBQUNBLG9CQUFBLENUeTVCbkIsQVNuNUJlLHdEQUNJLGFBQUEsQUFFQSxrQkFBQSxBQUNBLFNBQUEsQUFDQSxRQUFBLEFBQ0Esd0NBQUEsZ0NBQUEsQUFDQSxjQUFBLEFBQ0EsaUJBQUEsQUFDQSxZQUFBLEFBQ0EsWUFBQSxBQUNBLFdBQUEsQUFDQSx5QkFBQSxBQUNBLFdBQUEsQUFDQSxnQkFBQSxBQUNBLGtCQUFBLEFBQ0Esd0JBQUEsQ1RvNUJuQixBU2g1QmUsNERBQ0ksV0FBQSxBQUNBLFFBQUEsQUFDQSxTQUFBLEFBQ0EsYUFBQSxBQUVBLGtCQUFBLEFBQ0EsWUFBQSxBQUlBLDZCQUFBLHlCQUFBLEFBRUEsU0FBQSxBQUNBLFFBQUEsQUFDQSxtQ0FBQSwwQkFBQSxDVGc1Qm5CLEFTeDRCZSxnSUFBd0IsYUFBQSxDVDg0QnZDLEFTejRCTyw0Q0FDSSxxQkFBQSxBQUNBLGtCQUFBLENUMjRCWCxBU3g0Qk8sMENBQ0ksb0JBQUEsQ1QwNEJYLEFTdDRCRyw4QkFDSSxVQUFBLEFBQ0EsU0FBQSxBQUNBLG9CQUFBLENUdzRCUCxBU3I0QkcsdUNBQ0ksV0FBQSxBQUNBLGVBQUEsQ1R1NEJQLEFTbjRCTyx1Q0FBSSx3QkFBQSxDVHM0QlgsQVNyNEJXLDRDQUFPLGVBQUEsQ1R3NEJsQixBU3A0Qk8sdUNBQUssd0JBQUEsQ1R1NEJaLEFTdDRCVyw0Q0FBTyxlQUFBLENUeTRCbEIsQVEvL0JBLCtCQUNDLGNBQUEsQUFDQSxTQUFBLENSaWdDRCxBVTNnQ0QsZ0RBQ0ksYUFBQSxBQUNBLG9CQUFBLEFBQ0EsaUJBQUEsQUFFQSx3QkFBQSxzQkFBQSxDVjRnQ0gsQVUxZ0NHLHdEQUNJLG9CQUFBLEFBQ0EsV0FBQSxDVjRnQ1AsQVV6Z0NHLGtEQUNJLHFCQUFBLEFBQ0EsY0FBQSxBQUNBLFdBQUEsQUFDQSxtQkFBQSxDVjJnQ1AsQVUxZ0NPLHVEQUNJLGVBQUEsQ1Y0Z0NYLEFVdmdDRCw4Q0FDSSxvQkFBQSxhQUFBLEFBQ0EsOEJBQUEsNkJBQUEscUJBQUEsQUFDQSwwQkFBQSxvQkFBQSxBQUNBLGFBQUEsQUFDQSxhQUFBLEFBQ0EsY0FBQSxBQUNBLFVBQUEsQUFDQSx5QkFBQSxBQUNBLGlCQUFBLENWeWdDSCxBVXRnQ0csK0RBQ0kseUJBQUEsQUFDQSxZQUFBLEFBQ0EsWUFBQSxBQUNBLGVBQUEsQ1Z3Z0NQLEFVdGdDTyx3RUFDSSxvQkFBQSxhQUFBLEFBQ0EsNEJBQUEsNkJBQUEsd0JBQUEsQUFFQSx5QkFBQSx1QkFBQSxDVnVnQ1gsQVVyZ0NXLHVGQUNJLHlCQUFBLEFBQ0EsZ0JBQUEsQUFDQSxpQkFBQSxBQUNBLG9CQUFBLGFBQUEsQUFDQSw4QkFBQSw2QkFBQSxxQkFBQSxBQUVBLHdCQUFBLHVCQUFBLEFBQ0EsV0FBQSxBQUNBLGdCQUFBLEFBQ0EsY0FBQSxDVnNnQ2YsQVVwZ0NlLHlGQUNJLHFCQUFBLEFBQ0EsWUFBQSxBQUNBLFNBQUEsQUFDQSxrQkFBQSxDVnNnQ25CLEFVbGdDZSw2RkFDSSx3QkFBQSxDVm9nQ25CLEFVbGdDZSxnR0FDSSx3QkFBQSxDVm9nQ25CLEFVamdDZSxtR0FDSSwwQkFBQSxDVm1nQ25CLEFVNy9CRywrREFDSSxzQkFBQSxBQUNBLFlBQUEsQUFDQSxZQUFBLEFBQ0EsZ0JBQUEsQUFDQSxpQkFBQSxDVisvQlAsQVU1L0JPLHdFQUNJLGFBQUEsQUFNQSwwQkFBQSxBQUNBLFVBQUEsQUFFQSxpQkFBQSxBQUNBLG1CQUFBLEFBQ0EsZ0RBQUEsQUFFQSxZQUFBLENWdS9CWCxBVWxnQ1csaUZBQ0ksWUFBQSxDVm9nQ2YsQVV6L0JXLGdGQUNJLHlCQUFBLEFBQ0EsZ0JBQUEsQUFDQSxvQkFBQSxhQUFBLEFBQ0EsOEJBQUEsNkJBQUEsb0JBQUEsQ1YyL0JmLEFVei9CZSxrRkFDSSxxQkFBQSxBQUNBLGdCQUFBLEFBRUEsZ0JBQUEsQ1YyL0JuQixBVXovQm1CLHdGQUNJLG9CQUFBLEFBQ0EsZUFBQSxBQUNBLGtCQUFBLENWMi9CdkIsQVV2L0JlLG9GQUNJLFNBQUEsQUFDQSxVQUFBLEFBQ0EscUJBQUEsQUFDQSxvQkFBQSxZQUFBLENWeS9CbkIsQVV2L0JtQiwwRkFDSSxpQkFBQSxBQUNBLFVBQUEsQUFDQSxrQkFBQSxBQUNBLGlCQUFBLENWeS9CdkIsQVV2L0J1Qiw4RkFDQSxXQUFBLEFBQ0EsWUFBQSxBQUNBLGlCQUFBLENWeS9CdkIsQVV0L0J1Qiw0RkFDSSxlQUFBLEFBQ0EsYUFBQSxDVncvQjNCLEFVci9CdUIsZ0dBQ0ksV0FBQSxBQUNBLFFBQUEsQUFDQSxTQUFBLEFBQ0EsYUFBQSxBQUVBLGtCQUFBLEFBQ0EsWUFBQSxBQUlBLDZCQUFBLDRCQUFBLEFBRUEsU0FBQSxBQUNBLFNBQUEsQUFDQSxtQ0FBQSwwQkFBQSxDVnEvQjNCLEFVaC9CbUIsK0ZBQ0ksYUFBQSxBQUNBLGtCQUFBLEFBQ0EsYUFBQSxBQUNBLFVBQUEsQUFDQSxTQUFBLEFBQ0EsU0FBQSxBQUNBLG1DQUFBLDJCQUFBLEFBQ0EsWUFBQSxBQUNBLGNBQUEsQUFDQSxnQkFBQSxDVmsvQnZCLEFVaC9CdUIsNEdBQ0ksWUFBQSxBQUVBLFFBQUEsQ1ZpL0IzQixBVTkrQnVCLGlIQUNJLHlCQUFBLEFBQ0EsWUFBQSxBQUNBLFdBQUEsQUFDQSwwQ0FBQSxBQUNBLG9CQUFBLEFBQ0EsWUFBQSxBQUNBLGtCQUFBLEFBQ0EsZUFBQSxDVmcvQjNCLEFVOStCMkIsbUhBQ0ksZ0JBQUEsQUFDQSxrQkFBQSxDVmcvQi9CLEFVeitCdUIscUdBQ0ksU0FBQSxDVjIrQjNCLEFVditCMkIsdUhBQ0ksWUFBQSxBQUNBLFlBQUEsQUFDQSxnQkFBQSxBQUNBLGFBQUEsQ1Z5K0IvQixBVXYrQitCLHlIQUNJLHNEQUFBLEFBQ0EsYUFBQSxDVnkrQm5DLEFVeCtCbUMsOEhBQU8sZUFBQSxDVjIrQjFDLEFVMStCbUMsMkhBQUkscUJBQUEsQUFBdUIsVUFBQSxDVjgrQjlELEFVbitCdUIsOE1BQ0ksYUFBQSxDVncrQjNCLEFVbitCdUIsb0dBQ0ksV0FBQSxBQUNBLHdCQUFBLENWcStCM0IsQVVsK0J1QixrR0FDSSxhQUFBLENWbytCM0IsQVU1OUIyQiw4TkFDSSxZQUFBLENWaStCL0IsQVV6OUJXLDJGQUNJLG1CQUFBLEFBRUEsb0JBQUEsYUFBQSxBQUNBLDhCQUFBLDZCQUFBLG1CQUFBLEFBQ0Esd0JBQUEsdUJBQUEsQUFDQSx1QkFBQSxzQkFBQSxBQUNBLGdCQUFBLEFBQ0EsZ0JBQUEsQ1YwOUJmLEFTcnVDRCxtR0FFSSxnQkFBQSxBQUNBLFdBQUEsQUFFQSxVQUFBLEFBQ0EseUJBQUEsQUFDQSxrQkFBQSxBQUNBLFdBQUEsQUFFQSxlQUFBLENUc3VDSCxBU3B1Q0csc0dBQ0ksZUFBQSxBQUNBLGdCQUFBLEFBQ0EsU0FBQSxBQUNBLGFBQUEsQUFDQSxrQkFBQSxBQUNBLFVBQUEsQ1RzdUNQLEFTbnVDRyxzR0FDSSxpQkFBQSxBQUNBLGdDQUFBLEFBQ0Esb0JBQUEsYUFBQSxBQUNBLHlCQUFBLDhCQUFBLEFBQ0EsYUFBQSxDVHF1Q1AsQVNudUNPLG1IQUNJLGtCQUFBLENUcXVDWCxBU251Q08sK0dBQ0kseUJBQUEsQUFDQSxjQUFBLEFBQ0EsaUJBQUEsQ1RzdUNYLEFTbnVDVyw4SEFFSSxlQUFBLENUb3VDZixBU2p1Q2UsZ0lBQUkscUJBQUEsQUFFQSxjQUFBLEFBQ0Esb0JBQUEsQ1RtdUNuQixBUzd0Q2UsZ0lBQ0ksYUFBQSxBQUVBLGtCQUFBLEFBQ0EsU0FBQSxBQUNBLFFBQUEsQUFDQSx3Q0FBQSxnQ0FBQSxBQUNBLGNBQUEsQUFDQSxpQkFBQSxBQUNBLFlBQUEsQUFDQSxZQUFBLEFBQ0EsV0FBQSxBQUNBLHlCQUFBLEFBQ0EsV0FBQSxBQUNBLGdCQUFBLEFBQ0Esa0JBQUEsQUFDQSx3QkFBQSxDVDh0Q25CLEFTMXRDZSxvSUFDSSxXQUFBLEFBQ0EsUUFBQSxBQUNBLFNBQUEsQUFDQSxhQUFBLEFBRUEsa0JBQUEsQUFDQSxZQUFBLEFBSUEsNkJBQUEseUJBQUEsQUFFQSxTQUFBLEFBQ0EsUUFBQSxBQUNBLG1DQUFBLDBCQUFBLENUMHRDbkIsQVNsdENlLGdSQUF3QixhQUFBLENUd3RDdkMsQVNudENPLG9IQUNJLHFCQUFBLEFBQ0Esa0JBQUEsQ1RxdENYLEFTbHRDTyxrSEFDSSxvQkFBQSxDVG90Q1gsQVNodENHLHNHQUNJLFVBQUEsQUFDQSxTQUFBLEFBQ0Esb0JBQUEsQ1RrdENQLEFTL3NDRywrR0FDSSxXQUFBLEFBQ0EsZUFBQSxDVGl0Q1AsQVM3c0NPLCtHQUFJLHdCQUFBLENUZ3RDWCxBUy9zQ1csb0hBQU8sZUFBQSxDVGt0Q2xCLEFTOXNDTywrR0FBSyx3QkFBQSxDVGl0Q1osQVNodENXLG9IQUFPLGVBQUEsQ1RtdENsQixBUWwwQ0EsOEJBQ0MsY0FBQSxBQUNBLFNBQUEsQ1JvMENELEFXdDFDRCw0Q0FDSSxhQUFBLEFBQ0EsOEJBQUEsQUFDQSxpREFBQSxBQUVBLGFBQUEsQUFDQSxhQUFBLEFBQ0Esa0JBQUEsQUFDQSxpQkFBQSxDWHUxQ0gsQVdyMUNHLDREQUNJLHdCQUFBLEFBRUEsZ0JBQUEsQUFDQSx3QkFBQSxBQUVBLDZCQUFBLEFBQ0EsK0JBQUEsQ1hxMUNQLEFXajFDTyxtRUFRSSw2QkFBQSw0QkFBQSxBQUVBLFFBQUEsQ1hvMUNYLEFXLzBDTyxxSUFkSSxXQUFBLEFBQ0EsUUFBQSxBQUNBLFNBQUEsQUFDQSxjQUFBLEFBQ0Esa0JBQUEsQUFDQSxZQUFBLEFBR0EsV0FBQSxBQUlBLG1DQUFBLDBCQUFBLENYODFDWCxBVzUxQ08sa0VBUUksNkJBQUEseUJBQUEsQUFFQSxZQUFBLENYazFDWCxBVzUwQ08sd0VBQ0ksV0FBQSxBQUNBLFVBQUEsQUFDQSxZQUFBLEFBQ0EseUJBQUEsQUFDQSxrQkFBQSxBQUNBLGFBQUEsQ1g4MENYLEFXNTBDVyxpRkFDSSx3QkFBQSxDWDgwQ2YsQVczMENXLG9GQUNJLHdCQUFBLENYNjBDZixBV3owQ1csMkVBQ0ksZUFBQSxBQUNBLGdCQUFBLEFBQ0EsU0FBQSxBQUNBLGFBQUEsQUFDQSxrQkFBQSxBQUNBLFdBQUEsQUFDQSx5QkFBQSxBQUNBLHlCQUFBLENYMjBDZixBV3gwQ1csa0ZBQ0ksb0JBQUEsYUFBQSxBQUNBLDhCQUFBLDZCQUFBLHFCQUFBLEFBQ0EsMEJBQUEsbUJBQUEsQ1gwMENmLEFXeDBDZSxxRkFDSSxVQUFBLEFBQ0EsU0FBQSxBQUNBLHFCQUFBLEFBQ0EsU0FBQSxDWDAwQ25CLEFXeDBDbUIsd0ZBQ0ksdUJBQUEsQUFDQSxnQ0FBQSxBQUNBLGNBQUEsQ1gwMEN2QixBV3gwQ3VCLGtHQUNJLGtCQUFBLEFBQ0EsZ0JBQUEsQUFDQSxpQkFBQSxBQUNBLGFBQUEsQ1gwMEMzQixBV3YwQ3VCLDZGQUNJLGFBQUEsQ1h5MEMzQixBV3YwQzJCLGlHQUNJLGdCQUFBLEFBQ0EsY0FBQSxDWHkwQy9CLEFXdjBDMkIsaUdBQ0ksaUJBQUEsQUFDQSxnQkFBQSxBQUNBLFdBQUEsQUFDQSxjQUFBLENYeTBDL0IsQVduMENtQixpR0FDSSw4QkFBQSxDWHEwQ3ZCLEFXNXpDRyw0REFDSSwyQkFBQSxBQUNBLFlBQUEsQ1g4ekNQLEFXNXpDTyxxRUFDSSxhQUFBLENYOHpDWCxBVzV6Q08sOERBQ0ksZUFBQSxBQUNBLGdCQUFBLEFBQ0EsaUJBQUEsQ1g4ekNYLEFXM3pDTyx5RUFDSSxjQUFBLEFBQ0EsU0FBQSxDWDZ6Q1gsQVU3OENELDBGQUNJLGFBQUEsQUFDQSxvQkFBQSxBQUNBLGlCQUFBLEFBRUEsd0JBQUEsc0JBQUEsQ1Y4OENILEFVNThDRyxrR0FDSSxvQkFBQSxBQUNBLFdBQUEsQ1Y4OENQLEFVMzhDRyw0RkFDSSxxQkFBQSxBQUNBLGNBQUEsQUFDQSxXQUFBLEFBQ0EsbUJBQUEsQ1Y2OENQLEFVNThDTyxpR0FDSSxlQUFBLENWODhDWCxBVXo4Q0Qsd0ZBQ0ksb0JBQUEsYUFBQSxBQUNBLDhCQUFBLDZCQUFBLHFCQUFBLEFBQ0EsMEJBQUEsb0JBQUEsQUFDQSxhQUFBLEFBQ0EsYUFBQSxBQUNBLGNBQUEsQUFDQSxVQUFBLEFBQ0EseUJBQUEsQUFDQSxpQkFBQSxDVjI4Q0gsQVV4OENHLHlHQUNJLHlCQUFBLEFBQ0EsWUFBQSxBQUNBLFlBQUEsQUFDQSxlQUFBLENWMDhDUCxBVXg4Q08sa0hBQ0ksb0JBQUEsYUFBQSxBQUNBLDRCQUFBLDZCQUFBLHdCQUFBLEFBRUEseUJBQUEsdUJBQUEsQ1Z5OENYLEFVdjhDVyxpSUFDSSx5QkFBQSxBQUNBLGdCQUFBLEFBQ0EsaUJBQUEsQUFDQSxvQkFBQSxhQUFBLEFBQ0EsOEJBQUEsNkJBQUEscUJBQUEsQUFFQSx3QkFBQSx1QkFBQSxBQUNBLFdBQUEsQUFDQSxnQkFBQSxBQUNBLGNBQUEsQ1Z3OENmLEFVdDhDZSxtSUFDSSxxQkFBQSxBQUNBLFlBQUEsQUFDQSxTQUFBLEFBQ0Esa0JBQUEsQ1Z3OENuQixBVXA4Q2UsdUlBQ0ksd0JBQUEsQ1ZzOENuQixBVXA4Q2UsMElBQ0ksd0JBQUEsQ1ZzOENuQixBVW44Q2UsNklBQ0ksMEJBQUEsQ1ZxOENuQixBVS83Q0cseUdBQ0ksc0JBQUEsQUFDQSxZQUFBLEFBQ0EsWUFBQSxBQUNBLGdCQUFBLEFBQ0EsaUJBQUEsQ1ZpOENQLEFVOTdDTyxrSEFDSSxhQUFBLEFBTUEsMEJBQUEsQUFDQSxVQUFBLEFBRUEsaUJBQUEsQUFDQSxtQkFBQSxBQUNBLGdEQUFBLEFBRUEsWUFBQSxDVnk3Q1gsQVVwOENXLDJIQUNJLFlBQUEsQ1ZzOENmLEFVMzdDVywwSEFDSSx5QkFBQSxBQUNBLGdCQUFBLEFBQ0Esb0JBQUEsYUFBQSxBQUNBLDhCQUFBLDZCQUFBLG9CQUFBLENWNjdDZixBVTM3Q2UsNEhBQ0kscUJBQUEsQUFDQSxnQkFBQSxBQUVBLGdCQUFBLENWNjdDbkIsQVUzN0NtQixrSUFDSSxvQkFBQSxBQUNBLGVBQUEsQUFDQSxrQkFBQSxDVjY3Q3ZCLEFVejdDZSw4SEFDSSxTQUFBLEFBQ0EsVUFBQSxBQUNBLHFCQUFBLEFBQ0Esb0JBQUEsWUFBQSxDVjI3Q25CLEFVejdDbUIsb0lBQ0ksaUJBQUEsQUFDQSxVQUFBLEFBQ0Esa0JBQUEsQUFDQSxpQkFBQSxDVjI3Q3ZCLEFVejdDdUIsd0lBQ0EsV0FBQSxBQUNBLFlBQUEsQUFDQSxpQkFBQSxDVjI3Q3ZCLEFVeDdDdUIsc0lBQ0ksZUFBQSxBQUNBLGFBQUEsQ1YwN0MzQixBVXY3Q3VCLDBJQUNJLFdBQUEsQUFDQSxRQUFBLEFBQ0EsU0FBQSxBQUNBLGFBQUEsQUFFQSxrQkFBQSxBQUNBLFlBQUEsQUFJQSw2QkFBQSw0QkFBQSxBQUVBLFNBQUEsQUFDQSxTQUFBLEFBQ0EsbUNBQUEsMEJBQUEsQ1Z1N0MzQixBVWw3Q21CLHlJQUNJLGFBQUEsQUFDQSxrQkFBQSxBQUNBLGFBQUEsQUFDQSxVQUFBLEFBQ0EsU0FBQSxBQUNBLFNBQUEsQUFDQSxtQ0FBQSwyQkFBQSxBQUNBLFlBQUEsQUFDQSxjQUFBLEFBQ0EsZ0JBQUEsQ1ZvN0N2QixBVWw3Q3VCLHNKQUNJLFlBQUEsQUFFQSxRQUFBLENWbTdDM0IsQVVoN0N1QiwySkFDSSx5QkFBQSxBQUNBLFlBQUEsQUFDQSxXQUFBLEFBQ0EsMENBQUEsQUFDQSxvQkFBQSxBQUNBLFlBQUEsQUFDQSxrQkFBQSxBQUNBLGVBQUEsQ1ZrN0MzQixBVWg3QzJCLDZKQUNJLGdCQUFBLEFBQ0Esa0JBQUEsQ1ZrN0MvQixBVTM2Q3VCLCtJQUNJLFNBQUEsQ1Y2NkMzQixBVXo2QzJCLGlLQUNJLFlBQUEsQUFDQSxZQUFBLEFBQ0EsZ0JBQUEsQUFDQSxhQUFBLENWMjZDL0IsQVV6NkMrQixtS0FDSSxzREFBQSxBQUNBLGFBQUEsQ1YyNkNuQyxBVTE2Q21DLHdLQUFPLGVBQUEsQ1Y2NkMxQyxBVTU2Q21DLHFLQUFJLHFCQUFBLEFBQXVCLFVBQUEsQ1ZnN0M5RCxBVXI2Q3VCLGtTQUNJLGFBQUEsQ1YwNkMzQixBVXI2Q3VCLDhJQUNJLFdBQUEsQUFDQSx3QkFBQSxDVnU2QzNCLEFVcDZDdUIsNElBQ0ksYUFBQSxDVnM2QzNCLEFVOTVDMkIsa1RBQ0ksWUFBQSxDVm02Qy9CLEFVMzVDVyxxSUFDSSxtQkFBQSxBQUVBLG9CQUFBLGFBQUEsQUFDQSw4QkFBQSw2QkFBQSxtQkFBQSxBQUNBLHdCQUFBLHVCQUFBLEFBQ0EsdUJBQUEsc0JBQUEsQUFDQSxnQkFBQSxBQUNBLGdCQUFBLENWNDVDZixBU3ZxREQsNklBRUksZ0JBQUEsQUFDQSxXQUFBLEFBRUEsVUFBQSxBQUNBLHlCQUFBLEFBQ0Esa0JBQUEsQUFDQSxXQUFBLEFBRUEsZUFBQSxDVHdxREgsQVN0cURHLGdKQUNJLGVBQUEsQUFDQSxnQkFBQSxBQUNBLFNBQUEsQUFDQSxhQUFBLEFBQ0Esa0JBQUEsQUFDQSxVQUFBLENUd3FEUCxBU3JxREcsZ0pBQ0ksaUJBQUEsQUFDQSxnQ0FBQSxBQUNBLG9CQUFBLGFBQUEsQUFDQSx5QkFBQSw4QkFBQSxBQUNBLGFBQUEsQ1R1cURQLEFTcnFETyw2SkFDSSxrQkFBQSxDVHVxRFgsQVNycURPLHlKQUNJLHlCQUFBLEFBQ0EsY0FBQSxBQUNBLGlCQUFBLENUd3FEWCxBU3JxRFcsd0tBRUksZUFBQSxDVHNxRGYsQVNucURlLDBLQUFJLHFCQUFBLEFBRUEsY0FBQSxBQUNBLG9CQUFBLENUcXFEbkIsQVMvcERlLDBLQUNJLGFBQUEsQUFFQSxrQkFBQSxBQUNBLFNBQUEsQUFDQSxRQUFBLEFBQ0Esd0NBQUEsZ0NBQUEsQUFDQSxjQUFBLEFBQ0EsaUJBQUEsQUFDQSxZQUFBLEFBQ0EsWUFBQSxBQUNBLFdBQUEsQUFDQSx5QkFBQSxBQUNBLFdBQUEsQUFDQSxnQkFBQSxBQUNBLGtCQUFBLEFBQ0Esd0JBQUEsQ1RncURuQixBUzVwRGUsOEtBQ0ksV0FBQSxBQUNBLFFBQUEsQUFDQSxTQUFBLEFBQ0EsYUFBQSxBQUVBLGtCQUFBLEFBQ0EsWUFBQSxBQUlBLDZCQUFBLHlCQUFBLEFBRUEsU0FBQSxBQUNBLFFBQUEsQUFDQSxtQ0FBQSwwQkFBQSxDVDRwRG5CLEFTcHBEZSxvV0FBd0IsYUFBQSxDVDBwRHZDLEFTcnBETyw4SkFDSSxxQkFBQSxBQUNBLGtCQUFBLENUdXBEWCxBU3BwRE8sNEpBQ0ksb0JBQUEsQ1RzcERYLEFTbHBERyxnSkFDSSxVQUFBLEFBQ0EsU0FBQSxBQUNBLG9CQUFBLENUb3BEUCxBU2pwREcseUpBQ0ksV0FBQSxBQUNBLGVBQUEsQ1RtcERQLEFTL29ETyx5SkFBSSx3QkFBQSxDVGtwRFgsQVNqcERXLDhKQUFPLGVBQUEsQ1RvcERsQixBU2hwRE8seUpBQUssd0JBQUEsQ1RtcERaLEFTbHBEVyw4SkFBTyxlQUFBLENUcXBEbEIsQVc3bkRlLGlNQUNHLFVBQUEsQ1hrb0RsQixBV2hvRGUseUdBQ0ksY0FBQSxBQUNBLFdBQUEsQ1hrb0RuQixBV2pvRG1CLGtIQUNJLFVBQUEsQ1htb0R2QixBV2hvRGUseUdBQ0ksVUFBQSxDWGtvRG5CLEFXam9EbUIsa0hBQ0ksMkJBQUEsQ1htb0R2QixBV2xvRHVCLHlJQUNJLFFBQUEsQ1hvb0QzQixBUTN3REEsa0RBQVcsYUFBQSxDUmt4RFgsQVlsekRELDRCQUNJLEdBQVEsVUFBQSxDWnN6RFQsQVlyekRDLEdBQVEsT0FBQSxDWnd6RFQsQ0FDRixBWTN6REQsb0JBQ0ksR0FBUSxVQUFBLENac3pEVCxBWXJ6REMsR0FBUSxPQUFBLENad3pEVCxDQUNGLEFZdHpERCxZQUVJLGVBQUEsQUFBZ0IsV0FBQSxBQUFZLFVBQUEsQUFDNUIsYUFBQSxBQUNBLFlBQUEsQUFDQSxxQkFBQSxBQUVBLG9CQUFBLGFBQUEsQUFDQSw0QkFBQSw4QkFBQSw2QkFBQSxDWnd6REgsQVl0ekRHLGVBQ0gsa0JBQUEsQUFDQSxnQkFBQSxBQUFtQixXQUFBLEFBQ25CLGtCQUFBLEFBQ0Esc0JBQUEsQUFDQSxhQUFBLEFBQ0EsWUFBQSxBQUVBLGtCQUFBLEFBQ0EscUJBQUEsQ1p5ekRBLEFZdnpEQSxzQkFBVyxZQUFBLENaMHpEWCxBWXh6REEscUJBQ0ksWUFBQSxBQUFjLHFCQUFBLEFBQ2Qsa0JBQUEsQUFBb0IsV0FBQSxBQUFZLFVBQUEsQUFBVyxXQUFBLEFBQVksdUJBQUEsQUFFdkQsZ0JBQUEsQUFDQSxrQkFBQSxBQUVBLGdDQUFBLHdCQUFBLEFBQ0EseUNBQUEsaUNBQUEsQUFDQSxvQ0FBQSw0QkFBQSxBQUNBLDhCQUFBLHFCQUFBLENaNnpESixBWXp6REEsMkJBQWlCLHVCQUFBLGNBQUEsQ1o0ekRqQixBWTF6REEsNEJBQ0ksbUJBQUEsQUFBcUIsb0JBQUEsQ1o2ekR6QixBWTV6REksa0NBQVcsa0JBQUEsQ1orekRmLEFZN3pEQSw2QkFDSSxtQkFBQSxBQUFxQixvQkFBQSxDWmcwRHpCLEFZL3pESSxtQ0FBVyxrQkFBQSxDWmswRGYsQVloMERBLCtCQUNJLG1CQUFBLEFBQXFCLG9CQUFBLENabTBEekIsQVlsMERJLHFDQUFXLGtCQUFBLENacTBEZiIsImZpbGUiOiIuLi9zdHlsZS5jc3MiLCJzb3VyY2VzQ29udGVudCI6W251bGwsImh0bWwge1xuICBoZWlnaHQ6IDEwMCU7XG59XG5cbmJvZHkge1xuICBkaXNwbGF5OiBmbGV4O1xuICBtaW4taGVpZ2h0OiAxMDB2aDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZm9udC1mYW1pbHk6IFwiT3BlbiBTYW5zXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgY29sb3I6ICM2MzYzNjM7XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG4gIHdpZHRoOiAxMTQwcHg7XG4gIG1hcmdpbjogMCBhdXRvO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuYm9keSBoZWFkZXIge1xuICB3aWR0aDogMTA0MHB4O1xuICBtYXJnaW46IDAgYXV0bztcbiAgZGlzcGxheTogZ3JpZDtcbiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxNTBweCBhdXRvIGF1dG87XG4gIGdyaWQtdGVtcGxhdGUtcm93czogYXV0bztcbiAgZ3JpZC10ZW1wbGF0ZS1hcmVhczogXCJpY29uIHRpdGxlICAgIG5hdlwiIFwiaWNvbiBzdWJ0aXRsZSBuYXZcIjtcbiAgZ3JpZC1jb2x1bW4tZ2FwOiAxcmVtO1xuICBtYXJnaW4tdG9wOiAxcmVtO1xufVxuYm9keSBoZWFkZXIgPiBhIHtcbiAgZ3JpZC1hcmVhOiBpY29uO1xuICBqdXN0aWZ5LXNlbGY6IGxlZnQ7XG59XG5ib2R5IGhlYWRlciA+IGEgaW1nIHtcbiAgbWF4LXdpZHRoOiAxNjBweDtcbiAgbWF4LWhlaWdodDogNzBweDtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5ib2R5IGhlYWRlciA+IGgxIHtcbiAgZ3JpZC1hcmVhOiB0aXRsZTtcbiAgY29sb3I6ICMyRjM3NDk7XG4gIGFsaWduLXNlbGY6IGVuZDtcbiAgbWFyZ2luOiAwO1xuICBmb250LXNpemU6IDEuNWVtO1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cbmJvZHkgaGVhZGVyID4gaDEgYSB7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgY29sb3I6IGluaGVyaXQ7XG59XG5ib2R5IGhlYWRlciA+IGgyIHtcbiAgZ3JpZC1hcmVhOiBzdWJ0aXRsZTtcbiAgYWxpZ24tc2VsZjogc3RhcnQ7XG4gIGZvbnQtc2l6ZTogODAlO1xuICBtYXJnaW46IDA7XG4gIGNvbG9yOiAjOUNBN0I3O1xuICBmb250LXdlaWdodDogbGlnaHRlcjtcbn1cbmJvZHkgaGVhZGVyID4gaDIgYSB7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgY29sb3I6IGluaGVyaXQ7XG59XG5ib2R5IGhlYWRlciA+IG5hdiB7XG4gIGdyaWQtYXJlYTogbmF2O1xuICBqdXN0aWZ5LXNlbGY6IGVuZDtcbiAgYWxpZ24tc2VsZjogY2VudGVyO1xufVxuYm9keSBoZWFkZXIgPiBuYXYgYSwgYm9keSBoZWFkZXIgPiBuYXYgc3BhbiB7XG4gIG1hcmdpbi1yaWdodDogMWVtO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGNvbG9yOiBncmV5O1xuICBmb250LXNpemU6IDgwJTtcbn1cbmJvZHkgaGVhZGVyID4gbmF2IC5lbmRwb2ludC1idXR0b24ge1xuICBjb2xvcjogaW5oZXJpdDtcbn1cbmJvZHkgaGVhZGVyID4gbmF2IC5lbmRwb2ludC1idXR0b24uc2VsZWN0ZWQge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbmJvZHkgaGVhZGVyID4gbmF2IC5hY2Nlc3MtYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0U0RTdFQztcbiAgY29sb3I6IGdyZXk7XG4gIGJvcmRlci1yYWRpdXM6IDVweDtcbiAgcGFkZGluZzogMC4zZW0gMC41ZW07XG4gIGJvcmRlcjogMXB4IHNvbGlkICNENEQ3REY7XG59XG5ib2R5IGhlYWRlciA+IG5hdiAuYWNjZXNzLWJ1dHRvbjphY3RpdmUge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRvcDogMXB4O1xufVxuYm9keSBoZWFkZXIgPiBuYXYgLmFjY2Vzcy1idXR0b24uc2VsZWN0ZWQge1xuICBjb2xvcjogd2hpdGU7XG4gIGJhY2tncm91bmQtY29sb3I6ICM5OTlBOUI7XG4gIGJvcmRlcjogMXB4IHNvbGlkICM4NDg0ODQ7XG59XG5ib2R5IGhlYWRlciA+IG5hdiAubG9naW4tYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzQzNTA2MTtcbiAgY29sb3I6IHdoaXRlO1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgYm9yZGVyLXJhZGl1czogNXB4O1xuICBwYWRkaW5nOiAwLjNlbSAxLjI1ZW07XG4gIGJvcmRlcjogMXB4IHNvbGlkICMwMDFBM0I7XG4gIHRyYW5zaXRpb246IGJveC1zaGFkb3cgMC4ycztcbn1cbmJvZHkgaGVhZGVyID4gbmF2IC5sb2dpbi1idXR0b246YWN0aXZlIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0b3A6IDFweDtcbn1cblxuZm9ybSNxdWVyeSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNFRkYzRjY7XG4gIGNvbG9yOiAjMzMzO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZzogMWVtIDFlbSAyZW07XG4gIG1hcmdpbjogMWVtIDAgMmVtO1xuICBib3JkZXItdG9wOiAxcHggc29saWQgI0U1RThFQTtcbiAgZm9udC1zaXplOiA5MCU7XG59XG5mb3JtI3F1ZXJ5IGRpdi5mb3JtLWNvbnRhaW5lciB7XG4gIGRpc3BsYXk6IGdyaWQ7XG4gIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMmZyIDFmcjtcbiAgLyogZ3JpZC10ZW1wbGF0ZS1yb3dzOiBhdXRvIGF1dG8gYXV0byBhdXRvOyAqL1xuICBncmlkLXRlbXBsYXRlLXJvd3M6IGF1dG8gMjI1cHggYXV0bztcbiAgLyogZ3JpZC10ZW1wbGF0ZS1yb3dzOiBhdXRvOyAqL1xuICBncmlkLXRlbXBsYXRlLWFyZWFzOiBcInNlYXJjaCBzZWFyY2hcIiBcImRhdGFzZXRzIGZpbHRlcnNcIiBcImVycm9ycyBlcnJvcnNcIjtcbiAganVzdGlmeS1pdGVtczogc3RyZXRjaDtcbiAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XG4gIGdyaWQtZ2FwOiAwIDFyZW07XG4gIHdpZHRoOiAxMDQwcHg7XG4gIG1hcmdpbjogMCBhdXRvO1xuICAvKiAjaWRfZXh0ZW5kZWQgeyAqL1xuICAvKiBcdCY6YmVmb3JlIHsgY29udGVudDogXCJFeHRlbmRlZCBwYXJhbWV0ZXJzXCI7IGRpc3BsYXk6aW5saW5lLWJsb2NrOyB9ICovXG4gIC8qIFx0JiB+ICNzaW1wbGlmZWQtcXVlcnkgeyBkaXNwbGF5OmJsb2NrOyB9ICovXG4gIC8qIFx0JiB+ICNleHRlbmRlZC1xdWVyeSB7IGRpc3BsYXk6bm9uZTsgfSAqL1xuICAvKiBcdCY6Y2hlY2tlZDpiZWZvcmUgeyBjb250ZW50OiBcIlNpbXBsaWZpZWQgcGFyYW1ldGVyc1wiOyBkaXNwbGF5OmlubGluZS1ibG9jazsgfSAqL1xuICAvKiBcdCY6Y2hlY2tlZCB+ICNzaW1wbGlmaWVkLXF1ZXJ5IHsgZGlzcGxheTpub25lOyB9ICovXG4gIC8qIFx0JjpjaGVja2VkIH4gI2V4dGVuZGVkLXF1ZXJ5IHsgZGlzcGxheTpibG9jazsgfSAqL1xuICAvKiB9ICovXG59XG5mb3JtI3F1ZXJ5IGRpdi5mb3JtLWNvbnRhaW5lciBmaWVsZHNldCB7XG4gIGJvcmRlci1yYWRpdXM6IDAuNWVtO1xufVxuZm9ybSNxdWVyeSBkaXYuZm9ybS1jb250YWluZXIgZmllbGRzZXQgbGVnZW5kIHtcbiAgcGFkZGluZzogMCAxZXg7XG59XG5mb3JtI3F1ZXJ5IGRpdi5mb3JtLWNvbnRhaW5lciAjaW5jbHVkZS1kYXRhc2V0LXJlc3BvbnNlcyB7XG4gIGJvcmRlcjogMDtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1mbG93OiByb3cgbm93cmFwO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cbmZvcm0jcXVlcnkgZGl2LmZvcm0tY29udGFpbmVyICNpbmNsdWRlLWRhdGFzZXQtcmVzcG9uc2VzIHNlY3Rpb24ge1xuICBtYXJnaW4tbGVmdDogMWVtO1xufVxuZm9ybSNxdWVyeSBkaXYuZm9ybS1jb250YWluZXIgI2luY2x1ZGUtZGF0YXNldC1yZXNwb25zZXMgc2VjdGlvbiBsYWJlbCB7XG4gIG1hcmdpbi1yaWdodDogMWVtO1xufVxuZm9ybSNxdWVyeSBkaXYuZm9ybS1jb250YWluZXIgI3F1ZXJ5LXNlYXJjaCB7XG4gIGdyaWQtYXJlYTogc2VhcmNoO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWZsb3c6IHJvdyBub3dyYXA7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgcGFkZGluZzogMWVtIDA7XG4gIGJvcmRlcjogbm9uZTtcbiAgb3V0bGluZTogbm9uZTtcbn1cbmZvcm0jcXVlcnkgZGl2LmZvcm0tY29udGFpbmVyICNxdWVyeS1zZWFyY2ggc2VsZWN0IHtcbiAgcGFkZGluZzogMCAxZW07XG4gIG1hcmdpbjogMDtcbn1cbmZvcm0jcXVlcnkgZGl2LmZvcm0tY29udGFpbmVyICNxdWVyeS1zZWFyY2ggc2VjdGlvbiB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWluLXdpZHRoOiA1MCU7XG4gIG1hcmdpbjogMCAxZW07XG59XG5mb3JtI3F1ZXJ5IGRpdi5mb3JtLWNvbnRhaW5lciAjcXVlcnktc2VhcmNoIHNlY3Rpb24gaW5wdXQge1xuICB3aWR0aDogNzI1cHg7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwYWRkaW5nOiAwLjVyZW0gMS42cmVtO1xuICBib3JkZXI6IDFweCBzb2xpZCAjREREREREO1xuICBvdXRsaW5lOiBub25lO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB0cmFuc2l0aW9uOiBib3gtc2hhZG93IDIwMG1zO1xufVxuZm9ybSNxdWVyeSBkaXYuZm9ybS1jb250YWluZXIgI3F1ZXJ5LXNlYXJjaCBzZWN0aW9uIGlucHV0OjpwbGFjZWhvbGRlciB7XG4gIGNvbG9yOiAjMjIyO1xufVxuZm9ybSNxdWVyeSBkaXYuZm9ybS1jb250YWluZXIgI3F1ZXJ5LXNlYXJjaCBzZWN0aW9uIGlucHV0OmZvY3VzIHtcbiAgYm9yZGVyOiAxcHggc29saWQgIzUxY2JlZTtcbiAgYm94LXNoYWRvdzogMCAwIDVweCAjNTFjYmVlO1xufVxuZm9ybSNxdWVyeSBkaXYuZm9ybS1jb250YWluZXIgI3F1ZXJ5LXNlYXJjaCBzZWN0aW9uIGxhYmVsIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAtMS41ZW07XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtc2l6ZTogODAlO1xuICBvcGFjaXR5OiAxO1xuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICB0cmFuc2l0aW9uOiBvcGFjaXR5IDMwMG1zLCB2aXNpYmlsaXR5IDBtcztcbn1cbmZvcm0jcXVlcnkgZGl2LmZvcm0tY29udGFpbmVyICNxdWVyeS1zZWFyY2ggc2VjdGlvbiBpbnB1dDpwbGFjZWhvbGRlci1zaG93biArIGxhYmVsIHtcbiAgb3BhY2l0eTogMDtcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xufVxuZm9ybSNxdWVyeSBkaXYuZm9ybS1jb250YWluZXIgI3F1ZXJ5LXNlYXJjaCBidXR0b24ge1xuICBoZWlnaHQ6IDgwJTtcbiAgcGFkZGluZzogMWV4O1xuICBtYXJnaW4tbGVmdDogMWVtO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1mbG93OiByb3cgbm93cmFwO1xuICBhbGlnbi1jb250ZW50OiBjZW50ZXI7XG4gIGNvbG9yOiB3aGl0ZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzIxOTZmMztcbiAgb3V0bGluZTogbm9uZTtcbiAgYm9yZGVyOiAwO1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG4gIHVzZXItc2VsZWN0OiBub25lO1xufVxuZm9ybSNxdWVyeSBkaXYuZm9ybS1jb250YWluZXIgI3F1ZXJ5LXNlYXJjaCBidXR0b246YWN0aXZlIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0b3A6IDFweDtcbn1cbmZvcm0jcXVlcnkgZGl2LmZvcm0tY29udGFpbmVyICNxdWVyeS1zZWFyY2ggYnV0dG9uIHAge1xuICBhbGlnbi1zZWxmOiBjZW50ZXI7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZy1sZWZ0OiA1cHg7XG59XG5mb3JtI3F1ZXJ5IGRpdi5mb3JtLWNvbnRhaW5lciAjcXVlcnktc2VhcmNoIGJ1dHRvbiBpIHtcbiAgYWxpZ24tc2VsZjogY2VudGVyO1xufVxuZm9ybSNxdWVyeSBkaXYuZm9ybS1jb250YWluZXIgI3F1ZXJ5LWRhdGFzZXRzIHtcbiAgZ3JpZC1hcmVhOiBkYXRhc2V0cztcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgcGFkZGluZzogMDtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIGJvcmRlcjogMC4xcHggc29saWQgI0U4RUJFRjtcbiAgYm9yZGVyLXJhZGl1czogNXB4O1xuICBtaW4taGVpZ2h0OiA4cmVtO1xuICBtYXgtaGVpZ2h0OiAxMDAlO1xufVxuZm9ybSNxdWVyeSBkaXYuZm9ybS1jb250YWluZXIgI3F1ZXJ5LWRhdGFzZXRzICNkYXRhc2V0cy1oZWFkZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWZsb3c6IHJvdyBub3dyYXA7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwLjVlbSAxZW07XG4gIGhlaWdodDogMThweDtcbiAgYm9yZGVyLWJvdHRvbTogMC4xcHggc29saWQgI0U4RUJFRjtcbn1cbmZvcm0jcXVlcnkgZGl2LmZvcm0tY29udGFpbmVyICNxdWVyeS1kYXRhc2V0cyAjZGF0YXNldHMtaGVhZGVyIHAge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGZvbnQtc2l6ZTogOTAlO1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG59XG5mb3JtI3F1ZXJ5IGRpdi5mb3JtLWNvbnRhaW5lciAjcXVlcnktZGF0YXNldHMgI2RhdGFzZXRzLWhlYWRlciBwIHNwYW4ge1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5mb3JtI3F1ZXJ5IGRpdi5mb3JtLWNvbnRhaW5lciAjcXVlcnktZGF0YXNldHMgc2VjdGlvbiB7XG4gIG92ZXJmbG93OiBhdXRvO1xuICBtYXgtaGVpZ2h0OiAxMDAlO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBwYWRkaW5nOiAwLjVlbSAxZW0gMWVtO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG59XG5mb3JtI3F1ZXJ5IGRpdi5mb3JtLWNvbnRhaW5lciAjcXVlcnktZGF0YXNldHMgc2VjdGlvbiBsYWJlbCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBvcmRlcjogMTtcbn1cbmZvcm0jcXVlcnkgZGl2LmZvcm0tY29udGFpbmVyICNxdWVyeS1kYXRhc2V0cyBzZWN0aW9uIGxhYmVsLmRhdGFzZXQtbm90LWF1dGhvcml6ZWQge1xuICBvcGFjaXR5OiAwLjU7XG4gIHRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoO1xuICBvcmRlcjogMjtcbn1cbmZvcm0jcXVlcnkgZGl2LmZvcm0tY29udGFpbmVyICNxdWVyeS1maWx0ZXJzIHtcbiAgZ3JpZC1hcmVhOiBmaWx0ZXJzO1xuICBkaXNwbGF5OiBibG9jaztcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBwYWRkaW5nOiAwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgYm9yZGVyOiAwLjFweCBzb2xpZCAjRThFQkVGO1xuICBib3JkZXItcmFkaXVzOiA1cHg7XG4gIG92ZXJmbG93OiBhdXRvO1xuICBtaW4taGVpZ2h0OiA4cmVtO1xuICBtYXgtaGVpZ2h0OiAxMDAlO1xufVxuZm9ybSNxdWVyeSBkaXYuZm9ybS1jb250YWluZXIgI3F1ZXJ5LWZpbHRlcnMgI2ZpbHRlcnMtaGVhZGVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1mbG93OiByb3cgbm93cmFwO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGxlZnQ7XG4gIHBhZGRpbmc6IDAuNWVtIDFlbSAwLjVlbTtcbiAgaGVpZ2h0OiAxOHB4O1xuICBib3JkZXItYm90dG9tOiAwLjFweCBzb2xpZCAjRThFQkVGO1xufVxuZm9ybSNxdWVyeSBkaXYuZm9ybS1jb250YWluZXIgI3F1ZXJ5LWZpbHRlcnMgI2ZpbHRlcnMtaGVhZGVyIHAge1xuICBmb250LXNpemU6IDkwJTtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xufVxuZm9ybSNxdWVyeSBkaXYuZm9ybS1jb250YWluZXIgI3F1ZXJ5LWZpbHRlcnMgaSB7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgY29sb3I6ICMzNTQwNTI7XG59XG5mb3JtI3F1ZXJ5IGRpdi5mb3JtLWNvbnRhaW5lciAjcXVlcnktZmlsdGVycyBpLmZpbHRlci1hZGQge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59XG5mb3JtI3F1ZXJ5IGRpdi5mb3JtLWNvbnRhaW5lciAjcXVlcnktZmlsdGVycyBzZWN0aW9uIHtcbiAgcGFkZGluZzogMC41ZW0gMWVtIDFlbTtcbiAgbWFyZ2luOiAwLjVlbSAwO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbiAgLyogaW5wdXQgKyBpIHsgbWFyZ2luLWxlZnQ6MWV4OyB9ICovXG59XG5mb3JtI3F1ZXJ5IGRpdi5mb3JtLWNvbnRhaW5lciAjcXVlcnktZmlsdGVycyBzZWN0aW9uIGlucHV0IHtcbiAgZmxleC1ncm93OiAxO1xuICBwYWRkaW5nOiAwLjNlbSAxZW07XG4gIGJvcmRlcjogMXB4IHNvbGlkICNEREREREQ7XG4gIG91dGxpbmU6IG5vbmU7XG4gIHRyYW5zaXRpb246IGJveC1zaGFkb3cgMjAwbXM7XG59XG5mb3JtI3F1ZXJ5IGRpdi5mb3JtLWNvbnRhaW5lciAjcXVlcnktZmlsdGVycyBzZWN0aW9uIGlucHV0OjpwbGFjZWhvbGRlciB7XG4gIGNvbG9yOiAjMjIyO1xufVxuZm9ybSNxdWVyeSBkaXYuZm9ybS1jb250YWluZXIgI3F1ZXJ5LWZpbHRlcnMgc2VjdGlvbiBpbnB1dDpmb2N1cyB7XG4gIGJveC1zaGFkb3c6IDAgMCA1cHggIzUxY2JlZTtcbn1cbmZvcm0jcXVlcnkgZGl2LmZvcm0tY29udGFpbmVyICNxdWVyeS1maWx0ZXJzIHNlY3Rpb24gc3BhbiB7XG4gIHBhZGRpbmc6IDAuM2VtIDFlbTtcbiAgb3V0bGluZTogbm9uZTtcbiAgYm9yZGVyOiAxcHggc29saWQgI0RERERERDtcbiAgbGluZS1oZWlnaHQ6IDEuMTU7XG59XG5mb3JtI3F1ZXJ5IGRpdi5mb3JtLWNvbnRhaW5lciAjcXVlcnktZmlsdGVycyBzZWN0aW9uIGkge1xuICBtYXJnaW4tbGVmdDogMWV4O1xuICBhbGlnbi1zZWxmOiBjZW50ZXI7XG59XG5mb3JtI3F1ZXJ5IGRpdi5mb3JtLWNvbnRhaW5lciAjcXVlcnktZXJyb3JzIHtcbiAgZ3JpZC1hcmVhOiBlcnJvcnM7XG4gIG1hcmdpbjogMCBhdXRvO1xufVxuZm9ybSNxdWVyeSBkaXYuZm9ybS1jb250YWluZXIgI3F1ZXJ5LWVycm9ycyBkaXYuZXJyb3Itd3JhcHBlciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZmxvdzogcm93IG5vd3JhcDtcbiAgbWFyZ2luOiAyZW0gMCAxZW07XG4gIHBhZGRpbmc6IDEuMjVlbSAzLjVlbTtcbiAgYm9yZGVyLXJhZGl1czogNXB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjREI1MjRCO1xuICBjb2xvcjogd2hpdGU7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5mb3JtI3F1ZXJ5IGRpdi5mb3JtLWNvbnRhaW5lciAjcXVlcnktZXJyb3JzIGRpdi5lcnJvci13cmFwcGVyIGkge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogOHB4O1xuICBsZWZ0OiA5cHg7XG4gIGZvbnQtc2l6ZTogMjBweDtcbn1cbmZvcm0jcXVlcnkgZGl2LmZvcm0tY29udGFpbmVyICNxdWVyeS1lcnJvcnMgZGl2LmVycm9yLXdyYXBwZXIgY29kZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNFNzhEODg7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcGFkZGluZzogM3B4IDFleDtcbiAgYm9yZGVyLXJhZGl1czogNXB4O1xuICBtYXJnaW46IDAgMC4yNWVtO1xufVxuZm9ybSNxdWVyeSBkaXYuZm9ybS1jb250YWluZXIgI3F1ZXJ5LWVycm9ycyBkaXYuZXJyb3Itd3JhcHBlciBzcGFuLmJvbGQge1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgbWFyZ2luLXJpZ2h0OiAwLjI1ZW07XG59XG5mb3JtI3F1ZXJ5IGRpdi5mb3JtLWNvbnRhaW5lciAjcXVlcnktZXJyb3JzIGRpdi5lcnJvci13cmFwcGVyIHNwYW4ucXVlcnktZm9ybSB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTc4RDg4O1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBhZGRpbmc6IDNweCAxZXg7XG4gIGJvcmRlci1yYWRpdXM6IDVweDtcbiAgY29sb3I6IHdoaXRlO1xuICBtYXJnaW4tcmlnaHQ6IDAuNWVtO1xuICBtaW4td2lkdGg6IDcuNWVtO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5mb3JtI3F1ZXJ5IGRpdi5mb3JtLWNvbnRhaW5lciAjcXVlcnktZXJyb3JzIGRpdi5lcnJvci13cmFwcGVyIGRpdi5zbWFsbCB7XG4gIHBhZGRpbmctbGVmdDogMTBweDtcbiAgZm9udC1zaXplOiA4NSU7XG59XG5mb3JtI3F1ZXJ5IGRpdi5mb3JtLWNvbnRhaW5lciAjcXVlcnktZXJyb3JzIGRpdi5lcnJvci13cmFwcGVyIGRpdi5zbWFsbCBwIHtcbiAgbWFyZ2luLWJvdHRvbTogMC41ZW07XG59XG5mb3JtI3F1ZXJ5IGRpdi5mb3JtLWNvbnRhaW5lciAjcXVlcnktZXJyb3JzIGRpdi5lcnJvci13cmFwcGVyIGRpdi5zbWFsbCB1bCB7XG4gIG1hcmdpbi10b3A6IDA7XG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgdGV4dC1pbmRlbnQ6IC0xMHB4O1xufVxuXG5tYWluIHtcbiAgZmxleDogMTtcbiAgLyogcHVzaCBmb290ZXIgZG93biAqL1xuICB3aWR0aDogMTA0MHB4O1xuICBtYXJnaW46IDAgYXV0bztcbn1cbm1haW4gc3Bhbi5sYWJlbCB7XG4gIGRpc3BsYXk6IGlubGluZTtcbiAgcGFkZGluZzogMC4yZW0gMC42ZW07XG4gIGZvbnQtc2l6ZTogNzUlO1xuICBsaW5lLWhlaWdodDogMTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XG4gIGJvcmRlci1yYWRpdXM6IDVweDtcbiAgLyogRmFsbGJhY2sgKi9cbiAgYmFja2dyb3VuZC1jb2xvcjogZ3JleTtcbiAgY29sb3I6IHdoaXRlO1xuICBib3JkZXI6IG5vbmU7XG4gIC8qXG4gIFx0Ji5sYWJlbC1wdWJsaWMubGFiZWwtbm90X2F1dGhvcml6ZWQgeyBAaW5jbHVkZSBsZWZ0MnJpZ2h0R3JhZGllbnQoJGxhYmVsLXB1YmxpYywgJGxhYmVsLW5vdF9hdXRob3JpemVkKTsgfVxuICBcdCYubGFiZWwtcHVibGljLmxhYmVsLWF1dGhvcml6ZWQgeyBAaW5jbHVkZSBsZWZ0MnJpZ2h0R3JhZGllbnQoJGxhYmVsLXB1YmxpYywgJGxhYmVsLWF1dGhvcml6ZWQpOyB9XG5cbiAgXHQmLmxhYmVsLXJlZ2lzdGVyZWQubGFiZWwtbm90X2F1dGhvcml6ZWQgeyBAaW5jbHVkZSBsZWZ0MnJpZ2h0R3JhZGllbnQoJGxhYmVsLXJlZ2lzdGVyZWQsICRsYWJlbC1ub3RfYXV0aG9yaXplZCk7IH1cbiAgXHQmLmxhYmVsLXJlZ2lzdGVyZWQubGFiZWwtYXV0aG9yaXplZCB7IEBpbmNsdWRlIGxlZnQycmlnaHRHcmFkaWVudCgkbGFiZWwtcmVnaXN0ZXJlZCwgJGxhYmVsLWF1dGhvcml6ZWQpOyB9XG5cbiAgXHQmLmxhYmVsLWNvbnRyb2xsZWQubGFiZWwtbm90X2F1dGhvcml6ZWQgeyBAaW5jbHVkZSBsZWZ0MnJpZ2h0R3JhZGllbnQoJGxhYmVsLWNvbnRyb2xsZWQsICRsYWJlbC1ub3RfYXV0aG9yaXplZCk7IH1cbiAgXHQmLmxhYmVsLWNvbnRyb2xsZWQubGFiZWwtYXV0aG9yaXplZCB7IEBpbmNsdWRlIGxlZnQycmlnaHRHcmFkaWVudCgkbGFiZWwtY29udHJvbGxlZCAsICRsYWJlbC1hdXRob3JpemVkKTsgfVxuXG4gIFx0Ji5sYWJlbC1ub3Rfc3VwcG9ydGVkLmxhYmVsLW5vdF9hdXRob3JpemVkIHsgQGluY2x1ZGUgbGVmdDJyaWdodEdyYWRpZW50KCRsYWJlbC1ub3Rfc3VwcG9ydGVkLCAkbGFiZWwtbm90X2F1dGhvcml6ZWQpOyB9XG4gIFx0Ji5sYWJlbC1ub3Rfc3VwcG9ydGVkLmxhYmVsLWF1dGhvcml6ZWQgeyBAaW5jbHVkZSBsZWZ0MnJpZ2h0R3JhZGllbnQoJGxhYmVsLW5vdF9zdXBwb3J0ZWQsICRsYWJlbC1hdXRob3JpemVkKTsgfVxuICAqL1xufVxubWFpbiBzcGFuLmxhYmVsLmxhYmVsLXB1YmxpYyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM1Y2I4NWM7XG59XG5tYWluIHNwYW4ubGFiZWwubGFiZWwtcmVnaXN0ZXJlZCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmMGFkNGU7XG59XG5tYWluIHNwYW4ubGFiZWwubGFiZWwtY29udHJvbGxlZCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNkOTUzNGY7XG59XG5tYWluIHNwYW4ubGFiZWwubGFiZWwtbm90X3N1cHBvcnRlZCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNjY2M7XG59XG5tYWluIHAge1xuICBtYXJnaW46IDAgMCAxZW0gMDtcbn1cblxuI2luZm8gbWFpbiB7XG4gIHBhZGRpbmc6IDAgMWVtO1xufVxuI2luZm8gbWFpbiBzZWN0aW9uIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1mbG93OiByb3cgbm8td3JhcDtcbiAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gIHBhZGRpbmc6IDFlbTtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNjY2M7XG4gIG1heC13aWR0aDogMTAwJTtcbn1cbiNpbmZvIG1haW4gc2VjdGlvbiA+IHAge1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG4gIC8qIG92ZXJmbG93OiBoaWRkZW47IHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOyB3aGl0ZS1zcGFjZTogbm93cmFwOyAqL1xuICBmbGV4OiAxO1xuICBmb250LXNpemU6IDEycHg7XG4gIG1hcmdpbi10b3A6IDAuMTVlbTtcbn1cbiNpbmZvIG1haW4gc2VjdGlvbiA+IGEge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuI2luZm8gbWFpbiBzZWN0aW9uID4gYSAubGFiZWwge1xuICBmb250LXNpemU6IDEycHg7XG59XG4jaW5mbyBtYWluIHNlY3Rpb24gPiBzcGFuIHtcbiAgbWFyZ2luOiAwLjE1ZW0gMWVtIDA7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZvbnQtc2l6ZTogNzUlO1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG4gIGN1cnNvcjogaGVscDtcbiAgd2lkdGg6IDE4cHg7XG4gIGhlaWdodDogMThweDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIC8qIEZhbGxiYWNrICovXG4gIGJhY2tncm91bmQtY29sb3I6IGdyZXk7XG4gIGNvbG9yOiB3aGl0ZTtcbn1cbiNpbmZvIG1haW4gc2VjdGlvbiA+IHNwYW4ubGFiZWwtYXV0aG9yaXplZCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM1Y2I4NWM7XG59XG4jaW5mbyBtYWluIHNlY3Rpb24gPiBzcGFuLmxhYmVsLW5vdF9hdXRob3JpemVkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Q5NTM0Zjtcbn1cblxuI2JlYWNvbi1jb29raWVzIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB6LWluZGV4OiAxMDAwO1xuICBib3R0b206IDA7XG4gIHJpZ2h0OiAwO1xuICBsZWZ0OiAwO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWZsb3c6IHJvdyBub3dyYXA7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBjb2xvcjogd2hpdGU7XG4gIGJhY2tncm91bmQ6ICMyNDI4MmE7XG4gIHBhZGRpbmc6IDFlbSAwO1xuICBvcGFjaXR5OiAxO1xufVxuI2JlYWNvbi1jb29raWVzID4gZGl2IHtcbiAgd2lkdGg6IDEwMDBweDtcbn1cbiNiZWFjb24tY29va2llcyA+IGRpdiBoNiB7XG4gIGZvbnQtc2l6ZTogMS41ZW07XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbn1cbiNiZWFjb24tY29va2llcyA+IGRpdiBwIHtcbiAgbWFyZ2luOiAxZW0gMDtcbn1cbiNiZWFjb24tY29va2llcyA+IGRpdiBhIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBjb2xvcjogI2UwNTU0MDtcbn1cbiNiZWFjb24tY29va2llcyBidXR0b24ge1xuICB3aWR0aDogMTQwcHg7XG4gIG1hcmdpbi1sZWZ0OiAxZW07XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgaGVpZ2h0OiAyZW07XG4gIGNvbG9yOiBpbmhlcml0O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTA1NTQwO1xuICBib3JkZXI6IG5vbmU7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbiNiZWFjb24tY29va2llcy5oaWRlLW1lIHtcbiAgb3BhY2l0eTogMDtcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAxcztcbn1cblxuI2JlYWNvbi1jb29raWVzICsgZm9vdGVyIHtcbiAgbWFyZ2luLWJvdHRvbTogOXJlbTtcbn1cblxuI2JlYWNvbi1jb29raWVzLmhpZGUtbWUgKyBmb290ZXIge1xuICBtYXJnaW4tYm90dG9tOiAwO1xuICB0cmFuc2l0aW9uOiBtYXJnaW4gMS41cztcbn1cblxuZm9vdGVyIHtcbiAgbWFyZ2luLXRvcDogMmVtO1xuICBwYWRkaW5nOiAyZW07XG4gIGJhY2tncm91bmQtY29sb3I6ICNFRkYzRjY7XG4gIGNvbG9yOiAjMkYzNzQ5O1xuICBmb250LXNpemU6IDEycHg7XG4gIGZvbnQtd2VpZ2h0OiBsaWdodGVyO1xuICBkaXNwbGF5OiBmbGV4O1xuICAvKiBwdXNoIGl0IHJpZ2h0ICovXG59XG5mb290ZXIgc2VjdGlvbiB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbmZvb3RlciBzZWN0aW9uOjpiZWZvcmUge1xuICBjb250ZW50OiBcInxcIjtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXJnaW46IDAgMWVtO1xufVxuZm9vdGVyIHNlY3Rpb246Zmlyc3Qtb2YtdHlwZSB7XG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xufVxuZm9vdGVyIHNlY3Rpb246Zmlyc3Qtb2YtdHlwZTo6YmVmb3JlIHtcbiAgY29udGVudDogbm9uZTtcbn1cbmZvb3RlciBsYWJlbCwgZm9vdGVyIGlucHV0IHtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuZm9vdGVyIGEge1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGNvbG9yOiBncmV5O1xufVxuZm9vdGVyIGEgaSB7XG4gIGNvbG9yOiAjMkYzNzQ5O1xuICBmb250LXNpemU6IDEyMCU7XG59XG5cbiNiZWFjb24tcmVzcG9uc2Uge1xuICBkaXNwbGF5OiBub25lO1xuICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAxMHZoO1xuICBib3R0b206IDEwdmg7XG4gIHJpZ2h0OiAxMHZ3O1xuICBsZWZ0OiAxMHZ3O1xuICBib3gtc2hhZG93OiAwIDAgNTBweCAwcHggI2MzYzNjMztcbiAgei1pbmRleDogMTAwO1xuICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgcGFkZGluZzogMWVtO1xuICBvdmVyZmxvdzogYXV0bztcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYm9yZGVyLXJhZGl1czogNXB4O1xufVxuXG4jYmVhY29uLXJlcXVlc3Qge1xuICBkaXNwbGF5OiBub25lO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHJpZ2h0OiAwO1xuICBib3R0b206IDJlbTtcbiAgYm94LXNoYWRvdzogMCAwIDUwcHggMHB4ICNjM2MzYzM7XG4gIHdpZHRoOiA2MHZ3O1xuICBwYWRkaW5nOiAxZW07XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIHotaW5kZXg6IDEwMTtcbiAgYmFja2dyb3VuZDogd2hpdGU7XG4gIGJvcmRlci1yYWRpdXM6IDVweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG5pbnB1dCNiZWFjb24tcmVxdWVzdC10cmlnZ2VyOmNoZWNrZWQgfiAjYmVhY29uLXJlcXVlc3Qge1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuaW5wdXQjYmVhY29uLXJlc3BvbnNlLXRyaWdnZXI6Y2hlY2tlZCB+ICNiZWFjb24tcmVzcG9uc2Uge1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuI3Jlc3BvbnNlLWhpc3Rvcnkge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG5hc2lkZSB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAxMCU7XG4gIGJvdHRvbTogMTAlO1xuICBoZWlnaHQ6IDgwJTtcbiAgei1pbmRleDogMjAwO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBvdmVyZmxvdzogYXV0bztcbiAgd2lkdGg6IDMwMHB4O1xuICBsZWZ0OiBjYWxjKC0zMDBweCArIDEuNWVtKTtcbiAgcGFkZGluZzogMS41ZW07XG4gIGJvcmRlci1yYWRpdXM6IDAgMWVtIDFlbSAwO1xuICBib3gtc2hhZG93OiAwIDJweCA1cHggMCByZ2JhKDAsIDAsIDAsIDAuMik7XG4gIC8qIHRyYW5zaXRpb246IGxlZnQgMzAwbXM7ICovXG4gIC8qIG9ubHkgb24gaG92ZXIgKi9cbiAgYmFja2dyb3VuZC1jb2xvcjogI0VGRjNGNjtcbiAgY29sb3I6ICM2MzYzNjM7XG4gIC8qIGNsZWFyIGhpc3RvcnkgKi9cbiAgY291bnRlci1yZXNldDogaGlzdG9yeTtcbn1cbmFzaWRlID4gc3BhbiB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgZmxvYXQ6IHJpZ2h0O1xuICBmb250LXNpemU6IDAuN2VtO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIG1hcmdpbjogMC41ZW0gMDtcbn1cbmFzaWRlIGgxIHtcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gIG1hcmdpbjogMCAwIDFlbSAwO1xuICBjb2xvcjogIzJGMzc0OTtcbiAgLyogdHJhbnNpdGlvbjogdHJhbnNmb3JtIDMwMG1zLCAqL1xuICAvKiAgICAgICAgICAgICBmb250LXNpemUgMzAwbXM7ICovXG4gIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKSB0cmFuc2xhdGUoLTE3MHB4LCAtMzAwcHgpO1xuICB0cmFuc2Zvcm0tb3JpZ2luOiAwIC0xMDAlO1xuICAvKiB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTAwJSkgcm90YXRlKDkwZGVnKTsgKi9cbiAgLyogdHJhbnNmb3JtLW9yaWdpbjogMCAwOyAqL1xuICBmb250LXNpemU6IDFlbTtcbn1cbmFzaWRlIGgxIHNwYW4ge1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG4gIHBhZGRpbmc6IDAuNWV4IDFleDtcbiAgbWFyZ2luLWxlZnQ6IDFleDtcbiAgZm9udC1zaXplOiAwLjVlbTtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzIxOTZmMztcbiAgY29sb3I6IHdoaXRlO1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMzAwbXM7XG4gIHRyYW5zZm9ybTogcm90YXRlKC05MGRlZyk7XG4gIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlcjtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuYXNpZGUub3BlbiwgYXNpZGU6aG92ZXIge1xuICB0cmFuc2l0aW9uOiBsZWZ0IDMwMG1zO1xuICBsZWZ0OiAwO1xufVxuYXNpZGUub3BlbiBoMSwgYXNpZGU6aG92ZXIgaDEge1xuICB0cmFuc2Zvcm06IG5vbmU7XG4gIGZvbnQtc2l6ZTogMS41ZW07XG59XG5hc2lkZS5vcGVuIGgxIHNwYW4sIGFzaWRlOmhvdmVyIGgxIHNwYW4ge1xuICB0cmFuc2Zvcm06IG5vbmU7XG59XG5hc2lkZSBzZWN0aW9uIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1hcmdpbi1ib3R0b206IDFlbTtcbiAgYm9yZGVyOiAxcHggc29saWQgI0U1RThFQTtcbiAgYm9yZGVyLXJhZGl1czogMWVtIDFlbSAxZXggMWV4O1xuICBmb250LXdlaWdodDogbGlnaHRlcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbmFzaWRlIHNlY3Rpb24gaDIge1xuICBjb2xvcjogd2hpdGU7XG4gIGZvbnQtd2VpZ2h0OiBsaWdodGVyO1xufVxuYXNpZGUgc2VjdGlvbjpob3ZlciB7XG4gIGJveC1zaGFkb3c6IDAgMnB4IDVweCAwIHJnYmEoMCwgMCwgMCwgMC4xKTtcbn1cbmFzaWRlIHNlY3Rpb246aG92ZXIgaDIgaS5mYXMge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGNvbG9yOiB3aGl0ZTtcbiAgbWFyZ2luLXJpZ2h0OiA1cHg7XG59XG5hc2lkZSBzZWN0aW9uOjpiZWZvcmUge1xuICBjb3VudGVyLWluY3JlbWVudDogaGlzdG9yeTtcbiAgY29udGVudDogY291bnRlcihoaXN0b3J5KTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IC0xZXg7XG4gIGxlZnQ6IC0xZXg7XG4gIHotaW5kZXg6IDEwO1xuICBib3JkZXItcmFkaXVzOiA0MCU7XG4gIHBhZGRpbmc6IDAuNWV4IDFleDtcbiAgZm9udC1zaXplOiA3MCU7XG4gIGJhY2tncm91bmQtY29sb3I6IGdyZXk7XG4gIGNvbG9yOiB3aGl0ZTtcbn1cbmFzaWRlIHNlY3Rpb24gcC5sb25nLFxuYXNpZGUgc2VjdGlvbiBwcmUge1xuICB3b3JkLWJyZWFrOiBicmVhay1hbGw7XG59XG5hc2lkZSBzZWN0aW9uIGgyIHtcbiAgcGFkZGluZzogMC4zZW0gMWVtO1xuICBib3JkZXItcmFkaXVzOiAxZW0gMWVtIDAgMDtcbiAgbWFyZ2luOiAwO1xuICBmb250LXNpemU6IDFlbTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDU7XG59XG5hc2lkZSBzZWN0aW9uIGgyLnJlc3BvbnNlLVkge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzZBRTQ3O1xufVxuYXNpZGUgc2VjdGlvbiBoMi5yZXNwb25zZS1OIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0YwNjU0Mztcbn1cbmFzaWRlIHNlY3Rpb24gaDIgaS5mYXMge1xuICBkaXNwbGF5OiBub25lO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHJpZ2h0OiA1cHg7XG4gIHRvcDogMDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDUwJSk7XG4gIHdpZHRoOiAxZW07XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbmFzaWRlIHNlY3Rpb24gaDIgaS5mYXM6aG92ZXIge1xuICB0ZXh0LXNoYWRvdzogMHB4IDBweCA1cHggd2hpdGU7XG59XG5hc2lkZSBzZWN0aW9uIHVsIHtcbiAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xuICBmb250LXdlaWdodDogbGlnaHRlcjtcbiAgZm9udC1zaXplOiA5MCU7XG4gIG1hcmdpbjogMC41ZW0gMDtcbiAgcGFkZGluZzogMDtcbn1cbmFzaWRlIHNlY3Rpb24gdWwgbGkge1xuICB3b3JkLWJyZWFrOiBicmVhay1hbGw7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNFNUU4RUE7XG4gIHBhZGRpbmc6IDAuMmVtIDIuNWVtO1xufVxuYXNpZGUgc2VjdGlvbiB1bCBsaSBzcGFuOm50aC1jaGlsZCgyKSB7XG4gIGNvbG9yOiBkYXJrZ3JleTtcbn1cbmFzaWRlIHNlY3Rpb24gdWwgbGk6bnRoLWxhc3QtY2hpbGQoMSkge1xuICBib3JkZXItYm90dG9tOiBub25lO1xufVxuXG5ib2R5IHtcbiAgd2lkdGg6IDExNDBweDtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIG1pbi1oZWlnaHQ6IDEwMHZoO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBmb250LWZhbWlseTogXCJPcGVuIFNhbnNcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBjb2xvcjogIzYzNjM2MztcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cbmJvZHkgbWFpbiNhY2Nlc3MtbGV2ZWxzIHtcbiAgd2lkdGg6IDExNDBweDtcbn1cbmJvZHkgbWFpbiNhY2Nlc3MtbGV2ZWxzICNhY2Nlc3MtbGV2ZWxzLWxlZ2VuZCB7XG4gIG1hcmdpbi1yaWdodDogNTBweDtcbiAgcGFkZGluZzogMC41ZW07XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG59XG5ib2R5IG1haW4jYWNjZXNzLWxldmVscyAjYWNjZXNzLWxldmVscy1sZWdlbmQgLmxhYmVsIHtcbiAgbWFyZ2luOiAwIDFleDtcbn1cbmJvZHkgbWFpbiNhY2Nlc3MtbGV2ZWxzID4gbmF2IHtcbiAgZGlzcGxheTogZmxleDtcbiAgbWFyZ2luLXRvcDogMWVtO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xufVxuYm9keSBtYWluI2FjY2Vzcy1sZXZlbHMgPiBuYXYgaW5wdXQge1xuICBtYXJnaW46IDAgMWV4O1xufVxuYm9keSBtYWluI2FjY2Vzcy1sZXZlbHMgLnNlY3Rpb24tdGl0bGUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRUZGM0Y2O1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiA1MHB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIG1hcmdpbi10b3A6IDJlbTtcbn1cbmJvZHkgbWFpbiNhY2Nlc3MtbGV2ZWxzIC5zZWN0aW9uLXRpdGxlIGgxIHtcbiAgbWFyZ2luLWxlZnQ6IDFlbTtcbiAgZm9udC1zaXplOiAxOHB4O1xufVxuYm9keSBtYWluI2FjY2Vzcy1sZXZlbHMgLnNlY3Rpb24tdGl0bGUgaDEgc21hbGwge1xuICBmb250LXNpemU6IDE0cHg7XG4gIGZvbnQtd2VpZ2h0OiBsaWdodGVyO1xuICBtYXJnaW4tbGVmdDogMC41ZW07XG59XG5ib2R5IG1haW4jYWNjZXNzLWxldmVscyAuc2VjdGlvbi10aXRsZSBkaXYuaW5jbHVkZS1jaGVjayB7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgZm9udC13ZWlnaHQ6IGxpZ2h0ZXI7XG4gIG1hcmdpbi1yaWdodDogMWVtO1xufVxuYm9keSBtYWluI2FjY2Vzcy1sZXZlbHMgLnNlY3Rpb24tY29udGVudCB7XG4gIHdpZHRoOiAxMDQwcHg7XG4gIG1hcmdpbjogMCBhdXRvO1xufVxuYm9keSBtYWluI2FjY2Vzcy1sZXZlbHMgLnNlY3Rpb24tY29udGVudCB1bC5jb2xsYXBzZWQge1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZmxvdzogcm93IHdyYXA7XG4gIG1hcmdpbjogMmVtIDA7XG4gIHBhZGRpbmc6IDA7XG4gIC8qIGp1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuOyAqL1xufVxuYm9keSBtYWluI2FjY2Vzcy1sZXZlbHMgLnNlY3Rpb24tY29udGVudCB1bC5jb2xsYXBzZWQgLmxhYmVsIHtcbiAgbWFyZ2luOiAxZXg7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgZm9udC1zaXplOiAxZW07XG4gIC8qIGNvbG9yOmJsYWNrOyAqL1xufVxuYm9keSBtYWluI2FjY2Vzcy1sZXZlbHMgLnNlY3Rpb24tY29udGVudCB1bC5leHBhbmRlZCB7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbn1cbmJvZHkgbWFpbiNhY2Nlc3MtbGV2ZWxzIC5zZWN0aW9uLWNvbnRlbnQgdWwuZXhwYW5kZWQgPiBsaSB7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjY2NjO1xuICBwYWRkaW5nLXRvcDogMWVtO1xuICBtYXJnaW4tYm90dG9tOiAxZW07XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZmxvdzogcm93IG5vd3JhcDtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xufVxuYm9keSBtYWluI2FjY2Vzcy1sZXZlbHMgLnNlY3Rpb24tY29udGVudCB1bC5leHBhbmRlZCA+IGxpOm50aC1jaGlsZCgxKSB7XG4gIGJvcmRlci10b3A6IG5vbmU7XG4gIG1hcmdpbi10b3A6IDJlbTtcbn1cbmJvZHkgbWFpbiNhY2Nlc3MtbGV2ZWxzIC5zZWN0aW9uLWNvbnRlbnQgdWwuZXhwYW5kZWQgPiBsaSA+IHNwYW4ge1xuICBtYXJnaW4tcmlnaHQ6IDFlbTtcbiAgbWluLXdpZHRoOiAxNWVtO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHRleHQtYWxpZ246IHJpZ2h0O1xufVxuYm9keSBtYWluI2FjY2Vzcy1sZXZlbHMgLnNlY3Rpb24tY29udGVudCB1bC5leHBhbmRlZCA+IGxpIHVsIHtcbiAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZmxvdzogcm93IHdyYXA7XG4gIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbn1cbmJvZHkgbWFpbiNhY2Nlc3MtbGV2ZWxzIC5zZWN0aW9uLWNvbnRlbnQgdWwuZXhwYW5kZWQgPiBsaSB1bCAubGFiZWwge1xuICBtYXJnaW46IDAgMWV4IDAuNWV4IDA7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgZm9udC1zaXplOiAxZW07XG4gIC8qIGNvbG9yOmJsYWNrOyAqL1xufVxuYm9keSBtYWluI2FjY2Vzcy1sZXZlbHMgLnNlY3Rpb24tY29udGVudCBkaXYuZGF0YXNldHMge1xuICBtYXJnaW46IDJlbSBhdXRvO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWZsb3c6IHJvdyB3cmFwO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbn1cbmJvZHkgbWFpbiNhY2Nlc3MtbGV2ZWxzIC5zZWN0aW9uLWNvbnRlbnQgZGl2LmRhdGFzZXRzIHAge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgcGFkZGluZzogMWVtO1xuICBtYXJnaW46IDAgMCAwIDFlbTtcbn1cbmJvZHkgbWFpbiNhY2Nlc3MtbGV2ZWxzIC5zZWN0aW9uLWNvbnRlbnQgZGl2LmRhdGFzZXRzIHAgLmxhYmVsIHtcbiAgbWFyZ2luLWxlZnQ6IDFleDtcbn1cbmJvZHkgbWFpbiNhY2Nlc3MtbGV2ZWxzIC5zZWN0aW9uLWNvbnRlbnQgLm1lc3NhZ2Uge1xuICBtYXJnaW46IDFlbTtcbn1cbmJvZHkgbWFpbiNhY2Nlc3MtbGV2ZWxzIC5zZWN0aW9uLWNvbnRlbnQgLm1lc3NhZ2UgcCB7XG4gIHdpZHRoOiA3MCU7XG4gIHBhZGRpbmc6IDAuMmVtO1xuICBtYXJnaW46IDJlbSBhdXRvO1xuICBib3JkZXItcmFkaXVzOiA1cHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkIGdyZXk7XG4gIGJhY2tncm91bmQtY29sb3I6ICM2MzYzNjM7XG4gIGNvbG9yOiB3aGl0ZTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LXdlaWdodDogbGlnaHRlcjtcbn1cblxuYm9keSNyZXNwb25zZSA+IG1haW4ge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWZsb3c6IHJvdyB3cmFwO1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbiBzZWN0aW9uIHtcbiAgLyogZmxleC1iYXNpczozMCU7ICovXG4gIG1pbi13aWR0aDogMTUwcHg7XG4gIG1hcmdpbjogMWVtO1xuICAvKiBtYXJnaW46MWVtIDA7ICovXG4gIHBhZGRpbmc6IDA7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNFNUU4RUE7XG4gIGJvcmRlci1yYWRpdXM6IDFleDtcbiAgY29sb3I6IGdyZXk7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbiBzZWN0aW9uIGgzIHtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDAuNWVtO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGNvbG9yOiB3aGl0ZTtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluIHNlY3Rpb24gbGkge1xuICBwYWRkaW5nOiAwLjVlbSAxZW07XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjRTVFOEVBO1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIGZvbnQtc2l6ZTogOTAlO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4gc2VjdGlvbiBsaTpsYXN0LW9mLXR5cGUge1xuICBib3JkZXItYm90dG9tOiBub25lO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4gc2VjdGlvbiBsaS5oYW5kb3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlZmYzZjY7XG4gIGNvbG9yOiAjMjE5NmYzO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIC8qIGhhbmRvdmVyIGxpbmtzICovXG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbiBzZWN0aW9uIGxpLmhhbmRvdmVyIC5oYW5kb3Zlci1ub3RlIHtcbiAgb3ZlcmZsb3c6IHNjcm9sbDtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluIHNlY3Rpb24gbGkuaGFuZG92ZXIgLmhhbmRvdmVyLW5vdGUgYSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgY29sb3I6ICMyMTk2ZjM7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluIHNlY3Rpb24gbGkuaGFuZG92ZXIgLmhhbmRvdmVyLW5vdGUgcCB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogNTAlO1xuICB0b3A6IDJweDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTEwMCUpO1xuICBtYXJnaW46IDAgYXV0bztcbiAgcGFkZGluZzogMC41ZW0gMWVtO1xuICB3aWR0aDogMTAwcHg7XG4gIGhlaWdodDogNDBweDtcbiAgY29sb3I6IHdoaXRlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzUzQzQ3O1xuICB6LWluZGV4OiA5OTtcbiAgb3ZlcmZsb3c6IHNjcm9sbDtcbiAgYm9yZGVyLXJhZGl1czogNXB4O1xuICBib3JkZXI6IDJweCBzb2xpZCAjMzUzQzQ3O1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4gc2VjdGlvbiBsaS5oYW5kb3ZlciAuaGFuZG92ZXItbm90ZTo6YWZ0ZXIge1xuICBjb250ZW50OiBcIlwiO1xuICB3aWR0aDogMDtcbiAgaGVpZ2h0OiAwO1xuICBkaXNwbGF5OiBub25lO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6IDEwMDtcbiAgYm9yZGVyLWxlZnQ6IDVweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLXJpZ2h0OiA1cHggc29saWQgdHJhbnNwYXJlbnQ7XG4gIGJvcmRlci1ib3R0b206IDVweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLXRvcDogNXB4IHNvbGlkICMzNTNDNDc7XG4gIGxlZnQ6IDUwJTtcbiAgdG9wOiAycHg7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluIHNlY3Rpb24gbGkuaGFuZG92ZXI6aG92ZXIgLmhhbmRvdmVyLW5vdGUgcCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4gc2VjdGlvbiBsaS5oYW5kb3Zlcjpob3ZlciAuaGFuZG92ZXItbm90ZTo6YWZ0ZXIge1xuICBkaXNwbGF5OiBibG9jaztcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluIHNlY3Rpb24gbGkgc3Bhbi52YXJpYWJsZSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcGFkZGluZy1yaWdodDogMC41ZW07XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbiBzZWN0aW9uIGxpIHNwYW4ubnVtYmVyIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4gc2VjdGlvbiB1bCB7XG4gIHBhZGRpbmc6IDA7XG4gIG1hcmdpbjogMDtcbiAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4gc2VjdGlvbiBzcGFuLm51bWJlciB7XG4gIGNvbG9yOiBibGFjaztcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbiBzZWN0aW9uLmV4aXN0cy1ZIGgzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzM2QUU0Nztcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluIHNlY3Rpb24uZXhpc3RzLVkgaDMgc3BhbiB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4gc2VjdGlvbi5leGlzdHMtTiBoMyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNGMDY1NDM7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbiBzZWN0aW9uLmV4aXN0cy1OIGgzIHNwYW4ge1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci12YXJpYW50IHtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIHBhZGRpbmc6IDA7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItdmFyaWFudCAubm9WYXJpYW50c0ZvdW5kIHtcbiAgZGlzcGxheTogZ3JpZDtcbiAgZ3JpZC1hdXRvLWNvbHVtbnM6IDE7XG4gIGdyaWQtYXV0by1yb3dzOiAyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci12YXJpYW50IC5ub1ZhcmlhbnRzRm91bmQgc2VjdGlvbiB7XG4gIGp1c3RpZnktc2VsZjogY2VudGVyO1xuICB3aWR0aDogMTUwcHg7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItdmFyaWFudCAubm9WYXJpYW50c0ZvdW5kIHAge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGZvbnQtc2l6ZTogODAlO1xuICBjb2xvcjogZ3JleTtcbiAgZm9udC13ZWlnaHQ6IGxpZ2h0ZXI7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItdmFyaWFudCAubm9WYXJpYW50c0ZvdW5kIHAgc3BhbiB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXZhcmlhbnQgLnZhcmlhbnRzUGFuZWwge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWZsb3c6IHJvdyBub3dyYXA7XG4gIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xuICB3aWR0aDogMTA0MHB4O1xuICBoZWlnaHQ6IDY1MHB4O1xuICBtYXJnaW46IDAgYXV0bztcbiAgcGFkZGluZzogMDtcbiAgYm9yZGVyOiAxcHggc29saWQgI0VGRjNGNjtcbiAgYm9yZGVyLXJhZGl1czogNXB4O1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXZhcmlhbnQgLnZhcmlhbnRzUGFuZWwgLnNpZGViYXItd3JhcHBlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNFRkYzRjY7XG4gIHdpZHRoOiAxNzVweDtcbiAgaGVpZ2h0OiAxMDAlO1xuICBvdmVyZmxvdzogc2Nyb2xsO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXZhcmlhbnQgLnZhcmlhbnRzUGFuZWwgLnNpZGViYXItd3JhcHBlciAuc2lkZWJhciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZmxvdzogY29sdW1uIG5vd3JhcDtcbiAganVzdGlmeS1jb250ZW50OiBzdHJldGNoO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXZhcmlhbnQgLnZhcmlhbnRzUGFuZWwgLnNpZGViYXItd3JhcHBlciAuc2lkZWJhciAudmFyaWFudEJ1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNENkRBREU7XG4gIG1pbi1oZWlnaHQ6IDUwcHg7XG4gIG1heC1oZWlnaHQ6IDEwMHB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWZsb3c6IHJvdyBub3dyYXA7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBjb2xvcjogd2hpdGU7XG4gIG92ZXJmbG93OiBzY3JvbGw7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5zaWRlYmFyLXdyYXBwZXIgLnNpZGViYXIgLnZhcmlhbnRCdXR0b24gcCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcGFkZGluZzogMWVtO1xuICBtYXJnaW46IDA7XG4gIHRleHQtYWxpZ246IGp1c3RpZnk7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuc2lkZWJhci13cmFwcGVyIC5zaWRlYmFyIC52YXJpYW50QnV0dG9uOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0NDRDBEMztcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5zaWRlYmFyLXdyYXBwZXIgLnNpZGViYXIgLnZhcmlhbnRCdXR0b24uc2VsZWN0ZWQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMUQ5NEVFO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXZhcmlhbnQgLnZhcmlhbnRzUGFuZWwgLnNpZGViYXItd3JhcHBlciAuc2lkZWJhciAudmFyaWFudEJ1dHRvbjpudGgtY2hpbGQoMSkge1xuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiA1cHg7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIHdpZHRoOiA5OTBweDtcbiAgaGVpZ2h0OiAxMDAlO1xuICBvdmVyZmxvdzogc2Nyb2xsO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbiAgcGFkZGluZzogMy41ZW0gMWVtIDFlbSAzZW07XG4gIHdpZHRoOiA5MCU7XG4gIGdyaWQtY29sdW1uOiAxMDAlO1xuICBncmlkLXJvdzogNTBweCBhdXRvO1xuICBncmlkLXRlbXBsYXRlLWFyZWFzOiBcInZhcmlhbnQtaGVhZGVyXCIgXCJkYXRhc2V0c1wiO1xuICBncmlkLWdhcDogMWVtO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXZhcmlhbnQgLnZhcmlhbnRzUGFuZWwgLmNvbnRlbnQtd3JhcHBlciAuY29udGVudC5zZWxlY3RlZCB7XG4gIGRpc3BsYXk6IGdyaWQ7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5oZWFkZXIge1xuICBncmlkLWFyZWE6IHZhcmlhbnQtaGVhZGVyO1xuICBtYXJnaW4tbGVmdDogMWVtO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWZsb3c6IHJvdyBub3dyYXA7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5oZWFkZXIgcCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIG1hcmdpbjogMDtcbiAgbWFyZ2luLXJpZ2h0OiAxZW07XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5oZWFkZXIgcCBzbWFsbCB7XG4gIGZvbnQtd2VpZ2h0OiBsaWdodGVyO1xuICBmb250LXNpemU6IDEwMCU7XG4gIHBhZGRpbmctbGVmdDogMC4yNWVtO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXZhcmlhbnQgLnZhcmlhbnRzUGFuZWwgLmNvbnRlbnQtd3JhcHBlciAuY29udGVudCAuaGVhZGVyIGRpdiB7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBkaXNwbGF5OiBmbGV4O1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXZhcmlhbnQgLnZhcmlhbnRzUGFuZWwgLmNvbnRlbnQtd3JhcHBlciAuY29udGVudCAuaGVhZGVyIGRpdiAubG9nbyB7XG4gIG1hcmdpbjogYXV0byAwLjVlbTtcbiAgcGFkZGluZzogMDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBhbGlnbi1zZWxmOiBjZW50ZXI7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5oZWFkZXIgZGl2IC5sb2dvIGltZyB7XG4gIHdpZHRoOiAxNnB4O1xuICBoZWlnaHQ6IDE2cHg7XG4gIGJvcmRlci1yYWRpdXM6IDMwJTtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQgLmhlYWRlciBkaXYgLmxvZ28gaSB7XG4gIGZvbnQtc2l6ZTogMTVweDtcbiAgY29sb3I6ICMyMTk2ZjM7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5oZWFkZXIgZGl2IC5sb2dvOjphZnRlciB7XG4gIGNvbnRlbnQ6IFwiXCI7XG4gIHdpZHRoOiAwO1xuICBoZWlnaHQ6IDA7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogMTAxO1xuICBib3JkZXItbGVmdDogOHB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3JkZXItcmlnaHQ6IDhweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLWJvdHRvbTogOHB4IHNvbGlkICMzNTNDNDc7XG4gIGJvcmRlci10b3A6IDhweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgbGVmdDogNTAlO1xuICB0b3A6IDEycHg7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQgLmhlYWRlciBkaXYgZGl2LnJlc3VsdCB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgaGVpZ2h0OiA1MDBweDtcbiAgd2lkdGg6IDgwJTtcbiAgdG9wOiA2N3B4O1xuICBsZWZ0OiA1MCU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgei1pbmRleDogMTAxO1xuICBtYXJnaW46IDAgYXV0bztcbiAgYWxpZ24tc2VsZjogc3RhcnQ7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5oZWFkZXIgZGl2IGRpdi5yZXN1bHQgLnRyYW5zcGFyZW50IHtcbiAgaGVpZ2h0OiAxMHB4O1xuICBtYXJnaW46IDA7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5oZWFkZXIgZGl2IGRpdi5yZXN1bHQgLmNvbnRlbnQtaGFuZG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzUzQzQ3O1xuICBoZWlnaHQ6IDEwMCU7XG4gIGNvbG9yOiB3aGl0ZTtcbiAgZm9udC1mYW1pbHk6IFwiQ291cmllciBOZXdcIiwgQ291cmllciwgbW9ub3NwYWNlO1xuICBmb250LXdlaWdodDogbGlnaHRlcjtcbiAgcGFkZGluZzogMWVtO1xuICBib3JkZXItcmFkaXVzOiA1cHg7XG4gIG92ZXJmbG93OiBzY3JvbGw7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5oZWFkZXIgZGl2IGRpdi5yZXN1bHQgLmNvbnRlbnQtaGFuZG92ZXIgcCB7XG4gIG1hcmdpbi1sZWZ0OiAxZW07XG4gIGZvbnQtd2VpZ2h0OiBib2xkZXI7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5oZWFkZXIgZGl2IGRpdi5yZXN1bHQuc21hbGwge1xuICB3aWR0aDogODAlO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXZhcmlhbnQgLnZhcmlhbnRzUGFuZWwgLmNvbnRlbnQtd3JhcHBlciAuY29udGVudCAuaGVhZGVyIGRpdiBkaXYucmVzdWx0LnNtYWxsIC5jb250ZW50LWhhbmRvdmVyIHtcbiAgaGVpZ2h0OiBhdXRvO1xuICBwYWRkaW5nOiAxZW07XG4gIG92ZXJmbG93OiBzY3JvbGw7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXZhcmlhbnQgLnZhcmlhbnRzUGFuZWwgLmNvbnRlbnQtd3JhcHBlciAuY29udGVudCAuaGVhZGVyIGRpdiBkaXYucmVzdWx0LnNtYWxsIC5jb250ZW50LWhhbmRvdmVyIHAge1xuICBmb250LWZhbWlseTogXCJPcGVuIFNhbnNcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiA5MCU7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5oZWFkZXIgZGl2IGRpdi5yZXN1bHQuc21hbGwgLmNvbnRlbnQtaGFuZG92ZXIgcCBzcGFuIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5oZWFkZXIgZGl2IGRpdi5yZXN1bHQuc21hbGwgLmNvbnRlbnQtaGFuZG92ZXIgcCBhIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBjb2xvcjogd2hpdGU7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5oZWFkZXIgZGl2OmhvdmVyIGRpdi5yZXN1bHQge1xuICBkaXNwbGF5OiBibG9jaztcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQgLmhlYWRlciBkaXY6aG92ZXIgZGl2LmxvZ286OmFmdGVyIHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5oZWFkZXIgZGl2Lm1pc3NpbmcgZGl2IGltZyB7XG4gIG9wYWNpdHk6IDAuNTtcbiAgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTUwKTtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQgLmhlYWRlciBkaXYubWlzc2luZyBkaXYgaSB7XG4gIGNvbG9yOiAjQjFDRUU1O1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXZhcmlhbnQgLnZhcmlhbnRzUGFuZWwgLmNvbnRlbnQtd3JhcHBlciAuY29udGVudCAuaGVhZGVyIGRpdi5taXNzaW5nOmhvdmVyIGRpdi5yZXN1bHQge1xuICBkaXNwbGF5OiBub25lO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXZhcmlhbnQgLnZhcmlhbnRzUGFuZWwgLmNvbnRlbnQtd3JhcHBlciAuY29udGVudCAuaGVhZGVyIGRpdi5taXNzaW5nOmhvdmVyIGRpdi5sb2dvOjphZnRlciB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5kYXRhc2V0LXJlc3BvbnNlcyB7XG4gIGdyaWQtYXJlYTogZGF0YXNldHM7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZmxvdzogcm93IHdyYXA7XG4gIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHN0YXJ0O1xuICBvdmVyZmxvdzogc2Nyb2xsO1xuICBwYWRkaW5nLWxlZnQ6IDFlbTtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQgLmRhdGFzZXQtcmVzcG9uc2VzIHNlY3Rpb24ge1xuICAvKiBmbGV4LWJhc2lzOjMwJTsgKi9cbiAgbWluLXdpZHRoOiAxNTBweDtcbiAgbWFyZ2luOiAxZW07XG4gIC8qIG1hcmdpbjoxZW0gMDsgKi9cbiAgcGFkZGluZzogMDtcbiAgYm9yZGVyOiAxcHggc29saWQgI0U1RThFQTtcbiAgYm9yZGVyLXJhZGl1czogMWV4O1xuICBjb2xvcjogZ3JleTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQgLmRhdGFzZXQtcmVzcG9uc2VzIHNlY3Rpb24gaDMge1xuICBmb250LXNpemU6IDE0cHg7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMC41ZW07XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgY29sb3I6IHdoaXRlO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXZhcmlhbnQgLnZhcmlhbnRzUGFuZWwgLmNvbnRlbnQtd3JhcHBlciAuY29udGVudCAuZGF0YXNldC1yZXNwb25zZXMgc2VjdGlvbiBsaSB7XG4gIHBhZGRpbmc6IDAuNWVtIDFlbTtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNFNUU4RUE7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgZm9udC1zaXplOiA5MCU7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5kYXRhc2V0LXJlc3BvbnNlcyBzZWN0aW9uIGxpOmxhc3Qtb2YtdHlwZSB7XG4gIGJvcmRlci1ib3R0b206IG5vbmU7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5kYXRhc2V0LXJlc3BvbnNlcyBzZWN0aW9uIGxpLmhhbmRvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VmZjNmNjtcbiAgY29sb3I6ICMyMTk2ZjM7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgLyogaGFuZG92ZXIgbGlua3MgKi9cbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQgLmRhdGFzZXQtcmVzcG9uc2VzIHNlY3Rpb24gbGkuaGFuZG92ZXIgLmhhbmRvdmVyLW5vdGUge1xuICBvdmVyZmxvdzogc2Nyb2xsO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXZhcmlhbnQgLnZhcmlhbnRzUGFuZWwgLmNvbnRlbnQtd3JhcHBlciAuY29udGVudCAuZGF0YXNldC1yZXNwb25zZXMgc2VjdGlvbiBsaS5oYW5kb3ZlciAuaGFuZG92ZXItbm90ZSBhIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBjb2xvcjogIzIxOTZmMztcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXZhcmlhbnQgLnZhcmlhbnRzUGFuZWwgLmNvbnRlbnQtd3JhcHBlciAuY29udGVudCAuZGF0YXNldC1yZXNwb25zZXMgc2VjdGlvbiBsaS5oYW5kb3ZlciAuaGFuZG92ZXItbm90ZSBwIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiA1MCU7XG4gIHRvcDogMnB4O1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtMTAwJSk7XG4gIG1hcmdpbjogMCBhdXRvO1xuICBwYWRkaW5nOiAwLjVlbSAxZW07XG4gIHdpZHRoOiAxMDBweDtcbiAgaGVpZ2h0OiA0MHB4O1xuICBjb2xvcjogd2hpdGU7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzNTNDNDc7XG4gIHotaW5kZXg6IDk5O1xuICBvdmVyZmxvdzogc2Nyb2xsO1xuICBib3JkZXItcmFkaXVzOiA1cHg7XG4gIGJvcmRlcjogMnB4IHNvbGlkICMzNTNDNDc7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5kYXRhc2V0LXJlc3BvbnNlcyBzZWN0aW9uIGxpLmhhbmRvdmVyIC5oYW5kb3Zlci1ub3RlOjphZnRlciB7XG4gIGNvbnRlbnQ6IFwiXCI7XG4gIHdpZHRoOiAwO1xuICBoZWlnaHQ6IDA7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogMTAwO1xuICBib3JkZXItbGVmdDogNXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3JkZXItcmlnaHQ6IDVweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLWJvdHRvbTogNXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3JkZXItdG9wOiA1cHggc29saWQgIzM1M0M0NztcbiAgbGVmdDogNTAlO1xuICB0b3A6IDJweDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXZhcmlhbnQgLnZhcmlhbnRzUGFuZWwgLmNvbnRlbnQtd3JhcHBlciAuY29udGVudCAuZGF0YXNldC1yZXNwb25zZXMgc2VjdGlvbiBsaS5oYW5kb3Zlcjpob3ZlciAuaGFuZG92ZXItbm90ZSBwIHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5kYXRhc2V0LXJlc3BvbnNlcyBzZWN0aW9uIGxpLmhhbmRvdmVyOmhvdmVyIC5oYW5kb3Zlci1ub3RlOjphZnRlciB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXZhcmlhbnQgLnZhcmlhbnRzUGFuZWwgLmNvbnRlbnQtd3JhcHBlciAuY29udGVudCAuZGF0YXNldC1yZXNwb25zZXMgc2VjdGlvbiBsaSBzcGFuLnZhcmlhYmxlIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwYWRkaW5nLXJpZ2h0OiAwLjVlbTtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQgLmRhdGFzZXQtcmVzcG9uc2VzIHNlY3Rpb24gbGkgc3Bhbi5udW1iZXIge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5kYXRhc2V0LXJlc3BvbnNlcyBzZWN0aW9uIHVsIHtcbiAgcGFkZGluZzogMDtcbiAgbWFyZ2luOiAwO1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5kYXRhc2V0LXJlc3BvbnNlcyBzZWN0aW9uIHNwYW4ubnVtYmVyIHtcbiAgY29sb3I6IGJsYWNrO1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQgLmRhdGFzZXQtcmVzcG9uc2VzIHNlY3Rpb24uZXhpc3RzLVkgaDMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzZBRTQ3O1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXZhcmlhbnQgLnZhcmlhbnRzUGFuZWwgLmNvbnRlbnQtd3JhcHBlciAuY29udGVudCAuZGF0YXNldC1yZXNwb25zZXMgc2VjdGlvbi5leGlzdHMtWSBoMyBzcGFuIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5kYXRhc2V0LXJlc3BvbnNlcyBzZWN0aW9uLmV4aXN0cy1OIGgzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0YwNjU0Mztcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQgLmRhdGFzZXQtcmVzcG9uc2VzIHNlY3Rpb24uZXhpc3RzLU4gaDMgc3BhbiB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXNhbXBsZSB7XG4gIG1hcmdpbjogMCBhdXRvO1xuICBwYWRkaW5nOiAwO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXNhbXBsZSAjc2FtcGxlc1BhbmVsIHtcbiAgZGlzcGxheTogZ3JpZDtcbiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAyZnIgNGZyO1xuICBncmlkLXRlbXBsYXRlLWFyZWFzOiBcInNhbXBsZUNhcmRzIHZhcmlhbnRSZXN1bHRzXCI7XG4gIHdpZHRoOiAxMDQwcHg7XG4gIGhlaWdodDogNjUwcHg7XG4gIG1hcmdpbi1ib3R0b206IDRlbTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXNhbXBsZSAjc2FtcGxlc1BhbmVsICNzYW1wbGVzV3JhcHBlciB7XG4gIGdyaWQtYXJlYTogXCJzYW1wbGVDYXJkc1wiO1xuICBvdmVyZmxvdzogc2Nyb2xsO1xuICBtYXJnaW46IDJlbSAxZW0gMS4yNWVtIDA7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjRTVFOEVBO1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI0U1RThFQTtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAjc2FtcGxlc1dyYXBwZXI6OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXCI7XG4gIHdpZHRoOiAwO1xuICBoZWlnaHQ6IDA7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6IDEwMDtcbiAgYm9yZGVyOiA1cHggc29saWQgdHJhbnNwYXJlbnQ7XG4gIGJvcmRlci1ib3R0b20tY29sb3I6IDVweCBzb2xpZCAjRTVFOEVBO1xuICBsZWZ0OiAxNjVweDtcbiAgdG9wOiAxMXB4O1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItc2FtcGxlICNzYW1wbGVzUGFuZWwgI3NhbXBsZXNXcmFwcGVyOjphZnRlciB7XG4gIGNvbnRlbnQ6IFwiXCI7XG4gIHdpZHRoOiAwO1xuICBoZWlnaHQ6IDA7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6IDEwMDtcbiAgYm9yZGVyOiA1cHggc29saWQgdHJhbnNwYXJlbnQ7XG4gIGJvcmRlci10b3AtY29sb3I6IDVweCBzb2xpZCAjRTVFOEVBO1xuICBsZWZ0OiAxNjVweDtcbiAgYm90dG9tOiAtNDBweDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXNhbXBsZSAjc2FtcGxlc1BhbmVsICNzYW1wbGVzV3JhcHBlciAucmVzdWx0Q2FyZCB7XG4gIG1hcmdpbjogMWVtO1xuICBwYWRkaW5nOiAwO1xuICB3aWR0aDogMzAwcHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNFNUU4RUE7XG4gIGJvcmRlci1yYWRpdXM6IDVweDtcbiAgY29sb3I6ICM2MzYzNjM7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItc2FtcGxlICNzYW1wbGVzUGFuZWwgI3NhbXBsZXNXcmFwcGVyIC5yZXN1bHRDYXJkOmhvdmVyIGgzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0NDRDBEMztcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAjc2FtcGxlc1dyYXBwZXIgLnJlc3VsdENhcmQuc2VsZWN0ZWQgaDMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMUQ5NEVFO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXNhbXBsZSAjc2FtcGxlc1BhbmVsICNzYW1wbGVzV3JhcHBlciAucmVzdWx0Q2FyZCBoMyB7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMC41ZW07XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgY29sb3I6IHdoaXRlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRDZEQURFO1xuICBib3JkZXItcmFkaXVzOiA1cHggNXB4IDAgMDtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAjc2FtcGxlc1dyYXBwZXIgLnJlc3VsdENhcmQgLmNhcmRCb2R5IHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1mbG93OiByb3cgbm93cmFwO1xuICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAjc2FtcGxlc1dyYXBwZXIgLnJlc3VsdENhcmQgLmNhcmRCb2R5IHVsIHtcbiAgcGFkZGluZzogMDtcbiAgbWFyZ2luOiAwO1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gIHdpZHRoOiA1MCU7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItc2FtcGxlICNzYW1wbGVzUGFuZWwgI3NhbXBsZXNXcmFwcGVyIC5yZXN1bHRDYXJkIC5jYXJkQm9keSB1bCBsaSB7XG4gIHBhZGRpbmc6IDAuMWVtIDAuNWVtIDAuNWVtO1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI0VGRjNGNjtcbiAgZm9udC1zaXplOiAxMnB4O1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXNhbXBsZSAjc2FtcGxlc1BhbmVsICNzYW1wbGVzV3JhcHBlciAucmVzdWx0Q2FyZCAuY2FyZEJvZHkgdWwgbGkubGlzdFRpdGxlIHtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgcGFkZGluZzogMC41ZW0gMWVtO1xuICBjb2xvcjogIzYzNjM2Mztcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAjc2FtcGxlc1dyYXBwZXIgLnJlc3VsdENhcmQgLmNhcmRCb2R5IHVsIGxpIHNwYW4ge1xuICBkaXNwbGF5OiBibG9jaztcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAjc2FtcGxlc1dyYXBwZXIgLnJlc3VsdENhcmQgLmNhcmRCb2R5IHVsIGxpIHNwYW4udmFyIHtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgZm9udC1zaXplOiAxMHB4O1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXNhbXBsZSAjc2FtcGxlc1BhbmVsICNzYW1wbGVzV3JhcHBlciAucmVzdWx0Q2FyZCAuY2FyZEJvZHkgdWwgbGkgc3Bhbi52YWwge1xuICB0ZXh0LWFsaWduOiByaWdodDtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGNvbG9yOiAjODA4MDgwO1xuICBmb250LXNpemU6IDExcHg7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItc2FtcGxlICNzYW1wbGVzUGFuZWwgI3NhbXBsZXNXcmFwcGVyIC5yZXN1bHRDYXJkIC5jYXJkQm9keSB1bDpmaXJzdC1jaGlsZCB7XG4gIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNFNUU4RUE7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItc2FtcGxlICNzYW1wbGVzUGFuZWwgLnJlc3VsdFZhcmlhbnRzIHtcbiAgZ3JpZC1hcmVhOiBcInZhcmlhbnRSZXN1bHRzXCI7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItc2FtcGxlICNzYW1wbGVzUGFuZWwgLnJlc3VsdFZhcmlhbnRzLnNlbGVjdGVkIHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItc2FtcGxlICNzYW1wbGVzUGFuZWwgLnJlc3VsdFZhcmlhbnRzID4gcCB7XG4gIGZvbnQtc2l6ZTogMTVweDtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIG1hcmdpbjogMC41ZW0gMC4yNWVtO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXNhbXBsZSAjc2FtcGxlc1BhbmVsIC5yZXN1bHRWYXJpYW50cyAucGVyLXZhcmlhbnQge1xuICBtYXJnaW46IDAgYXV0bztcbiAgcGFkZGluZzogMDtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAucmVzdWx0VmFyaWFudHMgLnBlci12YXJpYW50IC5ub1ZhcmlhbnRzRm91bmQge1xuICBkaXNwbGF5OiBncmlkO1xuICBncmlkLWF1dG8tY29sdW1uczogMTtcbiAgZ3JpZC1hdXRvLXJvd3M6IDI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXNhbXBsZSAjc2FtcGxlc1BhbmVsIC5yZXN1bHRWYXJpYW50cyAucGVyLXZhcmlhbnQgLm5vVmFyaWFudHNGb3VuZCBzZWN0aW9uIHtcbiAganVzdGlmeS1zZWxmOiBjZW50ZXI7XG4gIHdpZHRoOiAxNTBweDtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAucmVzdWx0VmFyaWFudHMgLnBlci12YXJpYW50IC5ub1ZhcmlhbnRzRm91bmQgcCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgZm9udC1zaXplOiA4MCU7XG4gIGNvbG9yOiBncmV5O1xuICBmb250LXdlaWdodDogbGlnaHRlcjtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAucmVzdWx0VmFyaWFudHMgLnBlci12YXJpYW50IC5ub1ZhcmlhbnRzRm91bmQgcCBzcGFuIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItc2FtcGxlICNzYW1wbGVzUGFuZWwgLnJlc3VsdFZhcmlhbnRzIC5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZmxvdzogcm93IG5vd3JhcDtcbiAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XG4gIHdpZHRoOiAxMDQwcHg7XG4gIGhlaWdodDogNjUwcHg7XG4gIG1hcmdpbjogMCBhdXRvO1xuICBwYWRkaW5nOiAwO1xuICBib3JkZXI6IDFweCBzb2xpZCAjRUZGM0Y2O1xuICBib3JkZXItcmFkaXVzOiA1cHg7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItc2FtcGxlICNzYW1wbGVzUGFuZWwgLnJlc3VsdFZhcmlhbnRzIC5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuc2lkZWJhci13cmFwcGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0VGRjNGNjtcbiAgd2lkdGg6IDE3NXB4O1xuICBoZWlnaHQ6IDEwMCU7XG4gIG92ZXJmbG93OiBzY3JvbGw7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItc2FtcGxlICNzYW1wbGVzUGFuZWwgLnJlc3VsdFZhcmlhbnRzIC5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuc2lkZWJhci13cmFwcGVyIC5zaWRlYmFyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1mbG93OiBjb2x1bW4gbm93cmFwO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHN0cmV0Y2g7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItc2FtcGxlICNzYW1wbGVzUGFuZWwgLnJlc3VsdFZhcmlhbnRzIC5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuc2lkZWJhci13cmFwcGVyIC5zaWRlYmFyIC52YXJpYW50QnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0Q2REFERTtcbiAgbWluLWhlaWdodDogNTBweDtcbiAgbWF4LWhlaWdodDogMTAwcHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZmxvdzogcm93IG5vd3JhcDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGNvbG9yOiB3aGl0ZTtcbiAgb3ZlcmZsb3c6IHNjcm9sbDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXNhbXBsZSAjc2FtcGxlc1BhbmVsIC5yZXN1bHRWYXJpYW50cyAucGVyLXZhcmlhbnQgLnZhcmlhbnRzUGFuZWwgLnNpZGViYXItd3JhcHBlciAuc2lkZWJhciAudmFyaWFudEJ1dHRvbiBwIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwYWRkaW5nOiAxZW07XG4gIG1hcmdpbjogMDtcbiAgdGV4dC1hbGlnbjoganVzdGlmeTtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAucmVzdWx0VmFyaWFudHMgLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5zaWRlYmFyLXdyYXBwZXIgLnNpZGViYXIgLnZhcmlhbnRCdXR0b246aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjQ0NEMEQzO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXNhbXBsZSAjc2FtcGxlc1BhbmVsIC5yZXN1bHRWYXJpYW50cyAucGVyLXZhcmlhbnQgLnZhcmlhbnRzUGFuZWwgLnNpZGViYXItd3JhcHBlciAuc2lkZWJhciAudmFyaWFudEJ1dHRvbi5zZWxlY3RlZCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMxRDk0RUU7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItc2FtcGxlICNzYW1wbGVzUGFuZWwgLnJlc3VsdFZhcmlhbnRzIC5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuc2lkZWJhci13cmFwcGVyIC5zaWRlYmFyIC52YXJpYW50QnV0dG9uOm50aC1jaGlsZCgxKSB7XG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDVweDtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAucmVzdWx0VmFyaWFudHMgLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgd2lkdGg6IDk5MHB4O1xuICBoZWlnaHQ6IDEwMCU7XG4gIG92ZXJmbG93OiBzY3JvbGw7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAucmVzdWx0VmFyaWFudHMgLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xuICBwYWRkaW5nOiAzLjVlbSAxZW0gMWVtIDNlbTtcbiAgd2lkdGg6IDkwJTtcbiAgZ3JpZC1jb2x1bW46IDEwMCU7XG4gIGdyaWQtcm93OiA1MHB4IGF1dG87XG4gIGdyaWQtdGVtcGxhdGUtYXJlYXM6IFwidmFyaWFudC1oZWFkZXJcIiBcImRhdGFzZXRzXCI7XG4gIGdyaWQtZ2FwOiAxZW07XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItc2FtcGxlICNzYW1wbGVzUGFuZWwgLnJlc3VsdFZhcmlhbnRzIC5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50LnNlbGVjdGVkIHtcbiAgZGlzcGxheTogZ3JpZDtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAucmVzdWx0VmFyaWFudHMgLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQgLmhlYWRlciB7XG4gIGdyaWQtYXJlYTogdmFyaWFudC1oZWFkZXI7XG4gIG1hcmdpbi1sZWZ0OiAxZW07XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZmxvdzogcm93IG5vd3JhcDtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAucmVzdWx0VmFyaWFudHMgLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQgLmhlYWRlciBwIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgbWFyZ2luOiAwO1xuICBtYXJnaW4tcmlnaHQ6IDFlbTtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAucmVzdWx0VmFyaWFudHMgLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQgLmhlYWRlciBwIHNtYWxsIHtcbiAgZm9udC13ZWlnaHQ6IGxpZ2h0ZXI7XG4gIGZvbnQtc2l6ZTogMTAwJTtcbiAgcGFkZGluZy1sZWZ0OiAwLjI1ZW07XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItc2FtcGxlICNzYW1wbGVzUGFuZWwgLnJlc3VsdFZhcmlhbnRzIC5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5oZWFkZXIgZGl2IHtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGRpc3BsYXk6IGZsZXg7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItc2FtcGxlICNzYW1wbGVzUGFuZWwgLnJlc3VsdFZhcmlhbnRzIC5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5oZWFkZXIgZGl2IC5sb2dvIHtcbiAgbWFyZ2luOiBhdXRvIDAuNWVtO1xuICBwYWRkaW5nOiAwO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGFsaWduLXNlbGY6IGNlbnRlcjtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAucmVzdWx0VmFyaWFudHMgLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQgLmhlYWRlciBkaXYgLmxvZ28gaW1nIHtcbiAgd2lkdGg6IDE2cHg7XG4gIGhlaWdodDogMTZweDtcbiAgYm9yZGVyLXJhZGl1czogMzAlO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXNhbXBsZSAjc2FtcGxlc1BhbmVsIC5yZXN1bHRWYXJpYW50cyAucGVyLXZhcmlhbnQgLnZhcmlhbnRzUGFuZWwgLmNvbnRlbnQtd3JhcHBlciAuY29udGVudCAuaGVhZGVyIGRpdiAubG9nbyBpIHtcbiAgZm9udC1zaXplOiAxNXB4O1xuICBjb2xvcjogIzIxOTZmMztcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAucmVzdWx0VmFyaWFudHMgLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQgLmhlYWRlciBkaXYgLmxvZ286OmFmdGVyIHtcbiAgY29udGVudDogXCJcIjtcbiAgd2lkdGg6IDA7XG4gIGhlaWdodDogMDtcbiAgZGlzcGxheTogbm9uZTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB6LWluZGV4OiAxMDE7XG4gIGJvcmRlci1sZWZ0OiA4cHggc29saWQgdHJhbnNwYXJlbnQ7XG4gIGJvcmRlci1yaWdodDogOHB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3JkZXItYm90dG9tOiA4cHggc29saWQgIzM1M0M0NztcbiAgYm9yZGVyLXRvcDogOHB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICBsZWZ0OiA1MCU7XG4gIHRvcDogMTJweDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXNhbXBsZSAjc2FtcGxlc1BhbmVsIC5yZXN1bHRWYXJpYW50cyAucGVyLXZhcmlhbnQgLnZhcmlhbnRzUGFuZWwgLmNvbnRlbnQtd3JhcHBlciAuY29udGVudCAuaGVhZGVyIGRpdiBkaXYucmVzdWx0IHtcbiAgZGlzcGxheTogbm9uZTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBoZWlnaHQ6IDUwMHB4O1xuICB3aWR0aDogODAlO1xuICB0b3A6IDY3cHg7XG4gIGxlZnQ6IDUwJTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICB6LWluZGV4OiAxMDE7XG4gIG1hcmdpbjogMCBhdXRvO1xuICBhbGlnbi1zZWxmOiBzdGFydDtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAucmVzdWx0VmFyaWFudHMgLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQgLmhlYWRlciBkaXYgZGl2LnJlc3VsdCAudHJhbnNwYXJlbnQge1xuICBoZWlnaHQ6IDEwcHg7XG4gIG1hcmdpbjogMDtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAucmVzdWx0VmFyaWFudHMgLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQgLmhlYWRlciBkaXYgZGl2LnJlc3VsdCAuY29udGVudC1oYW5kb3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzNTNDNDc7XG4gIGhlaWdodDogMTAwJTtcbiAgY29sb3I6IHdoaXRlO1xuICBmb250LWZhbWlseTogXCJDb3VyaWVyIE5ld1wiLCBDb3VyaWVyLCBtb25vc3BhY2U7XG4gIGZvbnQtd2VpZ2h0OiBsaWdodGVyO1xuICBwYWRkaW5nOiAxZW07XG4gIGJvcmRlci1yYWRpdXM6IDVweDtcbiAgb3ZlcmZsb3c6IHNjcm9sbDtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAucmVzdWx0VmFyaWFudHMgLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQgLmhlYWRlciBkaXYgZGl2LnJlc3VsdCAuY29udGVudC1oYW5kb3ZlciBwIHtcbiAgbWFyZ2luLWxlZnQ6IDFlbTtcbiAgZm9udC13ZWlnaHQ6IGJvbGRlcjtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAucmVzdWx0VmFyaWFudHMgLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQgLmhlYWRlciBkaXYgZGl2LnJlc3VsdC5zbWFsbCB7XG4gIHdpZHRoOiA4MCU7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItc2FtcGxlICNzYW1wbGVzUGFuZWwgLnJlc3VsdFZhcmlhbnRzIC5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5oZWFkZXIgZGl2IGRpdi5yZXN1bHQuc21hbGwgLmNvbnRlbnQtaGFuZG92ZXIge1xuICBoZWlnaHQ6IGF1dG87XG4gIHBhZGRpbmc6IDFlbTtcbiAgb3ZlcmZsb3c6IHNjcm9sbDtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItc2FtcGxlICNzYW1wbGVzUGFuZWwgLnJlc3VsdFZhcmlhbnRzIC5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5oZWFkZXIgZGl2IGRpdi5yZXN1bHQuc21hbGwgLmNvbnRlbnQtaGFuZG92ZXIgcCB7XG4gIGZvbnQtZmFtaWx5OiBcIk9wZW4gU2Fuc1wiLCBcIkhlbHZldGljYSBOZXVlXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDkwJTtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAucmVzdWx0VmFyaWFudHMgLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQgLmhlYWRlciBkaXYgZGl2LnJlc3VsdC5zbWFsbCAuY29udGVudC1oYW5kb3ZlciBwIHNwYW4ge1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAucmVzdWx0VmFyaWFudHMgLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQgLmhlYWRlciBkaXYgZGl2LnJlc3VsdC5zbWFsbCAuY29udGVudC1oYW5kb3ZlciBwIGEge1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGNvbG9yOiB3aGl0ZTtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAucmVzdWx0VmFyaWFudHMgLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQgLmhlYWRlciBkaXY6aG92ZXIgZGl2LnJlc3VsdCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXNhbXBsZSAjc2FtcGxlc1BhbmVsIC5yZXN1bHRWYXJpYW50cyAucGVyLXZhcmlhbnQgLnZhcmlhbnRzUGFuZWwgLmNvbnRlbnQtd3JhcHBlciAuY29udGVudCAuaGVhZGVyIGRpdjpob3ZlciBkaXYubG9nbzo6YWZ0ZXIge1xuICBkaXNwbGF5OiBibG9jaztcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAucmVzdWx0VmFyaWFudHMgLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQgLmhlYWRlciBkaXYubWlzc2luZyBkaXYgaW1nIHtcbiAgb3BhY2l0eTogMC41O1xuICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9NTApO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXNhbXBsZSAjc2FtcGxlc1BhbmVsIC5yZXN1bHRWYXJpYW50cyAucGVyLXZhcmlhbnQgLnZhcmlhbnRzUGFuZWwgLmNvbnRlbnQtd3JhcHBlciAuY29udGVudCAuaGVhZGVyIGRpdi5taXNzaW5nIGRpdiBpIHtcbiAgY29sb3I6ICNCMUNFRTU7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItc2FtcGxlICNzYW1wbGVzUGFuZWwgLnJlc3VsdFZhcmlhbnRzIC5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5oZWFkZXIgZGl2Lm1pc3Npbmc6aG92ZXIgZGl2LnJlc3VsdCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItc2FtcGxlICNzYW1wbGVzUGFuZWwgLnJlc3VsdFZhcmlhbnRzIC5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5oZWFkZXIgZGl2Lm1pc3Npbmc6aG92ZXIgZGl2LmxvZ286OmFmdGVyIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAucmVzdWx0VmFyaWFudHMgLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQgLmRhdGFzZXQtcmVzcG9uc2VzIHtcbiAgZ3JpZC1hcmVhOiBkYXRhc2V0cztcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1mbG93OiByb3cgd3JhcDtcbiAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gIGp1c3RpZnktY29udGVudDogc3RhcnQ7XG4gIG92ZXJmbG93OiBzY3JvbGw7XG4gIHBhZGRpbmctbGVmdDogMWVtO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXNhbXBsZSAjc2FtcGxlc1BhbmVsIC5yZXN1bHRWYXJpYW50cyAucGVyLXZhcmlhbnQgLnZhcmlhbnRzUGFuZWwgLmNvbnRlbnQtd3JhcHBlciAuY29udGVudCAuZGF0YXNldC1yZXNwb25zZXMgc2VjdGlvbiB7XG4gIC8qIGZsZXgtYmFzaXM6MzAlOyAqL1xuICBtaW4td2lkdGg6IDE1MHB4O1xuICBtYXJnaW46IDFlbTtcbiAgLyogbWFyZ2luOjFlbSAwOyAqL1xuICBwYWRkaW5nOiAwO1xuICBib3JkZXI6IDFweCBzb2xpZCAjRTVFOEVBO1xuICBib3JkZXItcmFkaXVzOiAxZXg7XG4gIGNvbG9yOiBncmV5O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXNhbXBsZSAjc2FtcGxlc1BhbmVsIC5yZXN1bHRWYXJpYW50cyAucGVyLXZhcmlhbnQgLnZhcmlhbnRzUGFuZWwgLmNvbnRlbnQtd3JhcHBlciAuY29udGVudCAuZGF0YXNldC1yZXNwb25zZXMgc2VjdGlvbiBoMyB7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwLjVlbTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBjb2xvcjogd2hpdGU7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItc2FtcGxlICNzYW1wbGVzUGFuZWwgLnJlc3VsdFZhcmlhbnRzIC5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5kYXRhc2V0LXJlc3BvbnNlcyBzZWN0aW9uIGxpIHtcbiAgcGFkZGluZzogMC41ZW0gMWVtO1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI0U1RThFQTtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBmb250LXNpemU6IDkwJTtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAucmVzdWx0VmFyaWFudHMgLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQgLmRhdGFzZXQtcmVzcG9uc2VzIHNlY3Rpb24gbGk6bGFzdC1vZi10eXBlIHtcbiAgYm9yZGVyLWJvdHRvbTogbm9uZTtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAucmVzdWx0VmFyaWFudHMgLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQgLmRhdGFzZXQtcmVzcG9uc2VzIHNlY3Rpb24gbGkuaGFuZG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWZmM2Y2O1xuICBjb2xvcjogIzIxOTZmMztcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAvKiBoYW5kb3ZlciBsaW5rcyAqL1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXNhbXBsZSAjc2FtcGxlc1BhbmVsIC5yZXN1bHRWYXJpYW50cyAucGVyLXZhcmlhbnQgLnZhcmlhbnRzUGFuZWwgLmNvbnRlbnQtd3JhcHBlciAuY29udGVudCAuZGF0YXNldC1yZXNwb25zZXMgc2VjdGlvbiBsaS5oYW5kb3ZlciAuaGFuZG92ZXItbm90ZSB7XG4gIG92ZXJmbG93OiBzY3JvbGw7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItc2FtcGxlICNzYW1wbGVzUGFuZWwgLnJlc3VsdFZhcmlhbnRzIC5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5kYXRhc2V0LXJlc3BvbnNlcyBzZWN0aW9uIGxpLmhhbmRvdmVyIC5oYW5kb3Zlci1ub3RlIGEge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGNvbG9yOiAjMjE5NmYzO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItc2FtcGxlICNzYW1wbGVzUGFuZWwgLnJlc3VsdFZhcmlhbnRzIC5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5kYXRhc2V0LXJlc3BvbnNlcyBzZWN0aW9uIGxpLmhhbmRvdmVyIC5oYW5kb3Zlci1ub3RlIHAge1xuICBkaXNwbGF5OiBub25lO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDUwJTtcbiAgdG9wOiAycHg7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC0xMDAlKTtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIHBhZGRpbmc6IDAuNWVtIDFlbTtcbiAgd2lkdGg6IDEwMHB4O1xuICBoZWlnaHQ6IDQwcHg7XG4gIGNvbG9yOiB3aGl0ZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzM1M0M0NztcbiAgei1pbmRleDogOTk7XG4gIG92ZXJmbG93OiBzY3JvbGw7XG4gIGJvcmRlci1yYWRpdXM6IDVweDtcbiAgYm9yZGVyOiAycHggc29saWQgIzM1M0M0Nztcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAucmVzdWx0VmFyaWFudHMgLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQgLmRhdGFzZXQtcmVzcG9uc2VzIHNlY3Rpb24gbGkuaGFuZG92ZXIgLmhhbmRvdmVyLW5vdGU6OmFmdGVyIHtcbiAgY29udGVudDogXCJcIjtcbiAgd2lkdGg6IDA7XG4gIGhlaWdodDogMDtcbiAgZGlzcGxheTogbm9uZTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB6LWluZGV4OiAxMDA7XG4gIGJvcmRlci1sZWZ0OiA1cHggc29saWQgdHJhbnNwYXJlbnQ7XG4gIGJvcmRlci1yaWdodDogNXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3JkZXItYm90dG9tOiA1cHggc29saWQgdHJhbnNwYXJlbnQ7XG4gIGJvcmRlci10b3A6IDVweCBzb2xpZCAjMzUzQzQ3O1xuICBsZWZ0OiA1MCU7XG4gIHRvcDogMnB4O1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItc2FtcGxlICNzYW1wbGVzUGFuZWwgLnJlc3VsdFZhcmlhbnRzIC5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5kYXRhc2V0LXJlc3BvbnNlcyBzZWN0aW9uIGxpLmhhbmRvdmVyOmhvdmVyIC5oYW5kb3Zlci1ub3RlIHAge1xuICBkaXNwbGF5OiBibG9jaztcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAucmVzdWx0VmFyaWFudHMgLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQgLmRhdGFzZXQtcmVzcG9uc2VzIHNlY3Rpb24gbGkuaGFuZG92ZXI6aG92ZXIgLmhhbmRvdmVyLW5vdGU6OmFmdGVyIHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItc2FtcGxlICNzYW1wbGVzUGFuZWwgLnJlc3VsdFZhcmlhbnRzIC5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5kYXRhc2V0LXJlc3BvbnNlcyBzZWN0aW9uIGxpIHNwYW4udmFyaWFibGUge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBhZGRpbmctcmlnaHQ6IDAuNWVtO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXNhbXBsZSAjc2FtcGxlc1BhbmVsIC5yZXN1bHRWYXJpYW50cyAucGVyLXZhcmlhbnQgLnZhcmlhbnRzUGFuZWwgLmNvbnRlbnQtd3JhcHBlciAuY29udGVudCAuZGF0YXNldC1yZXNwb25zZXMgc2VjdGlvbiBsaSBzcGFuLm51bWJlciB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAucmVzdWx0VmFyaWFudHMgLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQgLmRhdGFzZXQtcmVzcG9uc2VzIHNlY3Rpb24gdWwge1xuICBwYWRkaW5nOiAwO1xuICBtYXJnaW46IDA7XG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAucmVzdWx0VmFyaWFudHMgLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQgLmRhdGFzZXQtcmVzcG9uc2VzIHNlY3Rpb24gc3Bhbi5udW1iZXIge1xuICBjb2xvcjogYmxhY2s7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXNhbXBsZSAjc2FtcGxlc1BhbmVsIC5yZXN1bHRWYXJpYW50cyAucGVyLXZhcmlhbnQgLnZhcmlhbnRzUGFuZWwgLmNvbnRlbnQtd3JhcHBlciAuY29udGVudCAuZGF0YXNldC1yZXNwb25zZXMgc2VjdGlvbi5leGlzdHMtWSBoMyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzNkFFNDc7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItc2FtcGxlICNzYW1wbGVzUGFuZWwgLnJlc3VsdFZhcmlhbnRzIC5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IC5kYXRhc2V0LXJlc3BvbnNlcyBzZWN0aW9uLmV4aXN0cy1ZIGgzIHNwYW4ge1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAucmVzdWx0VmFyaWFudHMgLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQgLmRhdGFzZXQtcmVzcG9uc2VzIHNlY3Rpb24uZXhpc3RzLU4gaDMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjA2NTQzO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXNhbXBsZSAjc2FtcGxlc1BhbmVsIC5yZXN1bHRWYXJpYW50cyAucGVyLXZhcmlhbnQgLnZhcmlhbnRzUGFuZWwgLmNvbnRlbnQtd3JhcHBlciAuY29udGVudCAuZGF0YXNldC1yZXNwb25zZXMgc2VjdGlvbi5leGlzdHMtTiBoMyBzcGFuIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItc2FtcGxlICNzYW1wbGVzUGFuZWwgLnJlc3VsdFZhcmlhbnRzIC5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCB7XG4gIHdpZHRoOiBhdXRvO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXNhbXBsZSAjc2FtcGxlc1BhbmVsIC5yZXN1bHRWYXJpYW50cyAucGVyLXZhcmlhbnQgLnZhcmlhbnRzUGFuZWwgLmNvbnRlbnQtd3JhcHBlciB7XG4gIHdpZHRoOiBhdXRvO1xufVxuYm9keSNyZXNwb25zZSA+IG1haW4ucGVyLXNhbXBsZSAjc2FtcGxlc1BhbmVsIC5yZXN1bHRWYXJpYW50cyAucGVyLXZhcmlhbnQgLnZhcmlhbnRzUGFuZWwgLnNpZGViYXItd3JhcHBlciB7XG4gIGZsZXgtc2hyaW5rOiAwO1xuICB3aWR0aDogMTY1cHg7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItc2FtcGxlICNzYW1wbGVzUGFuZWwgLnJlc3VsdFZhcmlhbnRzIC5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuc2lkZWJhci13cmFwcGVyIC5jb250ZW50IHtcbiAgd2lkdGg6IGF1dG87XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItc2FtcGxlICNzYW1wbGVzUGFuZWwgLnJlc3VsdFZhcmlhbnRzIC5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIHtcbiAgd2lkdGg6IDEwMCU7XG59XG5ib2R5I3Jlc3BvbnNlID4gbWFpbi5wZXItc2FtcGxlICNzYW1wbGVzUGFuZWwgLnJlc3VsdFZhcmlhbnRzIC5wZXItdmFyaWFudCAudmFyaWFudHNQYW5lbCAuY29udGVudC13cmFwcGVyIC5jb250ZW50IHtcbiAgcGFkZGluZzogMi41ZW0gMS41ZW0gMWVtIDJlbTtcbn1cbmJvZHkjcmVzcG9uc2UgPiBtYWluLnBlci1zYW1wbGUgI3NhbXBsZXNQYW5lbCAucmVzdWx0VmFyaWFudHMgLnBlci12YXJpYW50IC52YXJpYW50c1BhbmVsIC5jb250ZW50LXdyYXBwZXIgLmNvbnRlbnQgLmhlYWRlciBkaXYgZGl2LnJlc3VsdCB7XG4gIHRvcDogNTVweDtcbn1cblxuLmhhbmRvdmVyLW5vdGU6aG92ZXIgcCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuLmhhbmRvdmVyLW5vdGU6aG92ZXI6OmFmdGVyIHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5cbkBrZXlmcmFtZXMgZmFkZUF3YXkge1xuICAwJSB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbiAgMTAwJSB7XG4gICAgd2lkdGg6IDAlO1xuICB9XG59XG51bCNtZXNzYWdlcyB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgYm90dG9tOiAxZW07XG4gIHJpZ2h0OiAxZW07XG4gIHotaW5kZXg6IDEwMDA7XG4gIHdpZHRoOiAzMDBweDtcbiAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7XG59XG51bCNtZXNzYWdlcyBsaSB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgYmFja2dyb3VuZDogd2hpdGU7XG4gIGNvbG9yOiBibGFjaztcbiAgYm9yZGVyLXJhZGl1czogMWV4O1xuICBib3JkZXI6IDFweCBzb2xpZCBibGFjaztcbiAgbWFyZ2luOiAxZXggMDtcbiAgcGFkZGluZzogMWV4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC8qIFN0b3AgYW5kIHJlc3RhcnQgKi9cbn1cbnVsI21lc3NhZ2VzIGxpLmhpZGRlbiB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG51bCNtZXNzYWdlcyBsaTo6YWZ0ZXIge1xuICBjb250ZW50OiBcIi1cIjtcbiAgdGV4dC1pbmRlbnQ6IC0zMDAwMHB4O1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogMXB4O1xuICByaWdodDogMXB4O1xuICBoZWlnaHQ6IDJweDtcbiAgd2lkdGg6IGNhbGMoMTAwJSAtIDJweCk7XG4gIGJhY2tncm91bmQ6IGJsYWNrO1xuICBib3JkZXItcmFkaXVzOiAxZXg7XG4gIGFuaW1hdGlvbi1uYW1lOiBmYWRlQXdheTtcbiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogbGluZWFyO1xuICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiAxO1xuICBhbmltYXRpb24tZHVyYXRpb246IDVzO1xufVxudWwjbWVzc2FnZXMgbGk6aG92ZXI6OmFmdGVyIHtcbiAgYW5pbWF0aW9uOiBub25lO1xufVxudWwjbWVzc2FnZXMgbGkubWVzc2FnZS1pbmZvIHtcbiAgYmFja2dyb3VuZDogIzVjYjg1YztcbiAgYm9yZGVyLWNvbG9yOiAjNWNiODVjO1xufVxudWwjbWVzc2FnZXMgbGkubWVzc2FnZS1pbmZvOjphZnRlciB7XG4gIGJhY2tncm91bmQ6ICM0NDlkNDQ7XG59XG51bCNtZXNzYWdlcyBsaS5tZXNzYWdlLWVycm9yIHtcbiAgYmFja2dyb3VuZDogI2Q5NTM0ZjtcbiAgYm9yZGVyLWNvbG9yOiAjZDk1MzRmO1xufVxudWwjbWVzc2FnZXMgbGkubWVzc2FnZS1lcnJvcjo6YWZ0ZXIge1xuICBiYWNrZ3JvdW5kOiAjYzkzMDJjO1xufVxudWwjbWVzc2FnZXMgbGkubWVzc2FnZS13YXJuaW5nIHtcbiAgYmFja2dyb3VuZDogI2YwYWQ0ZTtcbiAgYm9yZGVyLWNvbG9yOiAjZjBhZDRlO1xufVxudWwjbWVzc2FnZXMgbGkubWVzc2FnZS13YXJuaW5nOjphZnRlciB7XG4gIGJhY2tncm91bmQ6ICNlYzk3MWY7XG59XG5cbi8qIyBzb3VyY2VNYXBwaW5nVVJMPXN0eWxlLmNzcy5tYXAgKi9cbiIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdfQ== */
\ No newline at end of file
diff --git a/ui/static/css/style.css.map b/ui/static/css/style.css.map
new file mode 100644
index 0000000..22d05ae
--- /dev/null
+++ b/ui/static/css/style.css.map
@@ -0,0 +1 @@
+{"version":3,"sourceRoot":"","sources":["../scss/_base.scss","../scss/_variables.scss","../scss/_query.scss","../scss/_main.scss","../scss/_cookies.scss","../scss/_footer.scss","../scss/_history.scss","../scss/_levels.scss","../scss/_result.scss","../scss/_datasetAlleleResponses.scss","../scss/_variantsPanel.scss","../scss/_samples.scss","../scss/_message.scss"],"names":[],"mappings":"AAAA;EACE;;;AAGF;EAEE;EACA;EACA;EACA;EACA,WCVgB;EDWhB;EACA;EAGA;EACA;EAEA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;AAEA;EACI;EACA;;AAEA;EACI;EACA;EACA;;AAIR;EACE;EACA;EACA;EACA;EACA;EACA;;AAGA;EAAI;EACA;;AAIN;EACE;EACA;EACA;EACA;EACA;EACA;;AAGA;EACE;EACA;;AAKJ;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAGF;EACE;;AAEA;EACE;;AAIJ;EACE;EACA;EACA;EACA;EACA;;AAMA;EACY;EAAoB;;AAGhC;EACE;EACA;EACA;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EAAoB;;;AE5HhC;EAGI;EACA;EAGA;EACA;EACA;EACH;EACA;EAEG;;AAEH;EAEC;EACA;AACA;EACA;AACA;EACA;EAGA;EACA;EAEA;EAEA;EACA;AAWA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;AAfA;EACC;;AACD;EACC;;AAeD;EACC;EACA;EACA;EACA;EACA;;AAEA;EACC;;AACA;EAAQ;;AAKV;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;;AAED;EACC;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EAAiB;;AACjB;EAAU;EAAyC;;AAEpD;EACC;EACA;EACA;EAAa;EACb;EAAa;EACb;EACA;EACA;EACA;;AAID;EAAkC;EAAY;;AAI/C;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EAEA;;AAOA;EACA;EAAoB;;AAGpB;EACC;EACA;EACA;;AAED;EACC;;AAKH;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;;AAaA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AAGA;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAMH;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;;AACA;EAA2B;EAAc;EAA+B;;AAK3E;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;AAIA;EACC;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;;AAIF;EAAI;EACH;;AACD;EAAe;;AAEf;EACC;EACA;EACA;EACA;AAuBA;;AArBA;EACC;EACA;EACA;EACA;EAEA;;AACA;EAAiB;;AACjB;EAAU;;AAGX;EACC;EACA;EACA;EACA;;AAED;EACC;EACA;;AAMH;EACC;EAEA;;AAGA;EACC;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;;AAED;EACC;EACA;EACA;EACA;EACA;;AAID;EACC;EACA;;AAED;EAEC;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;;AAED;EACC;EACA;;AACA;EACC;;AAED;EACC;EACA;EACA;;;ACpVN;EAEC;AAAS;EACT;EACA;;AAEG;EACF;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;AAOD;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AALC;EAAqB,kBFaR;;AEZb;EAAqB,kBFaJ;;AEZjB;EAAqB,kBFaJ;;AEZjB;EAAwB,kBFaJ;;AEKlB;EAAI;;;AAKJ;EAEF;;AAEA;EACC;EACA;EACA;EACA;EAEA;EAEA;;AAEA;EAAM;EACL;AACA;EACA;EACA;EACA;;AAED;EACC;EACA;EACA;EACA;;AACA;EAAS;;AAIV;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAGA;EACA;EAAwB;;AAExB;EAAqB,kBF1DV;;AE2DX;EAAyB,kBFzDV;;;AGtCnB;EACI;EAAgB;EAChB;EACA;EAAS;EACT;EACA;EACA;EACA;EAEA;EAAc;EAEd;EAwBA;;AAtBA;EACH;;AAEA;EAAK;EAAiB;EAAU;;AAChC;EAAI;;AACJ;EACI;EACA;;AAID;EACH;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAIG;EAAY;EAAW;;;AAI3B;EAA2B;;;AAC3B;EAAmC;EAAkB;;;ACzCrD;EAEI;EACA;EAGA;EACA;EACA;EACA;EAEA;AAI4C;;AAF5C;EAAU;;AACV;EAAkB;EAAc;EAAsB;;AACtD;EAAwB;;AACxB;EAAgC;;AAEhC;EAAe;;AAEf;EACI;EACA;;AAEA;EAAG;EAAgB;;;AAS3B;EACI;EAAe;EACf;EAAgB;EAAU;EAAa;EAAY;EACnD;EACA;EACA;EACA;EACA;EACA;EAEA;;;AAIJ;EACI;EACA;EAAmB;EAAS;EAC5B;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;;AAIJ;EAAyD;;;AACzD;EAA2D;;;AC/D3D;EAAoB;;;AAEpB;EAEI;EAAgB;EAAS;EACzB;EACA;EACA;EAEA;EACA;EAEA;EAEA;EACA;EAEA;AAEA;AACA;EAEA;EACA;AAEA;EA+CA;;AA9CA;EAAS;EAAsB;EAAa;EAAiB;EAAgB;;AAE7E;EACF;EACA;EACA;AAaA;AACA;EAEA;EACA;AAEA;AACA;EAEA;;AArBA;EACC;EACA;EAAmB;EACnB;EACA;EACA;EACA;EACA;EACA;EACA;;AAeC;EAEF;EACA;;AAEA;EACC;EACA;;AACA;EACA;;AAQC;EACF;EACA;EACA;EACA;EACA;EACA;EAWA;;AATA;EAAK;EAAc;;AACnB;EACC;;AAEA;EAAW;EAAsB;EAAc;;AAMhD;EACC;EACA;EACA;EAAmB;EAAU;EAAW;EAExC;EACA;EACA;EACA;EACA;;AAID;AAAA;EACM;;AAEN;EACC;EACA;EACA;EACA;EACA;EACA;EAAmB;;AAEnB;EAAe;;AACf;EAAe;;AAEf;EACC;EACA;EAAmB;EAAW;EAAO;EACrC;EACA;;AACA;EAAU;;AAKZ;EACC;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;EACA;;AAGA;EACC;;AAGD;EACC;;;ACpJL;EAEC;EACA;EACA;EACA;EAEA;EACA,WNRiB;EMSjB;EACA;;AAEA;EACC;;AAGA;EACC;EACA;EACA;EACA;;AACA;EAAS;;AAIV;EACC;EACA;EACA;;AACA;EAAQ;;AAIT;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;;AAEA;EACC;EACA;EACA;;AAIF;EACC;EACA;EACA;;AAIF;EACC;EACA;;AAEA;EACC;EACA;EACA;EAEA;EACA;AACA;;AAEA;EACC;EACA;EACA;AACA;;AAIF;EACC;EACA;;AAEA;EACC;EAA4B;EAAiB;EAE7C;EACA;EACA;;AAEA;EAAiB;EAAkB;;AAEnC;EACC;EACA;EACA;EACA;;AAID;EACC;EACA;EAAW;EAEX;EACA;EAEA;;AAEA;EACC;EACA;EACA;AACA;;AAOJ;EACC;EACA;EACA;EACA;;AAGA;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAKH;EACC;;AACA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ACxJL;EAEI;EACA;EACA;EAEA;;ACLJ;AACI;EACA;EACA;AACA;EACA;EACA;EACA;EACA;EAEA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAEJ;EACI;EACA;EACA;AAEA;;AACA;EAEI;;AAGA;EAAI;EAEA;EACA;;AAMJ;EACI;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAIJ;EACI;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;;AAOJ;EAAmB;;AACnB;EAAwB;;AAKhC;EACI;EACA;;AAGJ;EACI;;AAIR;EACI;EACA;EACA;;AAGJ;EACI;EACA;;AAIA;EAAI;;AACA;EAAO;;AAIX;EAAK;;AACD;EAAO;;ADtHlB;EACC;EACA;;AEVF;EACI;EACA;EACA;EAEA;;AAEA;EACI;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AACA;EACI;;AAKZ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGA;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;EAEA;;AAEA;EACI;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;;AAIJ;EACI;;AAEJ;EACI;;AAGJ;EACI;;AAMhB;EACI;EACA;EACA;EACA;EACA;;AAGA;EACI;EAMA;EACA;EAEA;EACA;EACA;EAEA;;AAXA;EACI;;AAWJ;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;;AAIR;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;;AAEA;EACA;EACA;EACA;;AAGA;EACI;EACA;;AAGJ;EACI;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;;AAKR;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;EAEA;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;;AAOR;EACI;;AAIA;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;;AACA;EAAO;;AACP;EAAI;EAAuB;;AAOvC;EACI;;AAGJ;EACI;;AAKJ;EACI;EACA;;AAGJ;EACI;;AAIA;EACI;;AAGJ;EACI;;AAQpB;EACI;EAEA;EACA;EACA;EACA;EACA;EACA;;AD3QhB;AACI;EACA;EACA;AACA;EACA;EACA;EACA;EACA;EAEA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAEJ;EACI;EACA;EACA;AAEA;;AACA;EAEI;;AAGA;EAAI;EAEA;EACA;;AAMJ;EACI;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAIJ;EACI;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;;AAOJ;EAAmB;;AACnB;EAAwB;;AAKhC;EACI;EACA;;AAGJ;EACI;;AAIR;EACI;EACA;EACA;;AAGJ;EACI;EACA;;AAIA;EAAI;;AACA;EAAO;;AAIX;EAAK;;AACD;EAAO;;AD/GlB;EACC;EACA;;AGlBF;EACI;EACA;EACA;EAEA;EACA;EACA;EACA;;AAEA;EACI;EAEA;EACA;EAEA;EACA;;AAIA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;;AAEJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;;AAIJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;;AAGJ;EACI;;AAEA;EACI;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAMZ;EACI;;AASpB;EACI;EACA;;AAEA;EACI;;AAEJ;EACI;EACA;EACA;;AAGJ;EACI;EACA;;ADhJZ;EACI;EACA;EACA;EAEA;;AAEA;EACI;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AACA;EACI;;AAKZ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGA;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;EAEA;;AAEA;EACI;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;;AAIJ;EACI;;AAEJ;EACI;;AAGJ;EACI;;AAMhB;EACI;EACA;EACA;EACA;EACA;;AAGA;EACI;EAMA;EACA;EAEA;EACA;EACA;EAEA;;AAXA;EACI;;AAWJ;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;;AAIR;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;;AAEA;EACA;EACA;EACA;;AAGA;EACI;EACA;;AAGJ;EACI;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;;AAKR;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;EAEA;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;;AAOR;EACI;;AAIA;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;;AACA;EAAO;;AACP;EAAI;EAAuB;;AAOvC;EACI;;AAGJ;EACI;;AAKJ;EACI;EACA;;AAGJ;EACI;;AAIA;EACI;;AAGJ;EACI;;AAQpB;EACI;EAEA;EACA;EACA;EACA;EACA;EACA;;AD3QhB;AACI;EACA;EACA;AACA;EACA;EACA;EACA;EACA;EAEA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAEJ;EACI;EACA;EACA;AAEA;;AACA;EAEI;;AAGA;EAAI;EAEA;EACA;;AAMJ;EACI;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAIJ;EACI;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;;AAOJ;EAAmB;;AACnB;EAAwB;;AAKhC;EACI;EACA;;AAGJ;EACI;;AAIR;EACI;EACA;EACA;;AAGJ;EACI;EACA;;AAIA;EAAI;;AACA;EAAO;;AAIX;EAAK;;AACD;EAAO;;AEsBP;EACI;;AACA;EACG;;AAEH;EACI;EACA;;AACA;EACI;;AAGR;EACI;;AACA;EACI;;AACA;EACI;;;AHxI3B;EAAI;;AACJ;EAAW;;;AIhCZ;EACI;IAAQ;;EACR;IAAQ;;;AAGZ;EAEI;EAAgB;EAAY;EAC5B;EACA;EACA;EAEA;EACA;;AAEA;EACH;EACA;EAAmB;EACnB;EACA;EACA;EACA;EAEA;EACA;AAiBA;;AAfA;EAAW;;AAEX;EACI;EAAc;EACd;EAAoB;EAAY;EAAW;EAAY;EAEvD;EACA;EAEA;EACA;EACA;EACA;;AAIJ;EAAiB;;AAEjB;EACI;EAAqB;;AACrB;EAAW;;AAEf;EACI;EAAqB;;AACrB;EAAW;;AAEf;EACI;EAAqB;;AACrB;EAAW","file":"style.css"}
\ No newline at end of file
diff --git a/ui/static/css/testing.css b/ui/static/css/testing.css
new file mode 100644
index 0000000..2c4ba4c
--- /dev/null
+++ b/ui/static/css/testing.css
@@ -0,0 +1,2 @@
+body{color:#000;font-family:Open Sans,sans-serif}.container{width:300px;height:300px;background-color:grey}.container .box{display:none;padding:1em;background-color:red;color:#fff;width:50%}.container:hover .box{display:block}
+/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Njc3MvdGVzdGluZy5zY3NzIiwiLi4vLi4vdGVzdGluZy5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsS0FDSSxXQUFBLGdDQUNBLENBR0osV0FDSSxZQUFBLGFBQ0EscUJBQ0EsQ0FFQSxnQkFDSSxhQUFBLFlBQ0EscUJBQ0EsV0FDQSxTQUNBLENBSUEsc0JBQU0sYUFBQSxDQ0RiIiwiZmlsZSI6Ii4uL3Rlc3RpbmcuY3NzIiwic291cmNlc0NvbnRlbnQiOltudWxsLCJib2R5IHtcbiAgY29sb3I6IGJsYWNrO1xuICBmb250LWZhbWlseTogXCJPcGVuIFNhbnNcIiwgc2Fucy1zZXJpZjtcbn1cblxuLmNvbnRhaW5lciB7XG4gIHdpZHRoOiAzMDBweDtcbiAgaGVpZ2h0OiAzMDBweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogZ3JleTtcbn1cbi5jb250YWluZXIgLmJveCB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIHBhZGRpbmc6IDFlbTtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmVkO1xuICBjb2xvcjogd2hpdGU7XG4gIHdpZHRoOiA1MCU7XG59XG4uY29udGFpbmVyOmhvdmVyIC5ib3gge1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuLyojIHNvdXJjZU1hcHBpbmdVUkw9dGVzdGluZy5jc3MubWFwICovXG4iXX0= */
\ No newline at end of file
diff --git a/ui/static/css/testing.css.map b/ui/static/css/testing.css.map
new file mode 100644
index 0000000..8c3d260
--- /dev/null
+++ b/ui/static/css/testing.css.map
@@ -0,0 +1 @@
+{"version":3,"sourceRoot":"","sources":["../scss/testing.scss"],"names":[],"mappings":"AACA;EACI;EACA;;;AAGJ;EACI;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;;AAIA;EAAM","file":"testing.css"}
\ No newline at end of file
diff --git a/ui/static/img/beacon_project.png b/ui/static/img/beacon_project.png
new file mode 100644
index 0000000..57ee43e
Binary files /dev/null and b/ui/static/img/beacon_project.png differ
diff --git a/ui/static/img/beacon_project_small.png b/ui/static/img/beacon_project_small.png
new file mode 100644
index 0000000..26d5ad7
Binary files /dev/null and b/ui/static/img/beacon_project_small.png differ
diff --git a/ui/static/img/eu-flag.jpg b/ui/static/img/eu-flag.jpg
new file mode 100644
index 0000000..0ab7d38
Binary files /dev/null and b/ui/static/img/eu-flag.jpg differ
diff --git a/ui/static/img/logo.png b/ui/static/img/logo.png
new file mode 100644
index 0000000..26d5ad7
Binary files /dev/null and b/ui/static/img/logo.png differ
diff --git a/ui/static/js/access_levels.js b/ui/static/js/access_levels.js
new file mode 100644
index 0000000..c0cc691
--- /dev/null
+++ b/ui/static/js/access_levels.js
@@ -0,0 +1,17 @@
+(function(){ // scoping
+
+ var fieldsParam = $( "#fields-param" ),
+ datasetsParam = $( "#datasets-param" );
+
+ var reloadParams = function(){
+ var url_params =
+ '?'+ fieldsParam.attr('data-param') +'=' + ((fieldsParam.prop('checked'))?'true':'false') +
+ '&'+ datasetsParam.attr('data-param') +'=' + ((datasetsParam.prop('checked'))?'true':'false');
+ var loc = '//' + location.host + location.pathname;
+ window.location.href = loc + url_params;
+ }
+
+ fieldsParam.on('change', reloadParams);
+ datasetsParam.on('change', reloadParams);
+
+})();
diff --git a/ui/static/js/beacon.js b/ui/static/js/beacon.js
new file mode 100644
index 0000000..e2488ef
--- /dev/null
+++ b/ui/static/js/beacon.js
@@ -0,0 +1,129 @@
+(function(){ // scoping
+
+ // ----------------------------------------------
+ // Cookie disclaimer
+ // ----------------------------------------------
+ var cookiePane = document.querySelector('#beacon-cookies'),
+ cookieButton = null;
+ if(cookiePane)
+ cookieButton = cookiePane.querySelector('button');
+ if(cookiePane && cookieButton)
+ cookieButton.addEventListener('click', function(){
+ var expires = new Date(new Date().setFullYear(new Date().getFullYear() + 1)); // JS is so shitty
+ document.cookie = "beacon=consent;path=/;expires="+expires.toGMTString();
+ cookiePane.setAttribute("class", 'hide-me'); // set to 1s
+ setTimeout(function(){ cookiePane.remove(); }, 1100);
+ return false;
+ });
+
+
+ // Click/Toggle sidebar panel
+ $( ".trigger" ).click(function() {
+ $( this ).parent('div').toggleClass( "open" );
+ });
+
+ // ----------------------------------------------
+ // Filters
+ // ----------------------------------------------
+ var filters = $( "#query-filters" );
+
+ // Utilities
+ if(typeof(String.prototype.trim)==="undefined"){String.prototype.trim=function(){return String(this).replace(/^\s+|\s+$/g,'');};}
+
+ var make_autocomplete = function(el){
+ el.autocomplete({
+ minLength: 0
+ , delay: 300
+ , source: function (request, response) {
+
+ var term = request.term;
+ if(term.length >= 2){
+ var url = "/terms/" + term;
+ //console.log(url);
+ $.get(url, response);
+ }
+ }
+ , focus: function() {
+ // prevent value inserted on focus
+ return false;
+ }
+ // , _renderItem: function( ul, item ){
+ // return $( "" )
+ // .attr( "data-value", item.value )
+ // .append( item.label )
+ // .appendTo( ul );
+ // }
+ , select: function( event, ui ) {
+ el.val(ui.item.value);
+ // Delete spans from parent
+ el.parent().find("span").remove();
+ $( "" ).html(ui.item.label).insertBefore(el);
+ el.focus();
+ }
+ });
+ }
+
+ filters.delegate( ".filter-add", "click", function() {
+
+ var button = $(' ');
+ button
+ .addClass("filter-remove")
+ .addClass("fas")
+ .addClass("fa-minus-circle");
+
+ var input = $(' ', {
+ "type": "text",
+ "value": "",
+ "placeholder": "HP:0011007>=49 or PATO:0000383 or EFO:0009656",
+ "name": "filters" ,
+ "data-lpignore": "true"
+ });
+
+ var section = $('');
+
+ section.append(input);
+ section.append(button);
+ filters.append(section);
+ make_autocomplete(input);
+ input.focus();
+
+ });
+
+ filters.delegate( ".filter-remove", "click", function() {
+ $( this ).parent('section').remove();
+ });
+
+
+ // Autocomplete for the already present one
+ filters.find('input').each(function(){ make_autocomplete($(this)); });
+
+ // ----------------------------------------------
+ // Datasets
+ // ----------------------------------------------
+ var datasets = $( "#query-datasets" );
+ var datasetsSelectors = datasets.find( "input:not([disabled])" ); // enough
+ $("#datasets-header").delegate( "span", "click", function() {
+ var content = $( this ).text();
+ if( content == 'All' ){
+ datasetsSelectors.prop('checked', true);
+ }
+ if( content == 'None' ){
+ datasetsSelectors.prop('checked', false);
+ }
+ });
+
+
+
+
+ // ----------------------------------------------
+ // Escape key to close the API popups
+ // ----------------------------------------------
+ $(document).keyup(function(e) {
+ //console.log('Key Code', e.keyCode);
+ if (e.keyCode == 27) { // escape
+ $('#beacon-response-trigger').prop('checked', false);
+ $('#beacon-request-trigger').prop('checked', false);
+ }
+ });
+
+})();
diff --git a/ui/static/js/history.js b/ui/static/js/history.js
new file mode 100644
index 0000000..7e123f8
--- /dev/null
+++ b/ui/static/js/history.js
@@ -0,0 +1,87 @@
+(function(){ // scoping
+
+ // Check support for localStorage
+ try { localStorage.setItem('somekey', 'somevalue'); localStorage.removeItem('somekey'); }
+ catch (e) { return ; } // unsupported: exit
+
+
+ var key = 'beacon-history';
+
+ // localStorage handles only strings: Convert to Array with JSON
+ var history_items = JSON.parse(localStorage.getItem(key)) || [];
+
+ // console.log("History so far", history_items);
+
+ // If we have a response, append to history
+ var response = document.querySelector('#response-history');
+
+ // var form = document.querySelector('form#query');
+ // var main = document.querySelector('body#response main');
+ // var footer = document.querySelector('body#response footer');
+ var body = document.querySelector('body'),
+ form = document.querySelector('body > form'),
+ main = document.querySelector('body > main'),
+ footer = document.querySelector('body > footer');
+
+ if (response){
+ var thumbnail = response.cloneNode(true); // deep
+
+ if(form && main && footer){
+ thumbnail.removeAttribute('id');
+ history_items.push([form.outerHTML,main.outerHTML,thumbnail.outerHTML,footer.outerHTML]);
+ // console.log("Appending to history");
+ localStorage.setItem(key, JSON.stringify(history_items));
+ }
+ }
+
+ // If we do have some history to render
+ var count = history_items.length;
+ if ( count > 0 ){
+
+ // console.log("Rendering history", count);
+ var container = $('');
+ // console.log(container);
+
+ while(count--){ // read count then decrement
+ var thumb_html = history_items[count][2]; // just the thumbnail
+ // Convert to JQuery and append
+ //$(thumb_html).appendTo(container)
+ var t = $(thumb_html);
+ t.attr('data-pos', count);
+ t.appendTo(container);
+ }
+
+ var clear_history = $('Clear History ');
+ clear_history.on('click', function(){
+ localStorage.removeItem(key);
+ $('aside').remove();
+ });
+ clear_history.appendTo(container);
+
+ container.appendTo('body');
+
+
+ // Reloading an item
+ container.delegate("section h2 i", "click", function() {
+ var pos = $( this ).parents('section').attr('data-pos');
+ //console.log("position", pos);
+ var [form_html, main_html, thumb_html, footer_html] = history_items[pos];
+ body.setAttribute('id','response');
+ form.outerHTML = form_html;
+ main.outerHTML = main_html;
+ footer.outerHTML = footer_html;
+ //console.log("Repainting");
+ //console.log(history_items[pos]);
+
+ // outerHTML knocked the elements out
+ // need to re-find them
+ form = document.querySelector('body > form');
+ main = document.querySelector('body > main');
+ footer = document.querySelector('body > footer');
+
+ return false;
+ });
+
+ }
+
+})();
diff --git a/ui/static/js/jquery.min.js b/ui/static/js/jquery.min.js
new file mode 100644
index 0000000..4d9b3a2
--- /dev/null
+++ b/ui/static/js/jquery.min.js
@@ -0,0 +1,2 @@
+/*! jQuery v3.3.1 | (c) JS Foundation and other contributors | jquery.org/license */
+!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){"use strict";var n=[],r=e.document,i=Object.getPrototypeOf,o=n.slice,a=n.concat,s=n.push,u=n.indexOf,l={},c=l.toString,f=l.hasOwnProperty,p=f.toString,d=p.call(Object),h={},g=function e(t){return"function"==typeof t&&"number"!=typeof t.nodeType},y=function e(t){return null!=t&&t===t.window},v={type:!0,src:!0,noModule:!0};function m(e,t,n){var i,o=(t=t||r).createElement("script");if(o.text=e,n)for(i in v)n[i]&&(o[i]=n[i]);t.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[c.call(e)]||"object":typeof e}var b="3.3.1",w=function(e,t){return new w.fn.init(e,t)},T=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;w.fn=w.prototype={jquery:"3.3.1",constructor:w,length:0,toArray:function(){return o.call(this)},get:function(e){return null==e?o.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=w.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return w.each(this,e)},map:function(e){return this.pushStack(w.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(o.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n0&&t-1 in e)}var E=function(e){var t,n,r,i,o,a,s,u,l,c,f,p,d,h,g,y,v,m,x,b="sizzle"+1*new Date,w=e.document,T=0,C=0,E=ae(),k=ae(),S=ae(),D=function(e,t){return e===t&&(f=!0),0},N={}.hasOwnProperty,A=[],j=A.pop,q=A.push,L=A.push,H=A.slice,O=function(e,t){for(var n=0,r=e.length;n+~]|"+M+")"+M+"*"),z=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),X=new RegExp(W),U=new RegExp("^"+R+"$"),V={ID:new RegExp("^#("+R+")"),CLASS:new RegExp("^\\.("+R+")"),TAG:new RegExp("^("+R+"|[*])"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+W),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+P+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},G=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Q=/^[^{]+\{\s*\[native \w/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,K=/[+~]/,Z=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ee=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},te=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ne=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},re=function(){p()},ie=me(function(e){return!0===e.disabled&&("form"in e||"label"in e)},{dir:"parentNode",next:"legend"});try{L.apply(A=H.call(w.childNodes),w.childNodes),A[w.childNodes.length].nodeType}catch(e){L={apply:A.length?function(e,t){q.apply(e,H.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function oe(e,t,r,i){var o,s,l,c,f,h,v,m=t&&t.ownerDocument,T=t?t.nodeType:9;if(r=r||[],"string"!=typeof e||!e||1!==T&&9!==T&&11!==T)return r;if(!i&&((t?t.ownerDocument||t:w)!==d&&p(t),t=t||d,g)){if(11!==T&&(f=J.exec(e)))if(o=f[1]){if(9===T){if(!(l=t.getElementById(o)))return r;if(l.id===o)return r.push(l),r}else if(m&&(l=m.getElementById(o))&&x(t,l)&&l.id===o)return r.push(l),r}else{if(f[2])return L.apply(r,t.getElementsByTagName(e)),r;if((o=f[3])&&n.getElementsByClassName&&t.getElementsByClassName)return L.apply(r,t.getElementsByClassName(o)),r}if(n.qsa&&!S[e+" "]&&(!y||!y.test(e))){if(1!==T)m=t,v=e;else if("object"!==t.nodeName.toLowerCase()){(c=t.getAttribute("id"))?c=c.replace(te,ne):t.setAttribute("id",c=b),s=(h=a(e)).length;while(s--)h[s]="#"+c+" "+ve(h[s]);v=h.join(","),m=K.test(e)&&ge(t.parentNode)||t}if(v)try{return L.apply(r,m.querySelectorAll(v)),r}catch(e){}finally{c===b&&t.removeAttribute("id")}}}return u(e.replace(B,"$1"),t,r,i)}function ae(){var e=[];function t(n,i){return e.push(n+" ")>r.cacheLength&&delete t[e.shift()],t[n+" "]=i}return t}function se(e){return e[b]=!0,e}function ue(e){var t=d.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function le(e,t){var n=e.split("|"),i=n.length;while(i--)r.attrHandle[n[i]]=t}function ce(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function fe(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function pe(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function de(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&ie(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function he(e){return se(function(t){return t=+t,se(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function ge(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}n=oe.support={},o=oe.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},p=oe.setDocument=function(e){var t,i,a=e?e.ownerDocument||e:w;return a!==d&&9===a.nodeType&&a.documentElement?(d=a,h=d.documentElement,g=!o(d),w!==d&&(i=d.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener("unload",re,!1):i.attachEvent&&i.attachEvent("onunload",re)),n.attributes=ue(function(e){return e.className="i",!e.getAttribute("className")}),n.getElementsByTagName=ue(function(e){return e.appendChild(d.createComment("")),!e.getElementsByTagName("*").length}),n.getElementsByClassName=Q.test(d.getElementsByClassName),n.getById=ue(function(e){return h.appendChild(e).id=b,!d.getElementsByName||!d.getElementsByName(b).length}),n.getById?(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){return e.getAttribute("id")===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n=t.getElementById(e);return n?[n]:[]}}):(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){var n="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),r.find.TAG=n.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},r.find.CLASS=n.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&g)return t.getElementsByClassName(e)},v=[],y=[],(n.qsa=Q.test(d.querySelectorAll))&&(ue(function(e){h.appendChild(e).innerHTML=" ",e.querySelectorAll("[msallowcapture^='']").length&&y.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||y.push("\\["+M+"*(?:value|"+P+")"),e.querySelectorAll("[id~="+b+"-]").length||y.push("~="),e.querySelectorAll(":checked").length||y.push(":checked"),e.querySelectorAll("a#"+b+"+*").length||y.push(".#.+[+~]")}),ue(function(e){e.innerHTML=" ";var t=d.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&y.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&y.push(":enabled",":disabled"),h.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&y.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),y.push(",.*:")})),(n.matchesSelector=Q.test(m=h.matches||h.webkitMatchesSelector||h.mozMatchesSelector||h.oMatchesSelector||h.msMatchesSelector))&&ue(function(e){n.disconnectedMatch=m.call(e,"*"),m.call(e,"[s!='']:x"),v.push("!=",W)}),y=y.length&&new RegExp(y.join("|")),v=v.length&&new RegExp(v.join("|")),t=Q.test(h.compareDocumentPosition),x=t||Q.test(h.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return f=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===r?e===d||e.ownerDocument===w&&x(w,e)?-1:t===d||t.ownerDocument===w&&x(w,t)?1:c?O(c,e)-O(c,t):0:4&r?-1:1)}:function(e,t){if(e===t)return f=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===d?-1:t===d?1:i?-1:o?1:c?O(c,e)-O(c,t):0;if(i===o)return ce(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?ce(a[r],s[r]):a[r]===w?-1:s[r]===w?1:0},d):d},oe.matches=function(e,t){return oe(e,null,null,t)},oe.matchesSelector=function(e,t){if((e.ownerDocument||e)!==d&&p(e),t=t.replace(z,"='$1']"),n.matchesSelector&&g&&!S[t+" "]&&(!v||!v.test(t))&&(!y||!y.test(t)))try{var r=m.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return oe(t,d,null,[e]).length>0},oe.contains=function(e,t){return(e.ownerDocument||e)!==d&&p(e),x(e,t)},oe.attr=function(e,t){(e.ownerDocument||e)!==d&&p(e);var i=r.attrHandle[t.toLowerCase()],o=i&&N.call(r.attrHandle,t.toLowerCase())?i(e,t,!g):void 0;return void 0!==o?o:n.attributes||!g?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null},oe.escape=function(e){return(e+"").replace(te,ne)},oe.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},oe.uniqueSort=function(e){var t,r=[],i=0,o=0;if(f=!n.detectDuplicates,c=!n.sortStable&&e.slice(0),e.sort(D),f){while(t=e[o++])t===e[o]&&(i=r.push(o));while(i--)e.splice(r[i],1)}return c=null,e},i=oe.getText=function(e){var t,n="",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=i(e)}else if(3===o||4===o)return e.nodeValue}else while(t=e[r++])n+=i(t);return n},(r=oe.selectors={cacheLength:50,createPseudo:se,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(Z,ee),e[3]=(e[3]||e[4]||e[5]||"").replace(Z,ee),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||oe.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&oe.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return V.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=a(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(Z,ee).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=E[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&E(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=oe.attr(r,e);return null==i?"!="===t:!t||(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i.replace($," ")+" ").indexOf(n)>-1:"|="===t&&(i===n||i.slice(0,n.length+1)===n+"-"))}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,p,d,h,g=o!==a?"nextSibling":"previousSibling",y=t.parentNode,v=s&&t.nodeName.toLowerCase(),m=!u&&!s,x=!1;if(y){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===v:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?y.firstChild:y.lastChild],a&&m){x=(d=(l=(c=(f=(p=y)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1])&&l[2],p=d&&y.childNodes[d];while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if(1===p.nodeType&&++x&&p===t){c[e]=[T,d,x];break}}else if(m&&(x=d=(l=(c=(f=(p=t)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1]),!1===x)while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===v:1===p.nodeType)&&++x&&(m&&((c=(f=p[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]=[T,x]),p===t))break;return(x-=i)===r||x%r==0&&x/r>=0}}},PSEUDO:function(e,t){var n,i=r.pseudos[e]||r.setFilters[e.toLowerCase()]||oe.error("unsupported pseudo: "+e);return i[b]?i(t):i.length>1?(n=[e,e,"",t],r.setFilters.hasOwnProperty(e.toLowerCase())?se(function(e,n){var r,o=i(e,t),a=o.length;while(a--)e[r=O(e,o[a])]=!(n[r]=o[a])}):function(e){return i(e,0,n)}):i}},pseudos:{not:se(function(e){var t=[],n=[],r=s(e.replace(B,"$1"));return r[b]?se(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),t[0]=null,!n.pop()}}),has:se(function(e){return function(t){return oe(e,t).length>0}}),contains:se(function(e){return e=e.replace(Z,ee),function(t){return(t.textContent||t.innerText||i(t)).indexOf(e)>-1}}),lang:se(function(e){return U.test(e||"")||oe.error("unsupported lang: "+e),e=e.replace(Z,ee).toLowerCase(),function(t){var n;do{if(n=g?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===h},focus:function(e){return e===d.activeElement&&(!d.hasFocus||d.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:de(!1),disabled:de(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return Y.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:he(function(){return[0]}),last:he(function(e,t){return[t-1]}),eq:he(function(e,t,n){return[n<0?n+t:n]}),even:he(function(e,t){for(var n=0;n=0;)e.push(r);return e}),gt:he(function(e,t,n){for(var r=n<0?n+t:n;++r1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function be(e,t,n){for(var r=0,i=t.length;r-1&&(o[l]=!(a[l]=f))}}else v=we(v===a?v.splice(h,v.length):v),i?i(null,a,v,u):L.apply(a,v)})}function Ce(e){for(var t,n,i,o=e.length,a=r.relative[e[0].type],s=a||r.relative[" "],u=a?1:0,c=me(function(e){return e===t},s,!0),f=me(function(e){return O(t,e)>-1},s,!0),p=[function(e,n,r){var i=!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):f(e,n,r));return t=null,i}];u1&&xe(p),u>1&&ve(e.slice(0,u-1).concat({value:" "===e[u-2].type?"*":""})).replace(B,"$1"),n,u0,i=e.length>0,o=function(o,a,s,u,c){var f,h,y,v=0,m="0",x=o&&[],b=[],w=l,C=o||i&&r.find.TAG("*",c),E=T+=null==w?1:Math.random()||.1,k=C.length;for(c&&(l=a===d||a||c);m!==k&&null!=(f=C[m]);m++){if(i&&f){h=0,a||f.ownerDocument===d||(p(f),s=!g);while(y=e[h++])if(y(f,a||d,s)){u.push(f);break}c&&(T=E)}n&&((f=!y&&f)&&v--,o&&x.push(f))}if(v+=m,n&&m!==v){h=0;while(y=t[h++])y(x,b,a,s);if(o){if(v>0)while(m--)x[m]||b[m]||(b[m]=j.call(u));b=we(b)}L.apply(u,b),c&&!o&&b.length>0&&v+t.length>1&&oe.uniqueSort(u)}return c&&(T=E,l=w),x};return n?se(o):o}return s=oe.compile=function(e,t){var n,r=[],i=[],o=S[e+" "];if(!o){t||(t=a(e)),n=t.length;while(n--)(o=Ce(t[n]))[b]?r.push(o):i.push(o);(o=S(e,Ee(i,r))).selector=e}return o},u=oe.select=function(e,t,n,i){var o,u,l,c,f,p="function"==typeof e&&e,d=!i&&a(e=p.selector||e);if(n=n||[],1===d.length){if((u=d[0]=d[0].slice(0)).length>2&&"ID"===(l=u[0]).type&&9===t.nodeType&&g&&r.relative[u[1].type]){if(!(t=(r.find.ID(l.matches[0].replace(Z,ee),t)||[])[0]))return n;p&&(t=t.parentNode),e=e.slice(u.shift().value.length)}o=V.needsContext.test(e)?0:u.length;while(o--){if(l=u[o],r.relative[c=l.type])break;if((f=r.find[c])&&(i=f(l.matches[0].replace(Z,ee),K.test(u[0].type)&&ge(t.parentNode)||t))){if(u.splice(o,1),!(e=i.length&&ve(u)))return L.apply(n,i),n;break}}}return(p||s(e,d))(i,t,!g,n,!t||K.test(e)&&ge(t.parentNode)||t),n},n.sortStable=b.split("").sort(D).join("")===b,n.detectDuplicates=!!f,p(),n.sortDetached=ue(function(e){return 1&e.compareDocumentPosition(d.createElement("fieldset"))}),ue(function(e){return e.innerHTML=" ","#"===e.firstChild.getAttribute("href")})||le("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),n.attributes&&ue(function(e){return e.innerHTML=" ",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||le("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ue(function(e){return null==e.getAttribute("disabled")})||le(P,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),oe}(e);w.find=E,w.expr=E.selectors,w.expr[":"]=w.expr.pseudos,w.uniqueSort=w.unique=E.uniqueSort,w.text=E.getText,w.isXMLDoc=E.isXML,w.contains=E.contains,w.escapeSelector=E.escape;var k=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&w(e).is(n))break;r.push(e)}return r},S=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},D=w.expr.match.needsContext;function N(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var A=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,t,n){return g(t)?w.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?w.grep(e,function(e){return e===t!==n}):"string"!=typeof t?w.grep(e,function(e){return u.call(t,e)>-1!==n}):w.filter(t,e,n)}w.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?w.find.matchesSelector(r,e)?[r]:[]:w.find.matches(e,w.grep(t,function(e){return 1===e.nodeType}))},w.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(w(e).filter(function(){for(t=0;t1?w.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&D.test(e)?w(e):e||[],!1).length}});var q,L=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(w.fn.init=function(e,t,n){var i,o;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(i="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:L.exec(e))||!i[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(i[1]){if(t=t instanceof w?t[0]:t,w.merge(this,w.parseHTML(i[1],t&&t.nodeType?t.ownerDocument||t:r,!0)),A.test(i[1])&&w.isPlainObject(t))for(i in t)g(this[i])?this[i](t[i]):this.attr(i,t[i]);return this}return(o=r.getElementById(i[2]))&&(this[0]=o,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):g(e)?void 0!==n.ready?n.ready(e):e(w):w.makeArray(e,this)}).prototype=w.fn,q=w(r);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};w.fn.extend({has:function(e){var t=w(e,this),n=t.length;return this.filter(function(){for(var e=0;e-1:1===n.nodeType&&w.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?w.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?u.call(w(e),this[0]):u.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(w.uniqueSort(w.merge(this.get(),w(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}w.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return k(e,"parentNode")},parentsUntil:function(e,t,n){return k(e,"parentNode",n)},next:function(e){return P(e,"nextSibling")},prev:function(e){return P(e,"previousSibling")},nextAll:function(e){return k(e,"nextSibling")},prevAll:function(e){return k(e,"previousSibling")},nextUntil:function(e,t,n){return k(e,"nextSibling",n)},prevUntil:function(e,t,n){return k(e,"previousSibling",n)},siblings:function(e){return S((e.parentNode||{}).firstChild,e)},children:function(e){return S(e.firstChild)},contents:function(e){return N(e,"iframe")?e.contentDocument:(N(e,"template")&&(e=e.content||e),w.merge([],e.childNodes))}},function(e,t){w.fn[e]=function(n,r){var i=w.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=w.filter(r,i)),this.length>1&&(O[e]||w.uniqueSort(i),H.test(e)&&i.reverse()),this.pushStack(i)}});var M=/[^\x20\t\r\n\f]+/g;function R(e){var t={};return w.each(e.match(M)||[],function(e,n){t[n]=!0}),t}w.Callbacks=function(e){e="string"==typeof e?R(e):w.extend({},e);var t,n,r,i,o=[],a=[],s=-1,u=function(){for(i=i||e.once,r=t=!0;a.length;s=-1){n=a.shift();while(++s-1)o.splice(n,1),n<=s&&s--}),this},has:function(e){return e?w.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=a=[],o=n="",this},disabled:function(){return!o},lock:function(){return i=a=[],n||t||(o=n=""),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=[e,(n=n||[]).slice?n.slice():n],a.push(n),t||u()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l};function I(e){return e}function W(e){throw e}function $(e,t,n,r){var i;try{e&&g(i=e.promise)?i.call(e).done(t).fail(n):e&&g(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}w.extend({Deferred:function(t){var n=[["notify","progress",w.Callbacks("memory"),w.Callbacks("memory"),2],["resolve","done",w.Callbacks("once memory"),w.Callbacks("once memory"),0,"resolved"],["reject","fail",w.Callbacks("once memory"),w.Callbacks("once memory"),1,"rejected"]],r="pending",i={state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},"catch":function(e){return i.then(null,e)},pipe:function(){var e=arguments;return w.Deferred(function(t){w.each(n,function(n,r){var i=g(e[r[4]])&&e[r[4]];o[r[1]](function(){var e=i&&i.apply(this,arguments);e&&g(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+"With"](this,i?[e]:arguments)})}),e=null}).promise()},then:function(t,r,i){var o=0;function a(t,n,r,i){return function(){var s=this,u=arguments,l=function(){var e,l;if(!(t=o&&(r!==W&&(s=void 0,u=[e]),n.rejectWith(s,u))}};t?c():(w.Deferred.getStackHook&&(c.stackTrace=w.Deferred.getStackHook()),e.setTimeout(c))}}return w.Deferred(function(e){n[0][3].add(a(0,e,g(i)?i:I,e.notifyWith)),n[1][3].add(a(0,e,g(t)?t:I)),n[2][3].add(a(0,e,g(r)?r:W))}).promise()},promise:function(e){return null!=e?w.extend(e,i):i}},o={};return w.each(n,function(e,t){var a=t[2],s=t[5];i[t[1]]=a.add,s&&a.add(function(){r=s},n[3-e][2].disable,n[3-e][3].disable,n[0][2].lock,n[0][3].lock),a.add(t[3].fire),o[t[0]]=function(){return o[t[0]+"With"](this===o?void 0:this,arguments),this},o[t[0]+"With"]=a.fireWith}),i.promise(o),t&&t.call(o,o),o},when:function(e){var t=arguments.length,n=t,r=Array(n),i=o.call(arguments),a=w.Deferred(),s=function(e){return function(n){r[e]=this,i[e]=arguments.length>1?o.call(arguments):n,--t||a.resolveWith(r,i)}};if(t<=1&&($(e,a.done(s(n)).resolve,a.reject,!t),"pending"===a.state()||g(i[n]&&i[n].then)))return a.then();while(n--)$(i[n],s(n),a.reject);return a.promise()}});var B=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;w.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&B.test(t.name)&&e.console.warn("jQuery.Deferred exception: "+t.message,t.stack,n)},w.readyException=function(t){e.setTimeout(function(){throw t})};var F=w.Deferred();w.fn.ready=function(e){return F.then(e)["catch"](function(e){w.readyException(e)}),this},w.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--w.readyWait:w.isReady)||(w.isReady=!0,!0!==e&&--w.readyWait>0||F.resolveWith(r,[w]))}}),w.ready.then=F.then;function _(){r.removeEventListener("DOMContentLoaded",_),e.removeEventListener("load",_),w.ready()}"complete"===r.readyState||"loading"!==r.readyState&&!r.documentElement.doScroll?e.setTimeout(w.ready):(r.addEventListener("DOMContentLoaded",_),e.addEventListener("load",_));var z=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===x(n)){i=!0;for(s in n)z(e,t,s,n[s],!0,o,a)}else if(void 0!==r&&(i=!0,g(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(w(e),n)})),t))for(;s1,null,!0)},removeData:function(e){return this.each(function(){K.remove(this,e)})}}),w.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=J.get(e,t),n&&(!r||Array.isArray(n)?r=J.access(e,t,w.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=w.queue(e,t),r=n.length,i=n.shift(),o=w._queueHooks(e,t),a=function(){w.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return J.get(e,n)||J.access(e,n,{empty:w.Callbacks("once memory").add(function(){J.remove(e,[t+"queue",n])})})}}),w.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length\x20\t\r\n\f]+)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""," "],thead:[1,""],col:[2,""],tr:[2,""],td:[3,""],_default:[0,"",""]};ge.optgroup=ge.option,ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td;function ye(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&N(e,t)?w.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n-1)i&&i.push(o);else if(l=w.contains(o.ownerDocument,o),a=ye(f.appendChild(o),"script"),l&&ve(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}!function(){var e=r.createDocumentFragment().appendChild(r.createElement("div")),t=r.createElement("input");t.setAttribute("type","radio"),t.setAttribute("checked","checked"),t.setAttribute("name","t"),e.appendChild(t),h.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,e.innerHTML="",h.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue}();var be=r.documentElement,we=/^key/,Te=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ce=/^([^.]*)(?:\.(.+)|)/;function Ee(){return!0}function ke(){return!1}function Se(){try{return r.activeElement}catch(e){}}function De(e,t,n,r,i,o){var a,s;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(s in t)De(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=ke;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return w().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=w.guid++)),e.each(function(){w.event.add(this,t,i,r,n)})}w.event={global:{},add:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.get(e);if(y){n.handler&&(n=(o=n).handler,i=o.selector),i&&w.find.matchesSelector(be,i),n.guid||(n.guid=w.guid++),(u=y.events)||(u=y.events={}),(a=y.handle)||(a=y.handle=function(t){return"undefined"!=typeof w&&w.event.triggered!==t.type?w.event.dispatch.apply(e,arguments):void 0}),l=(t=(t||"").match(M)||[""]).length;while(l--)d=g=(s=Ce.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=w.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=w.event.special[d]||{},c=w.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&w.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(e,r,h,a)||e.addEventListener&&e.addEventListener(d,a)),f.add&&(f.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),w.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.hasData(e)&&J.get(e);if(y&&(u=y.events)){l=(t=(t||"").match(M)||[""]).length;while(l--)if(s=Ce.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){f=w.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,y.handle)||w.removeEvent(e,d,y.handle),delete u[d])}else for(d in u)w.event.remove(e,d+t[l],n,r,!0);w.isEmptyObject(u)&&J.remove(e,"handle events")}},dispatch:function(e){var t=w.event.fix(e),n,r,i,o,a,s,u=new Array(arguments.length),l=(J.get(this,"events")||{})[t.type]||[],c=w.event.special[t.type]||{};for(u[0]=t,n=1;n=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n-1:w.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u\x20\t\r\n\f]*)[^>]*)\/>/gi,Ae=/
+
+
+
+{% if messages %}{% endif %}
diff --git a/ui/templates/header.html b/ui/templates/header.html
new file mode 100755
index 0000000..2ebf791
--- /dev/null
+++ b/ui/templates/header.html
@@ -0,0 +1,15 @@
+
+
+
+
+ {{ conf.description|safe }}
+
+
+ {% if session.user %}
+
+ Logout
+ {% else %}
+ Login
+ {% endif %}
+
+
diff --git a/ui/templates/index.html b/ui/templates/index.html
new file mode 100755
index 0000000..2b6ab7b
--- /dev/null
+++ b/ui/templates/index.html
@@ -0,0 +1,264 @@
+
+
+
+
+
+ {{ conf.beacon_name }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {% include 'header.html' %}
+
+
+
+ Beacon v2 examples
+
+ Listings
+
+
+
+{# #}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Other formats
+
+
+ Querying
+
+
+ Permissions
+
+
+ Filters
+
+
+ Info
+
+
+ Other endpoints
+
+
+ {% if session.user %}
+
+ Beacon v2 authentication token
+ Hi, {{ session.user.name }}
+ Here is your access token:
+ {{ session.access_token }}
+ Keep it safe, it is just a temporary page to test the API
+ Use it like:
+ curl {{request.url}}api -H 'Authorization: Bearer {{ session.access_token}}'
+
+ {% endif %}
+
+
+
+ {% include 'footer.html' %}
+
+
+
diff --git a/ui/templates/privacy.html b/ui/templates/privacy.html
new file mode 100644
index 0000000..5d48dbf
--- /dev/null
+++ b/ui/templates/privacy.html
@@ -0,0 +1,71 @@
+
+
+
+
+
+ {{ conf.beacon_name }} | Privacy
+
+
+
+
+
+
+
+
+
+
+
+ {% include 'header.html' %}
+
+
+
+ {{ request.host }}:{{ request.port }} does not identify users on this site.
+ It does use cookies, though.
+
+
+ What is a cookie?
+
+
+ Cookies are text files containing small amounts of information
+ which are downloaded to your device when you visit a website.
+
+ They allow a website to remember your preferences and are
+ therefore useful to improve your online experience.
+
+ Find out more
+ information about cookies .
+
+
+ Types of cookies we use
+
+ Functional
+
+ These cookies record the columns you wish to display or hide in the results page.
+
Performance
+
+
+ These cookies are used to analyse trends, administer the
+ website, track visitor movements and gather broad demographic
+ information for aggregate use.
+
+ We use the information to compile reports and to help us
+ improve our websites.
+
+ These cookies are not linked to personally identifiable
+ information.
+
+
+ Session cookie
+
+
+ A session cookie for a website only exists whilst the user is reading
+ or navigating the website. When the user closes their web browser
+ these cookies are usually removed.
+
+
+
+ {% include "footer.html" %}
+
+
diff --git a/ui/templates/testing.html b/ui/templates/testing.html
new file mode 100644
index 0000000..267ec28
--- /dev/null
+++ b/ui/templates/testing.html
@@ -0,0 +1,124 @@
+{% load static %}
+
+
+
+
+
+
+
+
+
+
+
+
+ Testing
+
+
+
+ Hello World!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+