diff --git a/.gitignore b/.gitignore index fc095f5ef..0013e9542 100644 --- a/.gitignore +++ b/.gitignore @@ -3,12 +3,14 @@ __pycache__/ *.py[cod] *$py.class +.pytest_cache/ +.DS_Store + # C extensions *.so # Nodejs node_modules/ -yarn.lock # Distribution / packaging .Python @@ -101,6 +103,7 @@ solr-4.10.2/ postgres-data/ data/ solr-*/ +dev-webpack-stats.json # ignora tudo dentro de media, mas cria a pasta no checkout media/* diff --git a/.travis.yml b/.travis.yml index 80532c789..f9ef2fe97 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,7 @@ language: python python: - - 3.5 + - 3.7 services: - postgresql diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 2f2fe688b..000000000 --- a/Dockerfile +++ /dev/null @@ -1,51 +0,0 @@ -FROM alpine:3.10 - -ENV BUILD_PACKAGES postgresql-dev graphviz-dev graphviz build-base git pkgconfig \ - python3-dev libxml2-dev jpeg-dev libressl-dev libffi-dev libxslt-dev \ - nodejs py3-lxml py3-magic postgresql-client poppler-utils antiword \ - curl jq openssh-client vim bash postgresql-client cairo-dev - -RUN apk update --update-cache && apk upgrade - -RUN apk --update add fontconfig ttf-dejavu && fc-cache -fv - -RUN apk add --no-cache python3 nginx tzdata && \ - python3 -m ensurepip && \ - rm -r /usr/lib/python*/ensurepip && \ - pip3 install --upgrade pip setuptools && \ - pip3 install wheel && \ - rm -r /root/.cache && \ - rm -f /etc/nginx/conf.d/* - -RUN mkdir -p /var/interlegis/sapl && \ - apk add --update --no-cache $BUILD_PACKAGES - -WORKDIR /var/interlegis/sapl/ - -ADD . /var/interlegis/sapl/ - -COPY start.sh /var/interlegis/sapl/ -COPY config/nginx/sapl.conf /etc/nginx/conf.d -COPY config/nginx/nginx.conf /etc/nginx/nginx.conf - -RUN pip install -r /var/interlegis/sapl/requirements/dev-requirements.txt --upgrade setuptools && \ - rm -r /root/.cache - -COPY config/env_dockerfile /var/interlegis/sapl/sapl/.env - -RUN python3 manage.py collectstatic --noinput --clear - -# Remove .env(fake) e sapl.db da imagem -RUN rm -rf /var/interlegis/sapl/sapl/.env && \ - rm -rf /var/interlegis/sapl/sapl.db - -RUN chmod +x /var/interlegis/sapl/start.sh && \ - chmod +x /var/interlegis/sapl/check_solr.sh && \ - ln -sf /dev/stdout /var/log/nginx/access.log && \ - ln -sf /dev/stderr /var/log/nginx/error.log && \ - mkdir /var/log/sapl/ && touch /var/interlegis/sapl/sapl.log && \ - ln -s /var/interlegis/sapl/sapl.log /var/log/sapl/sapl.log - -VOLUME ["/var/interlegis/sapl/data", "/var/interlegis/sapl/media"] - -CMD ["/var/interlegis/sapl/start.sh"] diff --git a/README.rst b/README.rst index c2d47d643..349d8d5e4 100644 --- a/README.rst +++ b/README.rst @@ -15,6 +15,13 @@ Para obter mais informações sobre o projeto como um todo e a versão de trabal atual do sistema (2.5), visite a página do `projeto na Interlegis wiki `_. +**IMPORTANTE:** A partir da versão 3.1.162 do SAPL, as funcionalidades de recuperar senha, +acompanhamento de matéria, e acompanhamento de documento exigirão o uso do `Google reCaptcha `_. Cada casa legislativa será responsável pela geração +das chaves do reCaptcha e configuração no SAPL em Sistema -> Tabelas Auxiliares -> Configurações da Aplicação. +Sem essa configuração não serão habilitados os recursos citados anteriormente. +Veja mais detalhes sobre o processo de geração de chaves e configuração neste link https://www.youtube.com/watch?v=6ZCCyBjSJ-c +e no caderno de exercícios do SAPL 3.1 disponível na `Wiki do projeto `_ + Instalação do Ambiente de Desenvolvimento ========================================= `Instalação do Ambiente de Desenvolvimento `_ diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 000000000..69ef33de3 --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,72 @@ +FROM python:3.7-slim-buster + +# Setup env +ENV LANG C.UTF-8 +ENV LC_ALL C.UTF-8 +ENV PYTHONDONTWRITEBYTECODE 1 + +#ENV PYTHONFAULTHANDLER 1 + +ENV DEBIAN_FRONTEND noninteractive + +ENV BUILD_PACKAGES apt-utils apt-file libpq-dev graphviz-dev build-essential git pkg-config \ + python3-dev libxml2-dev libjpeg-dev libssl-dev libffi-dev libxslt1-dev \ + libcairo2-dev software-properties-common python3-setuptools python3-pip + +ENV RUN_PACKAGES graphviz python3-lxml python3-magic postgresql-client python3-psycopg2 \ + poppler-utils curl jq bash python3-venv tzdata nodejs \ + fontconfig ttf-dejavu python nginx + +RUN mkdir -p /var/interlegis/sapl + +WORKDIR /var/interlegis/sapl/ + +ADD . /var/interlegis/sapl/ + +RUN apt-get update && \ + apt-get upgrade -y && \ + apt-get install -y --no-install-recommends $BUILD_PACKAGES $RUN_PACKAGES && \ + fc-cache -fv && \ + pip3 install --no-cache-dir --upgrade pip setuptools && \ + rm -f /etc/nginx/conf.d/* && \ + pip install --no-cache-dir -r /var/interlegis/sapl/requirements/dev-requirements.txt --upgrade setuptools && \ + SUDO_FORCE_REMOVE=yes apt-get purge -y --auto-remove $BUILD_PACKAGES && \ + apt-get autoremove && apt-get clean && rm -rf /var/lib/apt/lists/* + +ENV HOME=/var/interlegis/sapl + +COPY docker/start.sh $HOME +COPY docker/check_solr.sh $HOME +COPY docker/solr_api.py $HOME +COPY docker/busy-wait.sh $HOME +COPY docker/create_admin.py $HOME +COPY docker/genkey.py $HOME +COPY docker/gunicorn_start.sh $HOME + +COPY docker/config/nginx/sapl.conf /etc/nginx/conf.d +COPY docker/config/nginx/nginx.conf /etc/nginx/nginx.conf +COPY docker/config/env_dockerfile /var/interlegis/sapl/sapl/.env + +RUN python3 manage.py collectstatic --noinput --clear + +# Remove .env(fake) e sapl.db da imagem +RUN rm -rf /var/interlegis/sapl/sapl/.env && \ + rm -rf /var/interlegis/sapl/sapl.db + +RUN chmod +x /var/interlegis/sapl/start.sh && \ + chmod +x /var/interlegis/sapl/check_solr.sh && \ + ln -sf /dev/stdout /var/log/nginx/access.log && \ + ln -sf /dev/stderr /var/log/nginx/error.log && \ + mkdir /var/log/sapl/ && touch /var/interlegis/sapl/sapl.log && \ + ln -s /var/interlegis/sapl/sapl.log /var/log/sapl/sapl.log + +# Debian não possui usuário 'nginx' necessário para o Debian +RUN useradd --no-create-home nginx + +ENV DEBIAN_FRONTEND teletype + +EXPOSE 80/tcp 443/tcp + +VOLUME ["/var/interlegis/sapl/data", "/var/interlegis/sapl/media"] + +CMD ["/var/interlegis/sapl/start.sh"] diff --git a/Dockerfile.dev b/docker/Dockerfile.dev similarity index 60% rename from Dockerfile.dev rename to docker/Dockerfile.dev index bac7d6f85..6b8514437 100644 --- a/Dockerfile.dev +++ b/docker/Dockerfile.dev @@ -1,8 +1,9 @@ -FROM python:3.7 +FROM python:3.6 ENV PYTHONUNBUFFERED 1 WORKDIR /sapl-dev -COPY requirements ./requirements/ +COPY ./requirements ./requirements/ RUN apt update && \ apt -y install graphviz-dev && \ + pip install --upgrade pip && \ pip install -r ./requirements/dev-requirements.txt -EXPOSE 8000 \ No newline at end of file +EXPOSE 8000 diff --git a/busy-wait.sh b/docker/busy-wait.sh similarity index 100% rename from busy-wait.sh rename to docker/busy-wait.sh diff --git a/check_solr.sh b/docker/check_solr.sh similarity index 100% rename from check_solr.sh rename to docker/check_solr.sh diff --git a/config/env-sample b/docker/config/env-sample similarity index 73% rename from config/env-sample rename to docker/config/env-sample index aeb8c38c4..1763499cc 100644 --- a/config/env-sample +++ b/docker/config/env-sample @@ -1,5 +1,5 @@ DATABASE_URL = postgresql://postgres:@sapldb:/sapl -KEY +SECRET_KEY = 'mzp++@i1y-6y8ez_=^sfbr!dzuyry#^@v(3g^2d1k9%f=+mhlb' DEBUG = False EMAIL_USE_TLS = True EMAIL_PORT = 587 diff --git a/config/env_dockerfile b/docker/config/env_dockerfile similarity index 71% rename from config/env_dockerfile rename to docker/config/env_dockerfile index 134beb274..4b564ee6c 100644 --- a/config/env_dockerfile +++ b/docker/config/env_dockerfile @@ -1,5 +1,5 @@ DATABASE_URL = sqlite:///sapl.db -SECRET_KEY = 'Dockerfile_Key' +SECRET_KEY = 'mzp++@i1y-6y8ez_=^sfbr!dzuyry#^@v(3g^2d1k9%f=+mhlb' DEBUG = False EMAIL_USE_TLS = True EMAIL_PORT = 587 diff --git a/docker/config/env_test b/docker/config/env_test new file mode 100644 index 000000000..ccb203867 --- /dev/null +++ b/docker/config/env_test @@ -0,0 +1,9 @@ +DATABASE_URL=postgresql://sapl:sapl@sapldb:/sapl +SECRET_KEY=test++@i1y-6y8ez_=^sfbr!dzuyry#^@v(3g^2d1k9%f=+mhlb +DEBUG=False +EMAIL_USE_TLS = True +EMAIL_PORT = 587 +EMAIL_HOST = '' +EMAIL_HOST_USER = '' +EMAIL_SEND_USER = '' +EMAIL_HOST_PASSWORD = '' diff --git a/config/nginx/nginx.conf b/docker/config/nginx/nginx.conf similarity index 66% rename from config/nginx/nginx.conf rename to docker/config/nginx/nginx.conf index cfea596f1..3037f3080 100644 --- a/config/nginx/nginx.conf +++ b/docker/config/nginx/nginx.conf @@ -25,7 +25,12 @@ http { keepalive_timeout 65; - #gzip on; + gzip on; + gzip_disable "MSIE [1-6]\\.(?!.*SV1)"; + gzip_proxied any; + gzip_comp_level 5; + gzip_types text/plain text/css text/javascript application/javascript application/x-javascript text/xml application/xml application/rss+xml image/gif image/png image/x-icon image/jpeg image/svg+xml; + gzip_vary on; include /etc/nginx/conf.d/*.conf; } diff --git a/config/nginx/sapl.conf b/docker/config/nginx/sapl.conf similarity index 100% rename from config/nginx/sapl.conf rename to docker/config/nginx/sapl.conf diff --git a/create_admin.py b/docker/create_admin.py similarity index 100% rename from create_admin.py rename to docker/create_admin.py diff --git a/docker-compose-dev.yml b/docker/docker-compose-dev-db.yml similarity index 85% rename from docker-compose-dev.yml rename to docker/docker-compose-dev-db.yml index 72f7b8fb5..15eb735fe 100644 --- a/docker-compose-dev.yml +++ b/docker/docker-compose-dev-db.yml @@ -17,11 +17,11 @@ services: container_name: sapl-dev image: sapl:dev build: - context: . - dockerfile: Dockerfile.dev + context: ../ + dockerfile: ./docker/Dockerfile.dev command: python3 manage.py runserver 0:8000 volumes: - - .:/sapl-dev + - ..:/sapl-dev ports: - "8000:8000" environment: @@ -29,12 +29,10 @@ services: DEBUG: 'True' DATABASE_URL: postgresql://sapl:sapl@sapldb-dev:5432/sapl TZ: America/Sao_Paulo - depends_on: - - sapldb-dev networks: - sapl-net-dev networks: sapl-net-dev: name: sapl-net-dev - driver: bridge + driver: bridge \ No newline at end of file diff --git a/docker/docker-compose-dev.yml b/docker/docker-compose-dev.yml new file mode 100644 index 000000000..65ced377d --- /dev/null +++ b/docker/docker-compose-dev.yml @@ -0,0 +1,19 @@ +version: '3.7' + +services: + sapl-dev: + container_name: sapl-dev + image: sapl:dev + build: + context: ../ + dockerfile: ./docker/Dockerfile.dev + command: python3 manage.py runserver 0:8000 + volumes: + - ..:/sapl-dev + ports: + - "8000:8000" + environment: + SECRET_KEY: '$dkhxm-$zvxdox$g2-&w^1i!_z1juq0xwox6e3#gy6w_88!3t^' + DEBUG: 'True' + DATABASE_URL: postgresql://sapl:sapl@host.docker.internal:5432/sapl + TZ: America/Sao_Paulo diff --git a/docker-compose.yml b/docker/docker-compose.yml similarity index 82% rename from docker-compose.yml rename to docker/docker-compose.yml index b20e47002..e42e093bb 100644 --- a/docker-compose.yml +++ b/docker/docker-compose.yml @@ -3,6 +3,9 @@ services: sapldb: image: postgres:10.5-alpine restart: always + container_name: postgres + labels: + NAME: "postgres" environment: POSTGRES_PASSWORD: sapl POSTGRES_USER: sapl @@ -18,6 +21,9 @@ services: image: solr:8.3 restart: always command: bin/solr start -c -f + container_name: solr + labels: + NAME: "solr" volumes: - solr_data:/opt/solr/server/solr - solr_configsets:/opt/solr/server/solr/configsets @@ -26,8 +32,13 @@ services: networks: - sapl-net sapl: - image: interlegis/sapl:3.1.161-RC3 - #build: . + image: interlegis/sapl:3.1.162-RC6 +# build: +# context: ../ +# dockerfile: ./docker/Dockerfile + container_name: sapl + labels: + NAME: "sapl" restart: always environment: ADMIN_PASSWORD: interlegis diff --git a/docker-env.sh b/docker/docker-env.sh similarity index 100% rename from docker-env.sh rename to docker/docker-env.sh diff --git a/genkey.py b/docker/genkey.py similarity index 100% rename from genkey.py rename to docker/genkey.py diff --git a/gunicorn_start.sh b/docker/gunicorn_start.sh similarity index 84% rename from gunicorn_start.sh rename to docker/gunicorn_start.sh index 019ccaaed..3f46a5f8f 100755 --- a/gunicorn_start.sh +++ b/docker/gunicorn_start.sh @@ -1,5 +1,12 @@ #!/usr/bin/env bash +## +## +## PARA USO EXCLUSIVO DO CONTAINER DOCKER DO SAPL!!! +## EVITE USAR PARA CHAMADA DIRETAS +## +## + # As seen in http://tutos.readthedocs.org/en/latest/source/ndg.html SAPL_DIR="/var/interlegis/sapl" @@ -25,15 +32,6 @@ DJANGO_WSGI_MODULE=sapl.wsgi # WSGI module name (*) echo "Starting $NAME as `whoami` on base dir $SAPL_DIR" -# parameter can be passed to run without virtualenv -if [[ "$@" != "no-venv" ]]; then - # Activate the virtual environment - cd $DJANGODIR - source /var/interlegis/.virtualenvs/sapl/bin/activate - export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE - export PYTHONPATH=$DJANGODIR:$PYTHONPATH -fi - # Create the run directory if it doesn't exist RUNDIR=$(dirname $SOCKFILE) test -d $RUNDIR || mkdir -p $RUNDIR diff --git a/scripts_docker/remove-all-containers.sh b/docker/scripts_docker/remove-all-containers.sh similarity index 100% rename from scripts_docker/remove-all-containers.sh rename to docker/scripts_docker/remove-all-containers.sh diff --git a/scripts_docker/remove-db.sh b/docker/scripts_docker/remove-db.sh similarity index 100% rename from scripts_docker/remove-db.sh rename to docker/scripts_docker/remove-db.sh diff --git a/scripts_docker/restore-db.sh b/docker/scripts_docker/restore-db.sh similarity index 100% rename from scripts_docker/restore-db.sh rename to docker/scripts_docker/restore-db.sh diff --git a/scripts_docker/shell_sapl.sh b/docker/scripts_docker/shell_sapl.sh similarity index 100% rename from scripts_docker/shell_sapl.sh rename to docker/scripts_docker/shell_sapl.sh diff --git a/simple_gunicorn.sh b/docker/simple_gunicorn.sh similarity index 100% rename from simple_gunicorn.sh rename to docker/simple_gunicorn.sh diff --git a/solr_api.py b/docker/solr_api.py similarity index 74% rename from solr_api.py rename to docker/solr_api.py index 9bec45daa..3ca06bba7 100755 --- a/solr_api.py +++ b/docker/solr_api.py @@ -1,56 +1,102 @@ - +from io import BytesIO +import argparse +import os import requests import subprocess import sys -import argparse +import zipfile +from pathlib import Path +## +## Este módulo deve ser executado na raiz do projeto +## class SolrClient: LIST_CONFIGSETS = "{}/solr/admin/configs?action=LIST&omitHeader=true&wt=json" UPLOAD_CONFIGSET = "{}/solr/admin/configs?action=UPLOAD&name={}&wt=json" LIST_COLLECTIONS = "{}/solr/admin/collections?action=LIST&wt=json" - STATUS_COLLECTION = "{}/solr/admin/collections?action=CLUSTERSTATUS&collection={}&wt=json" + STATUS_COLLECTION = "{}/solr/admin/collections?action=CLUSTERSTATUS" \ + "&collection={}&wt=json" STATUS_CORE = "{}/admin/cores?action=STATUS&name={}" EXISTS_COLLECTION = "{}/solr/{}/admin/ping?wt=json" OPTIMIZE_COLLECTION = "{}/solr/{}/update?optimize=true&wt=json" - CREATE_COLLECTION = "{}/solr/admin/collections?action=CREATE&name={}&collection.configName={}&numShards={}&replicationFactor={}&maxShardsPerNode={}&wt=json" + CREATE_COLLECTION = "{}/solr/admin/collections?action=CREATE&name={}" \ + "&collection.configName={}&numShards={}" \ + "&replicationFactor={}&maxShardsPerNode={}&wt=json" DELETE_COLLECTION = "{}/solr/admin/collections?action=DELETE&name={}&wt=json" DELETE_DATA = "{}/solr/{}/update?commitWithin=1000&overwrite=true&wt=json" QUERY_DATA = "{}/solr/{}/select?q=*:*" CONFIGSET_NAME = "sapl_configset" + CONFIGSET_PATH = "./solr/sapl_configset/conf" + def __init__(self, url): self.url = url def get_num_docs(self, collection_name): final_url = self.QUERY_DATA.format(self.url, collection_name) res = requests.get(final_url) - dic = res.json() - num_docs = dic["response"]["numFound"] - return num_docs + if res.ok: + try: + dic = res.json() + return dic["response"]["numFound"] + except Exception as e: + print(F"Erro no get_num_docs. Erro: {e}") + print(res.content) + + return 0 def list_collections(self): req_url = self.LIST_COLLECTIONS.format(self.url) res = requests.get(req_url) - dic = res.json() - return dic['collections'] + try: + dic = res.json() + return dic['collections'] + except Exception as e: + print(F"Erro no list_collections. Erro: {e}") + print(res.content) + return 0 def exists_collection(self, collection_name): collections = self.list_collections() return True if collection_name in collections else False + def zip_configset(self): + try: + base_path = Path(self.CONFIGSET_PATH).expanduser().resolve(strict=True) + + # zip files in memory + _zipfile = BytesIO() + with zipfile.ZipFile(_zipfile, 'w', zipfile.ZIP_DEFLATED) as zipf: + for file in base_path.rglob('*'): + zipf.write(file, file.relative_to(base_path)) + return _zipfile + except Exception as e: + print(e) + raise e + def maybe_upload_configset(self, force=False): req_url = self.LIST_CONFIGSETS.format(self.url) res = requests.get(req_url) - dic = res.json() - configsets = dic['configSets'] + try: + dic = res.json() + configsets = dic['configSets'] + except Exception as e: + print(F"Erro ao configurar configsets. Erro: {e}") + print(res.content) + # UPLOAD configset if not self.CONFIGSET_NAME in configsets or force: + + # GENERATE in memory configset + configset_zip = self.zip_configset() + data = configset_zip.getvalue() + configset_zip.close() + files = {'file': ('saplconfigset.zip', - open('./solr/sapl_configset/conf/saplconfigset.zip', - 'rb'), + data, 'application/octet-stream', {'Expires': '0'})} @@ -58,6 +104,7 @@ class SolrClient: resp = requests.post(req_url, files=files) print(resp.content) + else: print('O %s já presente no servidor, NÃO enviando.' % self.CONFIGSET_NAME) @@ -74,8 +121,12 @@ class SolrClient: print("Collection '%s' created succesfully" % collection_name) else: print("Error creating collection '%s'" % collection_name) - as_json = res.json() - print("Error %s: %s" % (res.status_code, as_json['error']['msg'])) + try: + as_json = res.json() + print("Error %s: %s" % (res.status_code, as_json['error']['msg'])) + except Exception as e: + print(F"Erro ao verificar erro na resposta. Erro: {e}") + print(res.content) return False return True diff --git a/start.sh b/docker/start.sh similarity index 99% rename from start.sh rename to docker/start.sh index cec16f6c7..868942bfd 100755 --- a/start.sh +++ b/docker/start.sh @@ -117,5 +117,5 @@ echo "| ███████║██║ ██║██║ ████ echo "| ╚══════╝╚═╝ ╚═╝╚═╝ ╚══════╝ |" echo "-------------------------------------" -/bin/sh gunicorn_start.sh no-venv & +/bin/sh gunicorn_start.sh & /usr/sbin/nginx -g "daemon off;" diff --git a/docker/travis.yml.docker b/docker/travis.yml.docker new file mode 100644 index 000000000..9777e47a4 --- /dev/null +++ b/docker/travis.yml.docker @@ -0,0 +1,38 @@ +sudo: required + +services: + - docker + +env: + global: + - DOCKER_COMPOSE_VERSION=1.26.2 + +before_install: + # Install latest versions of docker and docker-compose + - curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - + - sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" + - sudo apt-get update + - sudo apt-get -y -o Dpkg::Options::="--force-confnew" install docker-ce + - sudo rm /usr/local/bin/docker-compose + - curl -L https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-`uname -s`-`uname -m` > docker-compose + - chmod +x docker-compose + - sudo mv docker-compose /usr/local/bin + - docker --version + - docker-compose --version + +install: + - sudo service postgresql stop || true + +script: + - cd $TRAVIS_BUILD_DIR/docker + # Build master images and run the webserver (tests end to end) + #- docker-compose -f docker-compose.test.yml build + #- docker-compose up -d + #- docker logs sapl + #- docker-compose rm -f -s -v + - docker-compose -f docker-compose-test.yml run --workdir="/var/interlegis/sapl" sapl bash -c "bash busy-wait.sh postgresql://sapl:sapl@sapldb:5432/sapl && cp docker/config/env_test .env && py.test --create-db" + +after_script: + # Cleanup docker containers, images, and volumes + - docker-compose rm -f -s -v + - docker system prune -a -f --volumes \ No newline at end of file diff --git a/docs/ambiente-dev.md b/docs/ambiente-dev.md new file mode 100644 index 000000000..7b6cee424 --- /dev/null +++ b/docs/ambiente-dev.md @@ -0,0 +1,41 @@ +# Ambiente de Desenvolvimento + +### Tópicos + +* [Rodar Docker Compose](#Rodar-Docker-Compose) +* [Configurar Banco de Dados PostgreSQL instalado na máquina](#Configurar-Banco-de-Dados-PostgreSQL-instalado-na-máquina) +* [Restaurar uma Base de Dados](#Restaurar-Base-de-Dados) + +##### A configuração do banco de dados e restauração da base de dados só devem ser feitas na primeira vez. + + +## Rodar Docker Compose +Para rodar o docker compose sem o conteiner postgresql, vá ao terminal e execute o comando: +```shell +docker-compose -f docker/docker-compose-dev.yml up +``` +Se quiser com o conteiner postgresql, execute o comando: +```shell +docker-compose -f docker/docker-compose-dev-db.yml up +``` + +## Configurar Banco de Dados PostgreSQL instalado na máquina +A configuração do banco de dados só é necessário com o postgresql na máquina local. Para configurá-lo, vá ao terminal e execute os comandos a seguir para criar o usuário "sapl", senha "sapl" e a base de dados "sapl": +```shell +sudo -u postgres psql -c "CREATE ROLE sapl LOGIN ENCRYPTED PASSWORD 'sapl' NOSUPERUSER INHERIT CREATEDB NOCREATEROLE NOREPLICATION;" + +sudo -u postgres psql -c "ALTER ROLE sapl VALID UNTIL 'infinity';" + +sudo -u postgres psql -c "CREATE DATABASE sapl WITH OWNER = sapl ENCODING = 'UTF8' TABLESPACE = pg_default LC_COLLATE = 'pt_BR.UTF-8' LC_CTYPE = 'pt_BR.UTF-8' CONNECTION LIMIT = -1 TEMPLATE template0;" +``` +Depois do banco de dados ter sido configurado, [restaure alguma base de dados](#Restaurar-Base-de-Dados). + +## Restaurar Base de Dados +No termianal, rode o comando no diretório raiz do projeto passando como parâmetro o caminho do backup: +```shell +./scripts/restore_db.sh -f +``` +Se o postgres estiver rodando no container, adicione a _flag_ "-p 5433": +```shell +./scripts/restore_db.sh -f -f 5433 +``` diff --git a/docs/deploy.rst b/docs/deploy.rst index 1a0fcd23e..d550da299 100644 --- a/docs/deploy.rst +++ b/docs/deploy.rst @@ -109,7 +109,7 @@ Para rodar o gunicorn:: workon sapl - /var/interlegis/sapl/.gunicorn_start.sh + /var/interlegis/sapl/docker/.gunicorn_start.sh diff --git a/docs/instalacao31.rst b/docs/instalacao31.rst index 4a0e3fd68..eee587a46 100644 --- a/docs/instalacao31.rst +++ b/docs/instalacao31.rst @@ -25,7 +25,7 @@ Instalar as seguintes dependências do sistema:: :: sudo apt-get install git python3-dev libpq-dev graphviz-dev graphviz \ - pkg-config postgresql postgresql-contrib pgadmin3 python-psycopg2 \ + pkg-config postgresql postgresql-contrib pgadmin3 python3-psycopg2 \ software-properties-common build-essential libxml2-dev libjpeg-dev \ libmysqlclient-dev libssl-dev libffi-dev libxslt1-dev python3-setuptools \ python3-pip poppler-utils antiword default-jre python3-venv @@ -145,7 +145,7 @@ Criação da `SECRET_KEY 1% +last 2 versions +not ie <= 8 diff --git a/frontend/.eslintrc.js b/frontend/.eslintrc.js new file mode 100644 index 000000000..5cc3e5896 --- /dev/null +++ b/frontend/.eslintrc.js @@ -0,0 +1,31 @@ +module.exports = { + root: true, + env: { + browser: true, + node: true, + jquery: true + }, + extends: [ + 'plugin:vue/essential', + 'standard' + ], + rules: { + 'generator-star-spacing': 'off', + //'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off', + 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off', + camelcase: 0 + }, + // required to lint *.vue files + plugins: [ + 'vue' + ], + parserOptions: { + parser: 'babel-eslint' + }, + + globals: { + $: true, + jQuery: true, + _: true + } +} diff --git a/frontend/.gitignore b/frontend/.gitignore new file mode 100644 index 000000000..43239f3c3 --- /dev/null +++ b/frontend/.gitignore @@ -0,0 +1,22 @@ +.DS_Store +node_modules +/dist +# local env files +.env.local +.env.*.local + +# Log files +npm-debug.log* +yarn-debug.log* +yarn-error.log* + + +# Editor directories and files +theme-dev +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw* diff --git a/frontend/Dockerfile.dev b/frontend/Dockerfile.dev new file mode 100644 index 000000000..f072807ba --- /dev/null +++ b/frontend/Dockerfile.dev @@ -0,0 +1,6 @@ +FROM node:lts-alpine +RUN apk add --no-cache bash +WORKDIR /sapl-frontend-dev +COPY package*.json ./ +RUN npm install +EXPOSE 8080 diff --git a/frontend/README.md b/frontend/README.md new file mode 100644 index 000000000..6cd515874 --- /dev/null +++ b/frontend/README.md @@ -0,0 +1,29 @@ +# sapl-frontend + +## Project setup +``` +yarn install +``` + +### Compiles and hot-reloads for development +``` +yarn run serve +``` + +### Compiles and minifies for production +``` +yarn run build +``` + +### Run your tests +``` +yarn run test +``` + +### Lints and fixes files +``` +yarn run lint +``` + +### Customize configuration +See [Configuration Reference](https://cli.vuejs.org/config/). diff --git a/frontend/babel.config.js b/frontend/babel.config.js new file mode 100644 index 000000000..df151586e --- /dev/null +++ b/frontend/babel.config.js @@ -0,0 +1,3 @@ +module.exports = { + presets: ['@vue/app'] +} diff --git a/frontend/docker-compose-dev.yml b/frontend/docker-compose-dev.yml new file mode 100644 index 000000000..690f4acf1 --- /dev/null +++ b/frontend/docker-compose-dev.yml @@ -0,0 +1,24 @@ +version: '3.5' + +services: + sapl-frontend-dev: + container_name: sapl-frontend-dev + restart: always + image: sapl:dev + build: + context: . + dockerfile: Dockerfile.dev + volumes: + - .:/sapl-frontend-dev + - /sapl-frontend-dev/node_modules + ports: + - "8080:8080" + networks: + - sapl-net-dev + command: sh -c """yarn install && + yarn run serve""" + +networks: + sapl-net-dev: + name: sapl-net-dev + driver: bridge \ No newline at end of file diff --git a/frontend/postcss.config.js b/frontend/postcss.config.js new file mode 100644 index 000000000..961986e2b --- /dev/null +++ b/frontend/postcss.config.js @@ -0,0 +1,5 @@ +module.exports = { + plugins: { + autoprefixer: {} + } +} diff --git a/frontend/public/audio/ring.mp3 b/frontend/public/audio/ring.mp3 new file mode 100644 index 000000000..97d8fc2d3 Binary files /dev/null and b/frontend/public/audio/ring.mp3 differ diff --git a/frontend/public/img/arrow.png b/frontend/public/img/arrow.png new file mode 100644 index 000000000..1f1a6e5a1 Binary files /dev/null and b/frontend/public/img/arrow.png differ diff --git a/frontend/public/img/authenticated.png b/frontend/public/img/authenticated.png new file mode 100644 index 000000000..872718490 Binary files /dev/null and b/frontend/public/img/authenticated.png differ diff --git a/frontend/public/img/avatar.png b/frontend/public/img/avatar.png new file mode 100644 index 000000000..959c168a5 Binary files /dev/null and b/frontend/public/img/avatar.png differ diff --git a/frontend/public/img/beta.png b/frontend/public/img/beta.png new file mode 100644 index 000000000..fe23d0e6d Binary files /dev/null and b/frontend/public/img/beta.png differ diff --git a/frontend/public/img/brasao_transp.gif b/frontend/public/img/brasao_transp.gif new file mode 100644 index 000000000..2d9ac82c6 Binary files /dev/null and b/frontend/public/img/brasao_transp.gif differ diff --git a/frontend/public/img/down_arrow_select.jpg b/frontend/public/img/down_arrow_select.jpg new file mode 100644 index 000000000..a3a75352d Binary files /dev/null and b/frontend/public/img/down_arrow_select.jpg differ diff --git a/frontend/public/img/etiqueta.png b/frontend/public/img/etiqueta.png new file mode 100644 index 000000000..28db5a89e Binary files /dev/null and b/frontend/public/img/etiqueta.png differ diff --git a/frontend/public/img/favicon.ico b/frontend/public/img/favicon.ico new file mode 100644 index 000000000..b81629808 Binary files /dev/null and b/frontend/public/img/favicon.ico differ diff --git a/frontend/public/img/file.png b/frontend/public/img/file.png new file mode 100644 index 000000000..9bcae6c88 Binary files /dev/null and b/frontend/public/img/file.png differ diff --git a/frontend/public/img/hand-note.png b/frontend/public/img/hand-note.png new file mode 100644 index 000000000..43c757bf1 Binary files /dev/null and b/frontend/public/img/hand-note.png differ diff --git a/frontend/public/img/icon_comissoes.png b/frontend/public/img/icon_comissoes.png new file mode 100644 index 000000000..8ec70e7e1 Binary files /dev/null and b/frontend/public/img/icon_comissoes.png differ diff --git a/frontend/public/img/icon_delete_white.png b/frontend/public/img/icon_delete_white.png new file mode 100644 index 000000000..f06892bff Binary files /dev/null and b/frontend/public/img/icon_delete_white.png differ diff --git a/frontend/public/img/icon_materia_legislativa.png b/frontend/public/img/icon_materia_legislativa.png new file mode 100644 index 000000000..18cdd81f9 Binary files /dev/null and b/frontend/public/img/icon_materia_legislativa.png differ diff --git a/frontend/public/img/icon_mesa_diretora.png b/frontend/public/img/icon_mesa_diretora.png new file mode 100644 index 000000000..12a1b9f13 Binary files /dev/null and b/frontend/public/img/icon_mesa_diretora.png differ diff --git a/frontend/public/img/icon_normas_juridicas.png b/frontend/public/img/icon_normas_juridicas.png new file mode 100644 index 000000000..147681ef8 Binary files /dev/null and b/frontend/public/img/icon_normas_juridicas.png differ diff --git a/frontend/public/img/icon_parlamentares.png b/frontend/public/img/icon_parlamentares.png new file mode 100644 index 000000000..fe9f91ac7 Binary files /dev/null and b/frontend/public/img/icon_parlamentares.png differ diff --git a/frontend/public/img/icon_pautas.png b/frontend/public/img/icon_pautas.png new file mode 100644 index 000000000..8d554f4e4 Binary files /dev/null and b/frontend/public/img/icon_pautas.png differ diff --git a/frontend/public/img/icon_plenarias.png b/frontend/public/img/icon_plenarias.png new file mode 100644 index 000000000..b5fdaa97d Binary files /dev/null and b/frontend/public/img/icon_plenarias.png differ diff --git a/frontend/public/img/icon_relatorios.png b/frontend/public/img/icon_relatorios.png new file mode 100644 index 000000000..3bd71c94d Binary files /dev/null and b/frontend/public/img/icon_relatorios.png differ diff --git a/frontend/public/img/icon_save_white.png b/frontend/public/img/icon_save_white.png new file mode 100644 index 000000000..8f9ccbbf1 Binary files /dev/null and b/frontend/public/img/icon_save_white.png differ diff --git a/frontend/public/img/lexml.gif b/frontend/public/img/lexml.gif new file mode 100644 index 000000000..193f9cb55 Binary files /dev/null and b/frontend/public/img/lexml.gif differ diff --git a/frontend/public/img/logo.png b/frontend/public/img/logo.png new file mode 100644 index 000000000..cc8619f2f Binary files /dev/null and b/frontend/public/img/logo.png differ diff --git a/frontend/public/img/logo_cc.png b/frontend/public/img/logo_cc.png new file mode 100644 index 000000000..7301d05b1 Binary files /dev/null and b/frontend/public/img/logo_cc.png differ diff --git a/frontend/public/img/logo_interlegis.png b/frontend/public/img/logo_interlegis.png new file mode 100644 index 000000000..19591933c Binary files /dev/null and b/frontend/public/img/logo_interlegis.png differ diff --git a/frontend/public/img/manual.png b/frontend/public/img/manual.png new file mode 100644 index 000000000..27a2d87c1 Binary files /dev/null and b/frontend/public/img/manual.png differ diff --git a/frontend/public/img/pdflogo.png b/frontend/public/img/pdflogo.png new file mode 100644 index 000000000..ae28bf428 Binary files /dev/null and b/frontend/public/img/pdflogo.png differ diff --git a/frontend/public/img/perfil.png b/frontend/public/img/perfil.png new file mode 100644 index 000000000..d1c4b77ed Binary files /dev/null and b/frontend/public/img/perfil.png differ diff --git a/frontend/public/img/search-gray.png b/frontend/public/img/search-gray.png new file mode 100644 index 000000000..1f1c1c6c9 Binary files /dev/null and b/frontend/public/img/search-gray.png differ diff --git a/frontend/public/img/search.png b/frontend/public/img/search.png new file mode 100644 index 000000000..442814ed8 Binary files /dev/null and b/frontend/public/img/search.png differ diff --git a/frontend/public/img/user.png b/frontend/public/img/user.png new file mode 100644 index 000000000..e8811bcb4 Binary files /dev/null and b/frontend/public/img/user.png differ diff --git a/frontend/src/__apps/compilacao/js/old/compilacao.js b/frontend/src/__apps/compilacao/js/old/compilacao.js new file mode 100644 index 000000000..f7176c473 --- /dev/null +++ b/frontend/src/__apps/compilacao/js/old/compilacao.js @@ -0,0 +1,331 @@ +const _$ = window.$ + +function SetCookie (cookieName, cookieValue, nDays) { + const today = new Date() + const expire = new Date() + if (nDays === null || nDays === 0) nDays = 1 + expire.setTime(today.getTime() + 3600000 * 24 * nDays) + document.cookie = cookieName + '=' + escape(cookieValue) + + ';expires=' + expire.toGMTString() +} + +function ReadCookie (cookieName) { + const theCookie = ' ' + document.cookie + let ind = theCookie.indexOf(' ' + cookieName + '=') + if (ind === -1) ind = theCookie.indexOf(';' + cookieName + '=') + if (ind === -1 || cookieName === '') return '' + let ind1 = theCookie.indexOf(';', ind + 1) + if (ind1 === -1) ind1 = theCookie.length + return unescape(theCookie.substring(ind + cookieName.length + 2, ind1)) +} + +function insertWaitAjax (element) { + // jQuery(element).append('
') + _$(element).append('
') +} + +function DispositivoSearch (opts) { + _$(function () { + let formData = {} + let containerDs = _$('body').children('#container_ds') + if (containerDs.length > 0) { + _$(containerDs).remove() + } + containerDs = _$('
') + _$('body').prepend(containerDs) + + const fields = _$('[data-sapl-ta="DispositivoSearch"]') + fields.each(function () { + const field = _$(this) + const dataTypeSelection = field.attr('data-type-selection') + const dataField = field.attr('data-field') + const dataFunction = field.attr('data-function') + + const onChangeFieldSelects = function (event) { + if (dataTypeSelection === 'checkbox') { + const tas = field.find('input[name="ta_select_all"]') // tas - Textos Articulados + tas.off() + + tas.on('change', function (event) { + _$(this).closest('ul').find('input[name="' + dataField + '"]').prop('checked', this.checked) + // _$(this).prop('checked', false) + }) + } else { + const dpts = field.find('input') + dpts.off() + dpts.attr('type', 'hidden') + _$('') + .insertBefore(dpts) + .append(_$('')) + .on('click', function () { + if (_$(this).closest('ul').find('li').length === 2) { + _$(this).closest('ul').remove() + } else { + _$(this).closest('li').remove() + } + }) + } + } + onChangeFieldSelects() + + const onChangeParamTA = function (event) { + const tipoTa = _$('select[name="tipo_ta"]').val() + const tipoModel = _$('select[name="tipo_model"]').val() + const numTa = _$('input[name="num_ta"]').val() + const anoTa = _$('input[name="ano_ta"]').val() + let tipoResultado = _$('input[name="tipo_resultado"]:checked').val() + const rotuloDispositivo = _$('input[name="rotulo_dispositivo"]').val() + const textoDispositivo = _$('input[name="texto_dispositivo"]').val() + const maxResults = _$('select[name="max_results"]').val() + let url = '' + + if (rotuloDispositivo.length > 0 || textoDispositivo.length > 0) { + _$('input[name="tipo_resultado"]').prop('disabled', false) + _$('input[name="tipo_resultado"]').each((idx, element) => { + element.parentElement.classList.remove('disabled') + }) + _$('input[name="tipo_resultado"]').closest('#div_id_tipo_resultado').css('opacity', '1') + } else { + _$('input[name="tipo_resultado"]').filter('[value="False"]').prop('checked', true) + _$('input[name="tipo_resultado"]').prop('disabled', true) + + _$('input[name="tipo_resultado"]').each((idx, element) => { + element.parentElement.classList.add('disabled') + }) + _$('input[name="tipo_resultado"]').closest('#div_id_tipo_resultado').css('opacity', '0.3') + tipoResultado = 'False' + } + formData = { + tipo_ta: tipoTa, + tipo_model: tipoModel, + num_ta: numTa, + ano_ta: anoTa, + texto: textoDispositivo, + rotulo: rotuloDispositivo, + tipo_resultado: tipoResultado, + max_results: maxResults, + data_type_selection: dataTypeSelection, + data_field: dataField, + data_function: dataFunction + } + + window.localStorage.setItem('dispositivo_search_form_data', JSON.stringify(formData)) + + url = '/ta/search_fragment_form' + _$('.result-busca-dispositivo').html('') + insertWaitAjax('.result-busca-dispositivo') + _$.get(url, formData).done(function (data) { + _$('.result-busca-dispositivo').html(data) + // OptionalCustomFrontEnd().init() + if (dataTypeSelection === 'checkbox') { + const tas = _$('.result-busca-dispositivo').find('input[name="ta_select_all"]') + tas.off() + tas.on('change', function (event) { + _$(this).closest('ul').find('input[name="' + dataField + '"]').prop('checked', this.checked) + }) + } + }) + } + + const onKeyPressRotuloBuscaTextual = function (event) { + const rotuloDispositivo = _$('input[name="rotulo_dispositivo"]').val() + const textoDispositivo = _$('input[name="texto_dispositivo"]').val() + // let tipoResultado = _$('input[name="tipo_resultado"]:checked').val() + + if (rotuloDispositivo.length > 0 || textoDispositivo.length > 0) { + _$('input[name="tipo_resultado"]').prop('disabled', false) + _$('input[name="tipo_resultado"]').each((idx, element) => { + element.parentElement.classList.remove('disabled') + }) + _$('input[name="tipo_resultado"]').closest('#div_id_tipo_resultado').css('opacity', '1') + } else { + _$('input[name="tipo_resultado"]').filter('[value="False"]').prop('checked', true) + _$('input[name="tipo_resultado"]').prop('disabled', true) + _$('input[name="tipo_resultado"]').each((idx, element) => { + element.parentElement.classList.add('disabled') + }) + _$('input[name="tipo_resultado"]').closest('#div_id_tipo_resultado').css('opacity', '0.3') + // tipoResultado = 'False' + } + } + + let buttonDs = field.children('#buttonDs') + if (buttonDs.length > 0) { + _$(buttonDs).remove() + } + buttonDs = _$('
') + field.prepend(buttonDs) + + const btnOpenSearch = _$('
') + + if ($this.parent().find('.help').length) { + fullsize.insertBefore($this.parent().find('.help')) + } else { + fullsize.appendTo($this.parent()) + } + + $('#'+label).click(function(){ + if (cropping_disabled === true){ + $this.val($this.val().substr(1)) + jcrop[image_id].setSelect($this.val().split(',')) + cropping_disabled = false + } else { + $this.val('-'+$this.val()) + jcrop[image_id].release() + cropping_disabled = true + } + }) + $this.parent().find('.jcrop-tracker').mousedown(function(){ + if (cropping_disabled){ + $('#'+label).attr('checked','checked') + cropping_disabled = false + } + }) + } + }) + } + + function max_cropping (width, height, image_width, image_height) { + var ratio = width/height + var offset + + if (image_width < image_height * ratio) { + // width fits fully, height needs to be cropped + offset = Math.round((image_height-(image_width/ratio))/2) + return [0, offset, image_width, image_height - offset] + } + // height fits fully, width needs to be cropped + offset = Math.round((image_width-(image_height * ratio))/2) + return [offset, 0, image_width - offset, image_height] + } + + function initial_cropping (val) { + if (val === '') { return; } + var s = val.split(',') + return [ + parseInt(s[0], 10), + parseInt(s[1], 10), + parseInt(s[2], 10), + parseInt(s[3], 10) + ] + } + + function _update_selection (sel, $crop_field) { + if ($crop_field.data('size-warning')) { + crop_indication(sel, $crop_field) + } + $crop_field.val(new Array( + Math.round(sel.x), + Math.round(sel.y), + Math.round(sel.x2), + Math.round(sel.y2) + ).join(',')) + } + + function update_selection ($crop_field) { + return function(sel) { _update_selection(sel, $crop_field); } + } + + function crop_indication (sel, $crop_field) { + // indicate if cropped area gets smaller than the specified minimal cropping + var $jcrop_holder = $crop_field.siblings('.jcrop-holder') + var min_width = $crop_field.data("min-width") + var min_height = $crop_field.data("min-height") + if ((sel.w < min_width) || (sel.h < min_height)) { + $jcrop_holder.addClass('size-warning') + } else { + $jcrop_holder.removeClass('size-warning') + } + } + + return { + init: init, + jcrop: jcrop + } + +})(jQuery) +window.image_cropping = image_cropping +jQuery(function() { + /*var image_cropping_jquery_url = jQuery('.image-ratio:first').data('jquery-url') + if (image_cropping_jquery_url == "None") { + // JQUERY_URL is set to `none`. We therefore use the existing version of + // jQuery and leave it otherwise untouched. + jQ = jQuery + } else { + // JQUERY_URL is specified. Image Cropping's jQuery is included in no conflict mode, + jQ = jQuery.noConflict(true) + } + jQ(function() {image_cropping.init();});*/ + $(function() { + image_cropping.init() + }) +}) diff --git a/frontend/src/__global/js/image_cropping/index.js b/frontend/src/__global/js/image_cropping/index.js new file mode 100644 index 000000000..ed6bfb7b9 --- /dev/null +++ b/frontend/src/__global/js/image_cropping/index.js @@ -0,0 +1,6 @@ +/* eslint-disable */ +import './css/jquery.Jcrop.min.css' +import './css/image_cropping.css' + +import './js/jquery.Jcrop.min' +import './image_cropping' \ No newline at end of file diff --git a/frontend/src/__global/js/image_cropping/js/jquery.Jcrop.js b/frontend/src/__global/js/image_cropping/js/jquery.Jcrop.js new file mode 100644 index 000000000..66076005c --- /dev/null +++ b/frontend/src/__global/js/image_cropping/js/jquery.Jcrop.js @@ -0,0 +1,1730 @@ +/* eslint-disable */ +/** + * jquery.Jcrop.js v0.9.12 + * jQuery Image Cropping Plugin - released under MIT License + * Author: Kelly Hallman + * http://github.com/tapmodo/Jcrop + * Copyright (c) 2008-2013 Tapmodo Interactive LLC {{{ + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + * }}} + */ + +(function ($) { + $.Jcrop = function (obj, opt) { + var options = $.extend({}, $.Jcrop.defaults) + + var docOffset + + var _ua = navigator.userAgent.toLowerCase() + + var is_msie = /msie/.test(_ua) + + var ie6mode = /msie [1-6]\./.test(_ua) + + // Internal Methods {{{ + function px (n) { + return Math.round(n) + 'px' + } + function cssClass (cl) { + return options.baseClass + '-' + cl + } + function supportsColorFade () { + return $.fx.step.hasOwnProperty('backgroundColor') + } + function getPos (obj) // {{{ + { + var pos = $(obj).offset() + return [pos.left, pos.top] + } + // }}} + function mouseAbs (e) // {{{ + { + return [(e.pageX - docOffset[0]), (e.pageY - docOffset[1])] + } + // }}} + function setOptions (opt) // {{{ + { + if (typeof (opt) !== 'object') opt = {} + options = $.extend(options, opt) + + $.each(['onChange', 'onSelect', 'onRelease', 'onDblClick'], function (i, e) { + if (typeof (options[e]) !== 'function') options[e] = function () {} + }) + } + // }}} + function startDragMode (mode, pos, touch) // {{{ + { + docOffset = getPos($img) + Tracker.setCursor(mode === 'move' ? mode : mode + '-resize') + + if (mode === 'move') { + return Tracker.activateHandlers(createMover(pos), doneSelect, touch) + } + + var fc = Coords.getFixed() + var opp = oppLockCorner(mode) + var opc = Coords.getCorner(oppLockCorner(opp)) + + Coords.setPressed(Coords.getCorner(opp)) + Coords.setCurrent(opc) + + Tracker.activateHandlers(dragmodeHandler(mode, fc), doneSelect, touch) + } + // }}} + function dragmodeHandler (mode, f) // {{{ + { + return function (pos) { + if (!options.aspectRatio) { + switch (mode) { + case 'e': + pos[1] = f.y2 + break + case 'w': + pos[1] = f.y2 + break + case 'n': + pos[0] = f.x2 + break + case 's': + pos[0] = f.x2 + break + } + } else { + switch (mode) { + case 'e': + pos[1] = f.y + 1 + break + case 'w': + pos[1] = f.y + 1 + break + case 'n': + pos[0] = f.x + 1 + break + case 's': + pos[0] = f.x + 1 + break + } + } + Coords.setCurrent(pos) + Selection.update() + } + } + // }}} + function createMover (pos) // {{{ + { + var lloc = pos + KeyManager.watchKeys() + + return function (pos) { + Coords.moveOffset([pos[0] - lloc[0], pos[1] - lloc[1]]) + lloc = pos + + Selection.update() + } + } + // }}} + function oppLockCorner (ord) // {{{ + { + switch (ord) { + case 'n': + return 'sw' + case 's': + return 'nw' + case 'e': + return 'nw' + case 'w': + return 'ne' + case 'ne': + return 'sw' + case 'nw': + return 'se' + case 'se': + return 'nw' + case 'sw': + return 'ne' + } + } + // }}} + function createDragger (ord) // {{{ + { + return function (e) { + if (options.disabled) { + return false + } + if ((ord === 'move') && !options.allowMove) { + return false + } + + // Fix position of crop area when dragged the very first time. + // Necessary when crop image is in a hidden element when page is loaded. + docOffset = getPos($img) + + btndown = true + startDragMode(ord, mouseAbs(e)) + e.stopPropagation() + e.preventDefault() + return false + } + } + // }}} + function presize ($obj, w, h) // {{{ + { + var nw = $obj.width() + + var nh = $obj.height() + if ((nw > w) && w > 0) { + nw = w + nh = (w / $obj.width()) * $obj.height() + } + if ((nh > h) && h > 0) { + nh = h + nw = (h / $obj.height()) * $obj.width() + } + xscale = $obj.width() / nw + yscale = $obj.height() / nh + $obj.width(nw).height(nh) + } + // }}} + function unscale (c) // {{{ + { + return { + x: c.x * xscale, + y: c.y * yscale, + x2: c.x2 * xscale, + y2: c.y2 * yscale, + w: c.w * xscale, + h: c.h * yscale + } + } + // }}} + function doneSelect (pos) // {{{ + { + var c = Coords.getFixed() + if ((c.w > options.minSelect[0]) && (c.h > options.minSelect[1])) { + Selection.enableHandles() + Selection.done() + } else { + Selection.release() + } + Tracker.setCursor(options.allowSelect ? 'crosshair' : 'default') + } + // }}} + function newSelection (e) // {{{ + { + if (options.disabled) { + return false + } + if (!options.allowSelect) { + return false + } + btndown = true + docOffset = getPos($img) + Selection.disableHandles() + Tracker.setCursor('crosshair') + var pos = mouseAbs(e) + Coords.setPressed(pos) + Selection.update() + Tracker.activateHandlers(selectDrag, doneSelect, e.type.substring(0, 5) === 'touch') + KeyManager.watchKeys() + + e.stopPropagation() + e.preventDefault() + return false + } + // }}} + function selectDrag (pos) // {{{ + { + Coords.setCurrent(pos) + Selection.update() + } + // }}} + function newTracker () // {{{ + { + var trk = $('
').addClass(cssClass('tracker')) + if (is_msie) { + trk.css({ + opacity: 0, + backgroundColor: 'white' + }) + } + return trk + } + // }}} + + // }}} + // Initialization {{{ + // Sanitize some options {{{ + if (typeof (obj) !== 'object') { + obj = $(obj)[0] + } + if (typeof (opt) !== 'object') { + opt = {} + } + // }}} + setOptions(opt) + // Initialize some jQuery objects {{{ + // The values are SET on the image(s) for the interface + // If the original image has any of these set, they will be reset + // However, if you destroy() the Jcrop instance the original image's + // character in the DOM will be as you left it. + var img_css = { + border: 'none', + visibility: 'visible', + margin: 0, + padding: 0, + position: 'absolute', + top: 0, + left: 0 + } + + var $origimg = $(obj) + + var img_mode = true + + if (obj.tagName == 'IMG') { + // Fix size of crop image. + // Necessary when crop image is within a hidden element when page is loaded. + if ($origimg[0].width != 0 && $origimg[0].height != 0) { + // Obtain dimensions from contained img element. + $origimg.width($origimg[0].width) + $origimg.height($origimg[0].height) + } else { + // Obtain dimensions from temporary image in case the original is not loaded yet (e.g. IE 7.0). + var tempImage = new Image() + tempImage.src = $origimg[0].src + $origimg.width(tempImage.width) + $origimg.height(tempImage.height) + } + + var $img = $origimg.clone().removeAttr('id').css(img_css).show() + + $img.width($origimg.width()) + $img.height($origimg.height()) + $origimg.after($img).hide() + } else { + $img = $origimg.css(img_css).show() + img_mode = false + if (options.shade === null) { options.shade = true } + } + + presize($img, options.boxWidth, options.boxHeight) + + var boundx = $img.width() + + var boundy = $img.height() + + var $div = $('
').width(boundx).height(boundy).addClass(cssClass('holder')).css({ + position: 'relative', + backgroundColor: options.bgColor + }).insertAfter($origimg).append($img) + + if (options.addClass) { + $div.addClass(options.addClass) + } + + var $img2 = $('
') + + var $img_holder = $('
') + .width('100%').height('100%').css({ + zIndex: 310, + position: 'absolute', + overflow: 'hidden' + }) + + var $hdl_holder = $('
') + .width('100%').height('100%').css('zIndex', 320) + + var $sel = $('
') + .css({ + position: 'absolute', + zIndex: 600 + }).dblclick(function () { + var c = Coords.getFixed() + options.onDblClick.call(api, c) + }).insertBefore($img).append($img_holder, $hdl_holder) + + if (img_mode) { + $img2 = $('') + .attr('src', $img.attr('src')).css(img_css).width(boundx).height(boundy), + + $img_holder.append($img2) + } + + if (ie6mode) { + $sel.css({ + overflowY: 'hidden' + }) + } + + var bound = options.boundary + var $trk = newTracker().width(boundx + (bound * 2)).height(boundy + (bound * 2)).css({ + position: 'absolute', + top: px(-bound), + left: px(-bound), + zIndex: 290 + }).mousedown(newSelection) + + /* }}} */ + // Set more variables {{{ + var bgcolor = options.bgColor + + var bgopacity = options.bgOpacity + + var xlimit; var ylimit; var xmin; var ymin; var xscale; var yscale; var enabled = true + + var btndown; var animating; var shift_down + + docOffset = getPos($img) + // }}} + // }}} + // Internal Modules {{{ + // Touch Module {{{ + var Touch = (function () { + // Touch support detection function adapted (under MIT License) + // from code by Jeffrey Sambells - http://github.com/iamamused/ + function hasTouchSupport () { + var support = {}; var events = ['touchstart', 'touchmove', 'touchend'] + + var el = document.createElement('div'); var i + + try { + for (i = 0; i < events.length; i++) { + var eventName = events[i] + eventName = 'on' + eventName + var isSupported = (eventName in el) + if (!isSupported) { + el.setAttribute(eventName, 'return;') + isSupported = typeof el[eventName] === 'function' + } + support[events[i]] = isSupported + } + return support.touchstart && support.touchend && support.touchmove + } catch (err) { + return false + } + } + + function detectSupport () { + if ((options.touchSupport === true) || (options.touchSupport === false)) return options.touchSupport + else return hasTouchSupport() + } + return { + createDragger: function (ord) { + return function (e) { + if (options.disabled) { + return false + } + if ((ord === 'move') && !options.allowMove) { + return false + } + docOffset = getPos($img) + btndown = true + startDragMode(ord, mouseAbs(Touch.cfilter(e)), true) + e.stopPropagation() + e.preventDefault() + return false + } + }, + newSelection: function (e) { + return newSelection(Touch.cfilter(e)) + }, + cfilter: function (e) { + e.pageX = e.originalEvent.changedTouches[0].pageX + e.pageY = e.originalEvent.changedTouches[0].pageY + return e + }, + isSupported: hasTouchSupport, + support: detectSupport() + } + }()) + // }}} + // Coords Module {{{ + var Coords = (function () { + var x1 = 0 + + var y1 = 0 + + var x2 = 0 + + var y2 = 0 + + var ox; var oy + + function setPressed (pos) // {{{ + { + pos = rebound(pos) + x2 = x1 = pos[0] + y2 = y1 = pos[1] + } + // }}} + function setCurrent (pos) // {{{ + { + pos = rebound(pos) + ox = pos[0] - x2 + oy = pos[1] - y2 + x2 = pos[0] + y2 = pos[1] + } + // }}} + function getOffset () // {{{ + { + return [ox, oy] + } + // }}} + function moveOffset (offset) // {{{ + { + var ox = offset[0] + + var oy = offset[1] + + if (x1 + ox < 0) { + ox -= ox + x1 + } + if (y1 + oy < 0) { + oy -= oy + y1 + } + + if (boundy < y2 + oy) { + oy += boundy - (y2 + oy) + } + if (boundx < x2 + ox) { + ox += boundx - (x2 + ox) + } + + x1 += ox + x2 += ox + y1 += oy + y2 += oy + } + // }}} + function getCorner (ord) // {{{ + { + var c = getFixed() + switch (ord) { + case 'ne': + return [c.x2, c.y] + case 'nw': + return [c.x, c.y] + case 'se': + return [c.x2, c.y2] + case 'sw': + return [c.x, c.y2] + } + } + // }}} + function getFixed () // {{{ + { + if (!options.aspectRatio) { + return getRect() + } + // This function could use some optimization I think... + var aspect = options.aspectRatio + + var min_x = options.minSize[0] / xscale + + // min_y = options.minSize[1]/yscale, + + var max_x = options.maxSize[0] / xscale + + var max_y = options.maxSize[1] / yscale + + var rw = x2 - x1 + + var rh = y2 - y1 + + var rwa = Math.abs(rw) + + var rha = Math.abs(rh) + + var real_ratio = rwa / rha + + var xx; var yy; var w; var h + + if (max_x === 0) { + max_x = boundx * 10 + } + if (max_y === 0) { + max_y = boundy * 10 + } + if (real_ratio < aspect) { + yy = y2 + w = rha * aspect + xx = rw < 0 ? x1 - w : w + x1 + + if (xx < 0) { + xx = 0 + h = Math.abs((xx - x1) / aspect) + yy = rh < 0 ? y1 - h : h + y1 + } else if (xx > boundx) { + xx = boundx + h = Math.abs((xx - x1) / aspect) + yy = rh < 0 ? y1 - h : h + y1 + } + } else { + xx = x2 + h = rwa / aspect + yy = rh < 0 ? y1 - h : y1 + h + if (yy < 0) { + yy = 0 + w = Math.abs((yy - y1) * aspect) + xx = rw < 0 ? x1 - w : w + x1 + } else if (yy > boundy) { + yy = boundy + w = Math.abs(yy - y1) * aspect + xx = rw < 0 ? x1 - w : w + x1 + } + } + + // Magic %-) + if (xx > x1) { // right side + if (xx - x1 < min_x) { + xx = x1 + min_x + } else if (xx - x1 > max_x) { + xx = x1 + max_x + } + if (yy > y1) { + yy = y1 + (xx - x1) / aspect + } else { + yy = y1 - (xx - x1) / aspect + } + } else if (xx < x1) { // left side + if (x1 - xx < min_x) { + xx = x1 - min_x + } else if (x1 - xx > max_x) { + xx = x1 - max_x + } + if (yy > y1) { + yy = y1 + (x1 - xx) / aspect + } else { + yy = y1 - (x1 - xx) / aspect + } + } + + if (xx < 0) { + x1 -= xx + xx = 0 + } else if (xx > boundx) { + x1 -= xx - boundx + xx = boundx + } + + if (yy < 0) { + y1 -= yy + yy = 0 + } else if (yy > boundy) { + y1 -= yy - boundy + yy = boundy + } + + return makeObj(flipCoords(x1, y1, xx, yy)) + } + // }}} + function rebound (p) // {{{ + { + if (p[0] < 0) p[0] = 0 + if (p[1] < 0) p[1] = 0 + + if (p[0] > boundx) p[0] = boundx + if (p[1] > boundy) p[1] = boundy + + return [Math.round(p[0]), Math.round(p[1])] + } + // }}} + function flipCoords (x1, y1, x2, y2) // {{{ + { + var xa = x1 + + var xb = x2 + + var ya = y1 + + var yb = y2 + if (x2 < x1) { + xa = x2 + xb = x1 + } + if (y2 < y1) { + ya = y2 + yb = y1 + } + return [xa, ya, xb, yb] + } + // }}} + function getRect () // {{{ + { + var xsize = x2 - x1 + + var ysize = y2 - y1 + + var delta + + if (xlimit && (Math.abs(xsize) > xlimit)) { + x2 = (xsize > 0) ? (x1 + xlimit) : (x1 - xlimit) + } + if (ylimit && (Math.abs(ysize) > ylimit)) { + y2 = (ysize > 0) ? (y1 + ylimit) : (y1 - ylimit) + } + + if (ymin / yscale && (Math.abs(ysize) < ymin / yscale)) { + y2 = (ysize > 0) ? (y1 + ymin / yscale) : (y1 - ymin / yscale) + } + if (xmin / xscale && (Math.abs(xsize) < xmin / xscale)) { + x2 = (xsize > 0) ? (x1 + xmin / xscale) : (x1 - xmin / xscale) + } + + if (x1 < 0) { + x2 -= x1 + x1 -= x1 + } + if (y1 < 0) { + y2 -= y1 + y1 -= y1 + } + if (x2 < 0) { + x1 -= x2 + x2 -= x2 + } + if (y2 < 0) { + y1 -= y2 + y2 -= y2 + } + if (x2 > boundx) { + delta = x2 - boundx + x1 -= delta + x2 -= delta + } + if (y2 > boundy) { + delta = y2 - boundy + y1 -= delta + y2 -= delta + } + if (x1 > boundx) { + delta = x1 - boundy + y2 -= delta + y1 -= delta + } + if (y1 > boundy) { + delta = y1 - boundy + y2 -= delta + y1 -= delta + } + + return makeObj(flipCoords(x1, y1, x2, y2)) + } + // }}} + function makeObj (a) // {{{ + { + return { + x: a[0], + y: a[1], + x2: a[2], + y2: a[3], + w: a[2] - a[0], + h: a[3] - a[1] + } + } + // }}} + + return { + flipCoords: flipCoords, + setPressed: setPressed, + setCurrent: setCurrent, + getOffset: getOffset, + moveOffset: moveOffset, + getCorner: getCorner, + getFixed: getFixed + } + }()) + + // }}} + // Shade Module {{{ + var Shade = (function () { + var enabled = false + + var holder = $('
').css({ + position: 'absolute', + zIndex: 240, + opacity: 0 + }) + + var shades = { + top: createShade(), + left: createShade().height(boundy), + right: createShade().height(boundy), + bottom: createShade() + } + + function resizeShades (w, h) { + shades.left.css({ height: px(h) }) + shades.right.css({ height: px(h) }) + } + function updateAuto () { + return updateShade(Coords.getFixed()) + } + function updateShade (c) { + shades.top.css({ + left: px(c.x), + width: px(c.w), + height: px(c.y) + }) + shades.bottom.css({ + top: px(c.y2), + left: px(c.x), + width: px(c.w), + height: px(boundy - c.y2) + }) + shades.right.css({ + left: px(c.x2), + width: px(boundx - c.x2) + }) + shades.left.css({ + width: px(c.x) + }) + } + function createShade () { + return $('
').css({ + position: 'absolute', + backgroundColor: options.shadeColor || options.bgColor + }).appendTo(holder) + } + function enableShade () { + if (!enabled) { + enabled = true + holder.insertBefore($img) + updateAuto() + Selection.setBgOpacity(1, 0, 1) + $img2.hide() + + setBgColor(options.shadeColor || options.bgColor, 1) + if (Selection.isAwake()) { + setOpacity(options.bgOpacity, 1) + } else setOpacity(1, 1) + } + } + function setBgColor (color, now) { + colorChangeMacro(getShades(), color, now) + } + function disableShade () { + if (enabled) { + holder.remove() + $img2.show() + enabled = false + if (Selection.isAwake()) { + Selection.setBgOpacity(options.bgOpacity, 1, 1) + } else { + Selection.setBgOpacity(1, 1, 1) + Selection.disableHandles() + } + colorChangeMacro($div, 0, 1) + } + } + function setOpacity (opacity, now) { + if (enabled) { + if (options.bgFade && !now) { + holder.animate({ + opacity: 1 - opacity + }, { + queue: false, + duration: options.fadeTime + }) + } else holder.css({ opacity: 1 - opacity }) + } + } + function refreshAll () { + options.shade ? enableShade() : disableShade() + if (Selection.isAwake()) setOpacity(options.bgOpacity) + } + function getShades () { + return holder.children() + } + + return { + update: updateAuto, + updateRaw: updateShade, + getShades: getShades, + setBgColor: setBgColor, + enable: enableShade, + disable: disableShade, + resize: resizeShades, + refresh: refreshAll, + opacity: setOpacity + } + }()) + // }}} + // Selection Module {{{ + var Selection = (function () { + var awake + + var hdep = 370 + + var borders = {} + + var handle = {} + + var dragbar = {} + + var seehandles = false + + // Private Methods + function insertBorder (type) // {{{ + { + var jq = $('
').css({ + position: 'absolute', + opacity: options.borderOpacity + }).addClass(cssClass(type)) + $img_holder.append(jq) + return jq + } + // }}} + function dragDiv (ord, zi) // {{{ + { + var jq = $('
').mousedown(createDragger(ord)).css({ + cursor: ord + '-resize', + position: 'absolute', + zIndex: zi + }).addClass('ord-' + ord) + + if (Touch.support) { + jq.bind('touchstart.jcrop', Touch.createDragger(ord)) + } + + $hdl_holder.append(jq) + return jq + } + // }}} + function insertHandle (ord) // {{{ + { + var hs = options.handleSize + + var div = dragDiv(ord, hdep++).css({ + opacity: options.handleOpacity + }).addClass(cssClass('handle')) + + if (hs) { div.width(hs).height(hs) } + + return div + } + // }}} + function insertDragbar (ord) // {{{ + { + return dragDiv(ord, hdep++).addClass('jcrop-dragbar') + } + // }}} + function createDragbars (li) // {{{ + { + var i + for (i = 0; i < li.length; i++) { + dragbar[li[i]] = insertDragbar(li[i]) + } + } + // }}} + function createBorders (li) // {{{ + { + var cl, i + for (i = 0; i < li.length; i++) { + switch (li[i]) { + case 'n': cl = 'hline'; break + case 's': cl = 'hline bottom'; break + case 'e': cl = 'vline right'; break + case 'w': cl = 'vline'; break + } + borders[li[i]] = insertBorder(cl) + } + } + // }}} + function createHandles (li) // {{{ + { + var i + for (i = 0; i < li.length; i++) { + handle[li[i]] = insertHandle(li[i]) + } + } + // }}} + function moveto (x, y) // {{{ + { + if (!options.shade) { + $img2.css({ + top: px(-y), + left: px(-x) + }) + } + $sel.css({ + top: px(y), + left: px(x) + }) + } + // }}} + function resize (w, h) // {{{ + { + $sel.width(Math.round(w)).height(Math.round(h)) + } + // }}} + function refresh () // {{{ + { + var c = Coords.getFixed() + + Coords.setPressed([c.x, c.y]) + Coords.setCurrent([c.x2, c.y2]) + + updateVisible() + } + // }}} + + // Internal Methods + function updateVisible (select) // {{{ + { + if (awake) { + return update(select) + } + } + // }}} + function update (select) // {{{ + { + var c = Coords.getFixed() + + resize(c.w, c.h) + moveto(c.x, c.y) + if (options.shade) Shade.updateRaw(c) + + awake || show() + + if (select) { + options.onSelect.call(api, unscale(c)) + } else { + options.onChange.call(api, unscale(c)) + } + } + // }}} + function setBgOpacity (opacity, force, now) // {{{ + { + if (!awake && !force) return + if (options.bgFade && !now) { + $img.animate({ + opacity: opacity + }, { + queue: false, + duration: options.fadeTime + }) + } else { + $img.css('opacity', opacity) + } + } + // }}} + function show () // {{{ + { + $sel.show() + + if (options.shade) Shade.opacity(bgopacity) + else setBgOpacity(bgopacity, true) + + awake = true + } + // }}} + function release () // {{{ + { + disableHandles() + $sel.hide() + + if (options.shade) Shade.opacity(1) + else setBgOpacity(1) + + awake = false + options.onRelease.call(api) + } + // }}} + function showHandles () // {{{ + { + if (seehandles) { + $hdl_holder.show() + } + } + // }}} + function enableHandles () // {{{ + { + seehandles = true + if (options.allowResize) { + $hdl_holder.show() + return true + } + } + // }}} + function disableHandles () // {{{ + { + seehandles = false + $hdl_holder.hide() + } + // }}} + function animMode (v) // {{{ + { + if (v) { + animating = true + disableHandles() + } else { + animating = false + enableHandles() + } + } + // }}} + function done () // {{{ + { + animMode(false) + refresh() + } + // }}} + // Insert draggable elements {{{ + // Insert border divs for outline + + if (options.dragEdges && $.isArray(options.createDragbars)) { createDragbars(options.createDragbars) } + + if ($.isArray(options.createHandles)) { createHandles(options.createHandles) } + + if (options.drawBorders && $.isArray(options.createBorders)) { createBorders(options.createBorders) } + + // }}} + + // This is a hack for iOS5 to support drag/move touch functionality + $(document).bind('touchstart.jcrop-ios', function (e) { + if ($(e.currentTarget).hasClass('jcrop-tracker')) e.stopPropagation() + }) + + var $track = newTracker().mousedown(createDragger('move')).css({ + cursor: 'move', + position: 'absolute', + zIndex: 360 + }) + + if (Touch.support) { + $track.bind('touchstart.jcrop', Touch.createDragger('move')) + } + + $img_holder.append($track) + disableHandles() + + return { + updateVisible: updateVisible, + update: update, + release: release, + refresh: refresh, + isAwake: function () { + return awake + }, + setCursor: function (cursor) { + $track.css('cursor', cursor) + }, + enableHandles: enableHandles, + enableOnly: function () { + seehandles = true + }, + showHandles: showHandles, + disableHandles: disableHandles, + animMode: animMode, + setBgOpacity: setBgOpacity, + done: done + } + }()) + + // }}} + // Tracker Module {{{ + var Tracker = (function () { + var onMove = function () {} + + var onDone = function () {} + + var trackDoc = options.trackDocument + + function toFront (touch) // {{{ + { + $trk.css({ + zIndex: 450 + }) + + if (touch) { + $(document) + .bind('touchmove.jcrop', trackTouchMove) + .bind('touchend.jcrop', trackTouchEnd) + } else if (trackDoc) { + $(document) + .bind('mousemove.jcrop', trackMove) + .bind('mouseup.jcrop', trackUp) + } + } + // }}} + function toBack () // {{{ + { + $trk.css({ + zIndex: 290 + }) + $(document).unbind('.jcrop') + } + // }}} + function trackMove (e) // {{{ + { + onMove(mouseAbs(e)) + return false + } + // }}} + function trackUp (e) // {{{ + { + e.preventDefault() + e.stopPropagation() + + if (btndown) { + btndown = false + + onDone(mouseAbs(e)) + + if (Selection.isAwake()) { + options.onSelect.call(api, unscale(Coords.getFixed())) + } + + toBack() + onMove = function () {} + onDone = function () {} + } + + return false + } + // }}} + function activateHandlers (move, done, touch) // {{{ + { + btndown = true + onMove = move + onDone = done + toFront(touch) + return false + } + // }}} + function trackTouchMove (e) // {{{ + { + onMove(mouseAbs(Touch.cfilter(e))) + return false + } + // }}} + function trackTouchEnd (e) // {{{ + { + return trackUp(Touch.cfilter(e)) + } + // }}} + function setCursor (t) // {{{ + { + $trk.css('cursor', t) + } + // }}} + + if (!trackDoc) { + $trk.mousemove(trackMove).mouseup(trackUp).mouseout(trackUp) + } + + $img.before($trk) + return { + activateHandlers: activateHandlers, + setCursor: setCursor + } + }()) + // }}} + // KeyManager Module {{{ + var KeyManager = (function () { + var $keymgr = $('').css({ + position: 'fixed', + left: '-120px', + width: '12px' + }).addClass('jcrop-keymgr') + + var $keywrap = $('
').css({ + position: 'absolute', + overflow: 'hidden' + }).append($keymgr) + + function watchKeys () // {{{ + { + if (options.keySupport) { + $keymgr.show() + $keymgr.focus() + } + } + // }}} + function onBlur (e) // {{{ + { + $keymgr.hide() + } + // }}} + function doNudge (e, x, y) // {{{ + { + if (options.allowMove) { + Coords.moveOffset([x, y]) + Selection.updateVisible(true) + } + e.preventDefault() + e.stopPropagation() + } + // }}} + function parseKey (e) // {{{ + { + if (e.ctrlKey || e.metaKey) { + return true + } + shift_down = !!e.shiftKey + var nudge = shift_down ? 10 : 1 + + switch (e.keyCode) { + case 37: + doNudge(e, -nudge, 0) + break + case 39: + doNudge(e, nudge, 0) + break + case 38: + doNudge(e, 0, -nudge) + break + case 40: + doNudge(e, 0, nudge) + break + case 27: + if (options.allowSelect) Selection.release() + break + case 9: + return true + } + + return false + } + // }}} + + if (options.keySupport) { + $keymgr.keydown(parseKey).blur(onBlur) + if (ie6mode || !options.fixedSupport) { + $keymgr.css({ + position: 'absolute', + left: '-20px' + }) + $keywrap.append($keymgr).insertBefore($img) + } else { + $keymgr.insertBefore($img) + } + } + + return { + watchKeys: watchKeys + } + }()) + // }}} + // }}} + // API methods {{{ + function setClass (cname) // {{{ + { + $div.removeClass().addClass(cssClass('holder')).addClass(cname) + } + // }}} + function animateTo (a, callback) // {{{ + { + var x1 = a[0] / xscale + + var y1 = a[1] / yscale + + var x2 = a[2] / xscale + + var y2 = a[3] / yscale + + if (animating) { + return + } + + var animto = Coords.flipCoords(x1, y1, x2, y2) + + var c = Coords.getFixed() + + var initcr = [c.x, c.y, c.x2, c.y2] + + var animat = initcr + + var interv = options.animationDelay + + var ix1 = animto[0] - initcr[0] + + var iy1 = animto[1] - initcr[1] + + var ix2 = animto[2] - initcr[2] + + var iy2 = animto[3] - initcr[3] + + var pcent = 0 + + var velocity = options.swingSpeed + + x1 = animat[0] + y1 = animat[1] + x2 = animat[2] + y2 = animat[3] + + Selection.animMode(true) + var anim_timer + + function queueAnimator () { + window.setTimeout(animator, interv) + } + var animator = (function () { + return function () { + pcent += (100 - pcent) / velocity + + animat[0] = Math.round(x1 + ((pcent / 100) * ix1)) + animat[1] = Math.round(y1 + ((pcent / 100) * iy1)) + animat[2] = Math.round(x2 + ((pcent / 100) * ix2)) + animat[3] = Math.round(y2 + ((pcent / 100) * iy2)) + + if (pcent >= 99.8) { + pcent = 100 + } + if (pcent < 100) { + setSelectRaw(animat) + queueAnimator() + } else { + Selection.done() + Selection.animMode(false) + if (typeof (callback) === 'function') { + callback.call(api) + } + } + } + }()) + queueAnimator() + } + // }}} + function setSelect (rect) // {{{ + { + setSelectRaw([rect[0] / xscale, rect[1] / yscale, rect[2] / xscale, rect[3] / yscale]) + options.onSelect.call(api, unscale(Coords.getFixed())) + Selection.enableHandles() + } + // }}} + function setSelectRaw (l) // {{{ + { + Coords.setPressed([l[0], l[1]]) + Coords.setCurrent([l[2], l[3]]) + Selection.update() + } + // }}} + function tellSelect () // {{{ + { + return unscale(Coords.getFixed()) + } + // }}} + function tellScaled () // {{{ + { + return Coords.getFixed() + } + // }}} + function setOptionsNew (opt) // {{{ + { + setOptions(opt) + interfaceUpdate() + } + // }}} + function disableCrop () // {{{ + { + options.disabled = true + Selection.disableHandles() + Selection.setCursor('default') + Tracker.setCursor('default') + } + // }}} + function enableCrop () // {{{ + { + options.disabled = false + interfaceUpdate() + } + // }}} + function cancelCrop () // {{{ + { + Selection.done() + Tracker.activateHandlers(null, null) + } + // }}} + function destroy () // {{{ + { + $div.remove() + $origimg.show() + $origimg.css('visibility', 'visible') + $(obj).removeData('Jcrop') + } + // }}} + function setImage (src, callback) // {{{ + { + Selection.release() + disableCrop() + var img = new Image() + img.onload = function () { + var iw = img.width + var ih = img.height + var bw = options.boxWidth + var bh = options.boxHeight + $img.width(iw).height(ih) + $img.attr('src', src) + $img2.attr('src', src) + presize($img, bw, bh) + boundx = $img.width() + boundy = $img.height() + $img2.width(boundx).height(boundy) + $trk.width(boundx + (bound * 2)).height(boundy + (bound * 2)) + $div.width(boundx).height(boundy) + Shade.resize(boundx, boundy) + enableCrop() + + if (typeof (callback) === 'function') { + callback.call(api) + } + } + img.src = src + } + // }}} + function colorChangeMacro ($obj, color, now) { + var mycolor = color || options.bgColor + if (options.bgFade && supportsColorFade() && options.fadeTime && !now) { + $obj.animate({ + backgroundColor: mycolor + }, { + queue: false, + duration: options.fadeTime + }) + } else { + $obj.css('backgroundColor', mycolor) + } + } + function interfaceUpdate (alt) // {{{ + // This method tweaks the interface based on options object. + // Called when options are changed and at end of initialization. + { + if (options.allowResize) { + if (alt) { + Selection.enableOnly() + } else { + Selection.enableHandles() + } + } else { + Selection.disableHandles() + } + + Tracker.setCursor(options.allowSelect ? 'crosshair' : 'default') + Selection.setCursor(options.allowMove ? 'move' : 'default') + + if (options.hasOwnProperty('trueSize')) { + xscale = options.trueSize[0] / boundx + yscale = options.trueSize[1] / boundy + } + + if (options.hasOwnProperty('setSelect')) { + setSelect(options.setSelect) + Selection.done() + delete (options.setSelect) + } + + Shade.refresh() + + if (options.bgColor != bgcolor) { + colorChangeMacro( + options.shade ? Shade.getShades() : $div, + options.shade + ? (options.shadeColor || options.bgColor) + : options.bgColor + ) + bgcolor = options.bgColor + } + + if (bgopacity != options.bgOpacity) { + bgopacity = options.bgOpacity + if (options.shade) Shade.refresh() + else Selection.setBgOpacity(bgopacity) + } + + xlimit = options.maxSize[0] || 0 + ylimit = options.maxSize[1] || 0 + xmin = options.minSize[0] || 0 + ymin = options.minSize[1] || 0 + + if (options.hasOwnProperty('outerImage')) { + $img.attr('src', options.outerImage) + delete (options.outerImage) + } + + Selection.refresh() + } + // }}} + // }}} + + if (Touch.support) $trk.bind('touchstart.jcrop', Touch.newSelection) + + $hdl_holder.hide() + interfaceUpdate(true) + + var api = { + setImage: setImage, + animateTo: animateTo, + setSelect: setSelect, + setOptions: setOptionsNew, + tellSelect: tellSelect, + tellScaled: tellScaled, + setClass: setClass, + + disable: disableCrop, + enable: enableCrop, + cancel: cancelCrop, + release: Selection.release, + destroy: destroy, + + focus: KeyManager.watchKeys, + + getBounds: function () { + return [boundx * xscale, boundy * yscale] + }, + getWidgetSize: function () { + return [boundx, boundy] + }, + getScaleFactor: function () { + return [xscale, yscale] + }, + getOptions: function () { + // careful: internal values are returned + return options + }, + + ui: { + holder: $div, + selection: $sel + } + } + + if (is_msie) $div.bind('selectstart', function () { return false }) + + $origimg.data('Jcrop', api) + return api + } + $.fn.Jcrop = function (options, callback) // {{{ + { + var api + // Iterate over each object, attach Jcrop + this.each(function () { + // If we've already attached to this object + if ($(this).data('Jcrop')) { + // The API can be requested this way (undocumented) + if (options === 'api') return $(this).data('Jcrop') + // Otherwise, we just reset the options... + else $(this).data('Jcrop').setOptions(options) + } + // If we haven't been attached, preload and attach + else { + if (this.tagName == 'IMG') { + $.Jcrop.Loader(this, function () { + $(this).css({ display: 'block', visibility: 'hidden' }) + api = $.Jcrop(this, options) + if ($.isFunction(callback)) callback.call(api) + }) + } else { + $(this).css({ display: 'block', visibility: 'hidden' }) + api = $.Jcrop(this, options) + if ($.isFunction(callback)) callback.call(api) + } + } + }) + + // Return "this" so the object is chainable (jQuery-style) + return this + } + // }}} + // $.Jcrop.Loader - basic image loader {{{ + + $.Jcrop.Loader = function (imgobj, success, error) { + var $img = $(imgobj); var img = $img[0] + + function completeCheck () { + if (img.complete) { + $img.unbind('.jcloader') + if ($.isFunction(success)) success.call(img) + } else window.setTimeout(completeCheck, 50) + } + + $img + .bind('load.jcloader', completeCheck) + .bind('error.jcloader', function (e) { + $img.unbind('.jcloader') + if ($.isFunction(error)) error.call(img) + }) + + if (img.complete && $.isFunction(success)) { + $img.unbind('.jcloader') + success.call(img) + } + } + + // }}} + // Global Defaults {{{ + $.Jcrop.defaults = { + + // Basic Settings + allowSelect: true, + allowMove: true, + allowResize: true, + + trackDocument: true, + + // Styling Options + baseClass: 'jcrop', + addClass: null, + bgColor: 'black', + bgOpacity: 0.6, + bgFade: false, + borderOpacity: 0.4, + handleOpacity: 0.5, + handleSize: null, + + aspectRatio: 0, + keySupport: true, + createHandles: ['n', 's', 'e', 'w', 'nw', 'ne', 'se', 'sw'], + createDragbars: ['n', 's', 'e', 'w'], + createBorders: ['n', 's', 'e', 'w'], + drawBorders: true, + dragEdges: true, + fixedSupport: true, + touchSupport: null, + + shade: null, + + boxWidth: 0, + boxHeight: 0, + boundary: 2, + fadeTime: 400, + animationDelay: 20, + swingSpeed: 3, + + minSelect: [0, 0], + maxSize: [0, 0], + minSize: [0, 0], + + // Callbacks / Event Handlers + onChange: function () {}, + onSelect: function () {}, + onDblClick: function () {}, + onRelease: function () {} + } + + // }}} +}(jQuery)) diff --git a/frontend/src/__global/js/image_cropping/js/jquery.Jcrop.min.js b/frontend/src/__global/js/image_cropping/js/jquery.Jcrop.min.js new file mode 100644 index 000000000..e6dd9371b --- /dev/null +++ b/frontend/src/__global/js/image_cropping/js/jquery.Jcrop.min.js @@ -0,0 +1,23 @@ +/* eslint-disable */ +/** + * jquery.Jcrop.min.js v0.9.12 (build:20130202) + * jQuery Image Cropping Plugin - released under MIT License + * Copyright (c) 2008-2013 Tapmodo Interactive LLC + * https://github.com/tapmodo/Jcrop + */ +(function(a){a.Jcrop=function(b,c){function i(a){return Math.round(a)+"px"}function j(a){return d.baseClass+"-"+a}function k(){return a.fx.step.hasOwnProperty("backgroundColor")}function l(b){var c=a(b).offset();return[c.left,c.top]}function m(a){return[a.pageX-e[0],a.pageY-e[1]]}function n(b){typeof b!="object"&&(b={}),d=a.extend(d,b),a.each(["onChange","onSelect","onRelease","onDblClick"],function(a,b){typeof d[b]!="function"&&(d[b]=function(){})})}function o(a,b,c){e=l(D),bc.setCursor(a==="move"?a:a+"-resize");if(a==="move")return bc.activateHandlers(q(b),v,c);var d=_.getFixed(),f=r(a),g=_.getCorner(r(f));_.setPressed(_.getCorner(f)),_.setCurrent(g),bc.activateHandlers(p(a,d),v,c)}function p(a,b){return function(c){if(!d.aspectRatio)switch(a){case"e":c[1]=b.y2;break;case"w":c[1]=b.y2;break;case"n":c[0]=b.x2;break;case"s":c[0]=b.x2}else switch(a){case"e":c[1]=b.y+1;break;case"w":c[1]=b.y+1;break;case"n":c[0]=b.x+1;break;case"s":c[0]=b.x+1}_.setCurrent(c),bb.update()}}function q(a){var b=a;return bd.watchKeys +(),function(a){_.moveOffset([a[0]-b[0],a[1]-b[1]]),b=a,bb.update()}}function r(a){switch(a){case"n":return"sw";case"s":return"nw";case"e":return"nw";case"w":return"ne";case"ne":return"sw";case"nw":return"se";case"se":return"nw";case"sw":return"ne"}}function s(a){return function(b){return d.disabled?!1:a==="move"&&!d.allowMove?!1:(e=l(D),W=!0,o(a,m(b)),b.stopPropagation(),b.preventDefault(),!1)}}function t(a,b,c){var d=a.width(),e=a.height();d>b&&b>0&&(d=b,e=b/a.width()*a.height()),e>c&&c>0&&(e=c,d=c/a.height()*a.width()),T=a.width()/d,U=a.height()/e,a.width(d).height(e)}function u(a){return{x:a.x*T,y:a.y*U,x2:a.x2*T,y2:a.y2*U,w:a.w*T,h:a.h*U}}function v(a){var b=_.getFixed();b.w>d.minSelect[0]&&b.h>d.minSelect[1]?(bb.enableHandles(),bb.done()):bb.release(),bc.setCursor(d.allowSelect?"crosshair":"default")}function w(a){if(d.disabled)return!1;if(!d.allowSelect)return!1;W=!0,e=l(D),bb.disableHandles(),bc.setCursor("crosshair");var b=m(a);return _.setPressed(b),bb.update(),bc.activateHandlers(x,v,a.type.substring +(0,5)==="touch"),bd.watchKeys(),a.stopPropagation(),a.preventDefault(),!1}function x(a){_.setCurrent(a),bb.update()}function y(){var b=a("
").addClass(j("tracker"));return g&&b.css({opacity:0,backgroundColor:"white"}),b}function be(a){G.removeClass().addClass(j("holder")).addClass(a)}function bf(a,b){function t(){window.setTimeout(u,l)}var c=a[0]/T,e=a[1]/U,f=a[2]/T,g=a[3]/U;if(X)return;var h=_.flipCoords(c,e,f,g),i=_.getFixed(),j=[i.x,i.y,i.x2,i.y2],k=j,l=d.animationDelay,m=h[0]-j[0],n=h[1]-j[1],o=h[2]-j[2],p=h[3]-j[3],q=0,r=d.swingSpeed;c=k[0],e=k[1],f=k[2],g=k[3],bb.animMode(!0);var s,u=function(){return function(){q+=(100-q)/r,k[0]=Math.round(c+q/100*m),k[1]=Math.round(e+q/100*n),k[2]=Math.round(f+q/100*o),k[3]=Math.round(g+q/100*p),q>=99.8&&(q=100),q<100?(bh(k),t()):(bb.done(),bb.animMode(!1),typeof b=="function"&&b.call(bs))}}();t()}function bg(a){bh([a[0]/T,a[1]/U,a[2]/T,a[3]/U]),d.onSelect.call(bs,u(_.getFixed())),bb.enableHandles()}function bh(a){_.setPressed([a[0],a[1]]),_.setCurrent([a[2], +a[3]]),bb.update()}function bi(){return u(_.getFixed())}function bj(){return _.getFixed()}function bk(a){n(a),br()}function bl(){d.disabled=!0,bb.disableHandles(),bb.setCursor("default"),bc.setCursor("default")}function bm(){d.disabled=!1,br()}function bn(){bb.done(),bc.activateHandlers(null,null)}function bo(){G.remove(),A.show(),A.css("visibility","visible"),a(b).removeData("Jcrop")}function bp(a,b){bb.release(),bl();var c=new Image;c.onload=function(){var e=c.width,f=c.height,g=d.boxWidth,h=d.boxHeight;D.width(e).height(f),D.attr("src",a),H.attr("src",a),t(D,g,h),E=D.width(),F=D.height(),H.width(E).height(F),M.width(E+L*2).height(F+L*2),G.width(E).height(F),ba.resize(E,F),bm(),typeof b=="function"&&b.call(bs)},c.src=a}function bq(a,b,c){var e=b||d.bgColor;d.bgFade&&k()&&d.fadeTime&&!c?a.animate({backgroundColor:e},{queue:!1,duration:d.fadeTime}):a.css("backgroundColor",e)}function br(a){d.allowResize?a?bb.enableOnly():bb.enableHandles():bb.disableHandles(),bc.setCursor(d.allowSelect?"crosshair":"default"),bb +.setCursor(d.allowMove?"move":"default"),d.hasOwnProperty("trueSize")&&(T=d.trueSize[0]/E,U=d.trueSize[1]/F),d.hasOwnProperty("setSelect")&&(bg(d.setSelect),bb.done(),delete d.setSelect),ba.refresh(),d.bgColor!=N&&(bq(d.shade?ba.getShades():G,d.shade?d.shadeColor||d.bgColor:d.bgColor),N=d.bgColor),O!=d.bgOpacity&&(O=d.bgOpacity,d.shade?ba.refresh():bb.setBgOpacity(O)),P=d.maxSize[0]||0,Q=d.maxSize[1]||0,R=d.minSize[0]||0,S=d.minSize[1]||0,d.hasOwnProperty("outerImage")&&(D.attr("src",d.outerImage),delete d.outerImage),bb.refresh()}var d=a.extend({},a.Jcrop.defaults),e,f=navigator.userAgent.toLowerCase(),g=/msie/.test(f),h=/msie [1-6]\./.test(f);typeof b!="object"&&(b=a(b)[0]),typeof c!="object"&&(c={}),n(c);var z={border:"none",visibility:"visible",margin:0,padding:0,position:"absolute",top:0,left:0},A=a(b),B=!0;if(b.tagName=="IMG"){if(A[0].width!=0&&A[0].height!=0)A.width(A[0].width),A.height(A[0].height);else{var C=new Image;C.src=A[0].src,A.width(C.width),A.height(C.height)}var D=A.clone().removeAttr("id"). +css(z).show();D.width(A.width()),D.height(A.height()),A.after(D).hide()}else D=A.css(z).show(),B=!1,d.shade===null&&(d.shade=!0);t(D,d.boxWidth,d.boxHeight);var E=D.width(),F=D.height(),G=a("
").width(E).height(F).addClass(j("holder")).css({position:"relative",backgroundColor:d.bgColor}).insertAfter(A).append(D);d.addClass&&G.addClass(d.addClass);var H=a("
"),I=a("
").width("100%").height("100%").css({zIndex:310,position:"absolute",overflow:"hidden"}),J=a("
").width("100%").height("100%").css("zIndex",320),K=a("
").css({position:"absolute",zIndex:600}).dblclick(function(){var a=_.getFixed();d.onDblClick.call(bs,a)}).insertBefore(D).append(I,J);B&&(H=a("").attr("src",D.attr("src")).css(z).width(E).height(F),I.append(H)),h&&K.css({overflowY:"hidden"});var L=d.boundary,M=y().width(E+L*2).height(F+L*2).css({position:"absolute",top:i(-L),left:i(-L),zIndex:290}).mousedown(w),N=d.bgColor,O=d.bgOpacity,P,Q,R,S,T,U,V=!0,W,X,Y;e=l(D);var Z=function(){function a(){var a={},b=["touchstart" +,"touchmove","touchend"],c=document.createElement("div"),d;try{for(d=0;da+f&&(f-=f+a),0>b+g&&(g-=g+b),FE&&(r=E,u=Math.abs((r-a)/f),s=k<0?b-u:u+b)):(r=c,u=l/f,s=k<0?b-u:b+u,s<0?(s=0,t=Math.abs((s-b)*f),r=j<0?a-t:t+a):s>F&&(s=F,t=Math.abs(s-b)*f,r=j<0?a-t:t+a)),r>a?(r-ah&&(r=a+h),s>b?s=b+(r-a)/f:s=b-(r-a)/f):rh&&(r=a-h),s>b?s=b+(a-r)/f:s=b-(a-r)/f),r<0?(a-=r,r=0):r>E&&(a-=r-E,r=E),s<0?(b-=s,s=0):s>F&&(b-=s-F,s=F),q(o(a,b,r,s))}function n(a){return a[0]<0&&(a[0]=0),a[1]<0&&(a[1]=0),a[0]>E&&(a[0]=E),a[1]>F&&(a[1]=F),[Math.round(a[0]),Math.round(a[1])]}function o(a,b,c,d){var e=a,f=c,g=b,h=d;return cP&&(c=d>0?a+P:a-P),Q&&Math.abs +(f)>Q&&(e=f>0?b+Q:b-Q),S/U&&Math.abs(f)0?b+S/U:b-S/U),R/T&&Math.abs(d)0?a+R/T:a-R/T),a<0&&(c-=a,a-=a),b<0&&(e-=b,b-=b),c<0&&(a-=c,c-=c),e<0&&(b-=e,e-=e),c>E&&(g=c-E,a-=g,c-=g),e>F&&(g=e-F,b-=g,e-=g),a>E&&(g=a-F,e-=g,b-=g),b>F&&(g=b-F,e-=g,b-=g),q(o(a,b,c,e))}function q(a){return{x:a[0],y:a[1],x2:a[2],y2:a[3],w:a[2]-a[0],h:a[3]-a[1]}}var a=0,b=0,c=0,e=0,f,g;return{flipCoords:o,setPressed:h,setCurrent:i,getOffset:j,moveOffset:k,getCorner:l,getFixed:m}}(),ba=function(){function f(a,b){e.left.css({height:i(b)}),e.right.css({height:i(b)})}function g(){return h(_.getFixed())}function h(a){e.top.css({left:i(a.x),width:i(a.w),height:i(a.y)}),e.bottom.css({top:i(a.y2),left:i(a.x),width:i(a.w),height:i(F-a.y2)}),e.right.css({left:i(a.x2),width:i(E-a.x2)}),e.left.css({width:i(a.x)})}function j(){return a("
").css({position:"absolute",backgroundColor:d.shadeColor||d.bgColor}).appendTo(c)}function k(){b||(b=!0,c.insertBefore(D),g(),bb.setBgOpacity(1,0,1),H.hide(),l(d.shadeColor||d.bgColor,1),bb. +isAwake()?n(d.bgOpacity,1):n(1,1))}function l(a,b){bq(p(),a,b)}function m(){b&&(c.remove(),H.show(),b=!1,bb.isAwake()?bb.setBgOpacity(d.bgOpacity,1,1):(bb.setBgOpacity(1,1,1),bb.disableHandles()),bq(G,0,1))}function n(a,e){b&&(d.bgFade&&!e?c.animate({opacity:1-a},{queue:!1,duration:d.fadeTime}):c.css({opacity:1-a}))}function o(){d.shade?k():m(),bb.isAwake()&&n(d.bgOpacity)}function p(){return c.children()}var b=!1,c=a("
").css({position:"absolute",zIndex:240,opacity:0}),e={top:j(),left:j().height(F),right:j().height(F),bottom:j()};return{update:g,updateRaw:h,getShades:p,setBgColor:l,enable:k,disable:m,resize:f,refresh:o,opacity:n}}(),bb=function(){function k(b){var c=a("
").css({position:"absolute",opacity:d.borderOpacity}).addClass(j(b));return I.append(c),c}function l(b,c){var d=a("
").mousedown(s(b)).css({cursor:b+"-resize",position:"absolute",zIndex:c}).addClass("ord-"+b);return Z.support&&d.bind("touchstart.jcrop",Z.createDragger(b)),J.append(d),d}function m(a){var b=d.handleSize,e=l(a,c++ +).css({opacity:d.handleOpacity}).addClass(j("handle"));return b&&e.width(b).height(b),e}function n(a){return l(a,c++).addClass("jcrop-dragbar")}function o(a){var b;for(b=0;b').css({position:"fixed",left:"-120px",width:"12px"}).addClass("jcrop-keymgr"),c=a("
").css({position:"absolute",overflow:"hidden"}).append(b);return d.keySupport&&(b.keydown(i).blur(f),h||!d.fixedSupport?(b.css({position:"absolute",left:"-20px"}),c.append(b).insertBefore(D)):b.insertBefore(D)),{watchKeys:e}}();Z.support&&M.bind("touchstart.jcrop",Z.newSelection),J.hide(),br(!0);var bs={setImage:bp,animateTo:bf,setSelect:bg,setOptions:bk,tellSelect:bi,tellScaled:bj,setClass:be,disable:bl,enable:bm,cancel:bn,release:bb.release,destroy:bo,focus:bd.watchKeys,getBounds:function(){return[E*T,F*U]},getWidgetSize:function(){return[E,F]},getScaleFactor:function(){return[T,U]},getOptions:function(){return d},ui:{holder:G,selection:K}};return g&&G.bind("selectstart",function(){return!1}),A.data("Jcrop",bs),bs},a.fn.Jcrop=function(b,c){var d;return this.each(function(){if(a(this).data("Jcrop")){if( +b==="api")return a(this).data("Jcrop");a(this).data("Jcrop").setOptions(b)}else this.tagName=="IMG"?a.Jcrop.Loader(this,function(){a(this).css({display:"block",visibility:"hidden"}),d=a.Jcrop(this,b),a.isFunction(c)&&c.call(d)}):(a(this).css({display:"block",visibility:"hidden"}),d=a.Jcrop(this,b),a.isFunction(c)&&c.call(d))}),this},a.Jcrop.Loader=function(b,c,d){function g(){f.complete?(e.unbind(".jcloader"),a.isFunction(c)&&c.call(f)):window.setTimeout(g,50)}var e=a(b),f=e[0];e.bind("load.jcloader",g).bind("error.jcloader",function(b){e.unbind(".jcloader"),a.isFunction(d)&&d.call(f)}),f.complete&&a.isFunction(c)&&(e.unbind(".jcloader"),c.call(f))},a.Jcrop.defaults={allowSelect:!0,allowMove:!0,allowResize:!0,trackDocument:!0,baseClass:"jcrop",addClass:null,bgColor:"black",bgOpacity:.6,bgFade:!1,borderOpacity:.4,handleOpacity:.5,handleSize:null,aspectRatio:0,keySupport:!0,createHandles:["n","s","e","w","nw","ne","se","sw"],createDragbars:["n","s","e","w"],createBorders:["n","s","e","w"],drawBorders:!0,dragEdges +:!0,fixedSupport:!0,touchSupport:null,shade:null,boxWidth:0,boxHeight:0,boundary:2,fadeTime:400,animationDelay:20,swingSpeed:3,minSelect:[0,0],maxSize:[0,0],minSize:[0,0],onChange:function(){},onSelect:function(){},onDblClick:function(){},onRelease:function(){}}})(jQuery); \ No newline at end of file diff --git a/frontend/src/__global/js/image_cropping/js/jquery.color.js b/frontend/src/__global/js/image_cropping/js/jquery.color.js new file mode 100644 index 000000000..4b0a6f492 --- /dev/null +++ b/frontend/src/__global/js/image_cropping/js/jquery.color.js @@ -0,0 +1,716 @@ +/* eslint-disable */ +/*! + * jQuery Color Animations v2.0pre + * http://jquery.org/ + * + * Copyright 2011 John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + */ + +(function (jQuery, undefined) { + var stepHooks = 'backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color outlineColor'.split(' ') + + // plusequals test for += 100 -= 100 + + var rplusequals = /^([\-+])=\s*(\d+\.?\d*)/ + + // a set of RE's that can match strings and generate color tuples. + + var stringParsers = [{ + re: /rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d+(?:\.\d+)?)\s*)?\)/, + parse: function (execResult) { + return [ + execResult[ 1 ], + execResult[ 2 ], + execResult[ 3 ], + execResult[ 4 ] + ] + } + }, { + re: /rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d+(?:\.\d+)?)\s*)?\)/, + parse: function (execResult) { + return [ + 2.55 * execResult[1], + 2.55 * execResult[2], + 2.55 * execResult[3], + execResult[ 4 ] + ] + } + }, { + re: /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/, + parse: function (execResult) { + return [ + parseInt(execResult[ 1 ], 16), + parseInt(execResult[ 2 ], 16), + parseInt(execResult[ 3 ], 16) + ] + } + }, { + re: /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/, + parse: function (execResult) { + return [ + parseInt(execResult[ 1 ] + execResult[ 1 ], 16), + parseInt(execResult[ 2 ] + execResult[ 2 ], 16), + parseInt(execResult[ 3 ] + execResult[ 3 ], 16) + ] + } + }, { + re: /hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d+(?:\.\d+)?)\s*)?\)/, + space: 'hsla', + parse: function (execResult) { + return [ + execResult[1], + execResult[2] / 100, + execResult[3] / 100, + execResult[4] + ] + } + }] + + // jQuery.Color( ) + + var color = jQuery.Color = function (color, green, blue, alpha) { + return new jQuery.Color.fn.parse(color, green, blue, alpha) + } + + var spaces = { + rgba: { + cache: '_rgba', + props: { + red: { + idx: 0, + type: 'byte', + empty: true + }, + green: { + idx: 1, + type: 'byte', + empty: true + }, + blue: { + idx: 2, + type: 'byte', + empty: true + }, + alpha: { + idx: 3, + type: 'percent', + def: 1 + } + } + }, + hsla: { + cache: '_hsla', + props: { + hue: { + idx: 0, + type: 'degrees', + empty: true + }, + saturation: { + idx: 1, + type: 'percent', + empty: true + }, + lightness: { + idx: 2, + type: 'percent', + empty: true + } + } + } + } + + var propTypes = { + 'byte': { + floor: true, + min: 0, + max: 255 + }, + 'percent': { + min: 0, + max: 1 + }, + 'degrees': { + mod: 360, + floor: true + } + } + + var rgbaspace = spaces.rgba.props + + var support = color.support = {} + + // colors = jQuery.Color.names + + var colors + + // local aliases of functions called often + + var each = jQuery.each + + spaces.hsla.props.alpha = rgbaspace.alpha + + function clamp (value, prop, alwaysAllowEmpty) { + var type = propTypes[ prop.type ] || {} + + var allowEmpty = prop.empty || alwaysAllowEmpty + + if (allowEmpty && value == null) { + return null + } + if (prop.def && value == null) { + return prop.def + } + if (type.floor) { + value = ~~value + } else { + value = parseFloat(value) + } + if (value == null || isNaN(value)) { + return prop.def + } + if (type.mod) { + value = value % type.mod + // -10 -> 350 + return value < 0 ? type.mod + value : value + } + + // for now all property types without mod have min and max + return type.min > value ? type.min : type.max < value ? type.max : value + } + + function stringParse (string) { + var inst = color() + + var rgba = inst._rgba = [] + + string = string.toLowerCase() + + each(stringParsers, function (i, parser) { + var match = parser.re.exec(string) + + var values = match && parser.parse(match) + + var parsed + + var spaceName = parser.space || 'rgba' + + var cache = spaces[ spaceName ].cache + + if (values) { + parsed = inst[ spaceName ](values) + + // if this was an rgba parse the assignment might happen twice + // oh well.... + inst[ cache ] = parsed[ cache ] + rgba = inst._rgba = parsed._rgba + + // exit each( stringParsers ) here because we matched + return false + } + }) + + // Found a stringParser that handled it + if (rgba.length !== 0) { + // if this came from a parsed string, force "transparent" when alpha is 0 + // chrome, (and maybe others) return "transparent" as rgba(0,0,0,0) + if (Math.max.apply(Math, rgba) === 0) { + jQuery.extend(rgba, colors.transparent) + } + return inst + } + + // named colors / default - filter back through parse function + if (string = colors[ string ]) { + return string + } + } + + color.fn = color.prototype = { + constructor: color, + parse: function (red, green, blue, alpha) { + if (red === undefined) { + this._rgba = [ null, null, null, null ] + return this + } + if (red instanceof jQuery || red.nodeType) { + red = red instanceof jQuery ? red.css(green) : jQuery(red).css(green) + green = undefined + } + + var inst = this + + var type = jQuery.type(red) + + var rgba = this._rgba = [] + + var source + + // more than 1 argument specified - assume ( red, green, blue, alpha ) + if (green !== undefined) { + red = [ red, green, blue, alpha ] + type = 'array' + } + + if (type === 'string') { + return this.parse(stringParse(red) || colors._default) + } + + if (type === 'array') { + each(rgbaspace, function (key, prop) { + rgba[ prop.idx ] = clamp(red[ prop.idx ], prop) + }) + return this + } + + if (type === 'object') { + if (red instanceof color) { + each(spaces, function (spaceName, space) { + if (red[ space.cache ]) { + inst[ space.cache ] = red[ space.cache ].slice() + } + }) + } else { + each(spaces, function (spaceName, space) { + each(space.props, function (key, prop) { + var cache = space.cache + + // if the cache doesn't exist, and we know how to convert + if (!inst[ cache ] && space.to) { + // if the value was null, we don't need to copy it + // if the key was alpha, we don't need to copy it either + if (red[ key ] == null || key === 'alpha') { + return + } + inst[ cache ] = space.to(inst._rgba) + } + + // this is the only case where we allow nulls for ALL properties. + // call clamp with alwaysAllowEmpty + inst[ cache ][ prop.idx ] = clamp(red[ key ], prop, true) + }) + }) + } + return this + } + }, + is: function (compare) { + var is = color(compare) + + var same = true + + var myself = this + + each(spaces, function (_, space) { + var isCache = is[ space.cache ] + + var localCache + if (isCache) { + localCache = myself[ space.cache ] || space.to && space.to(myself._rgba) || [] + each(space.props, function (_, prop) { + if (isCache[ prop.idx ] != null) { + same = (isCache[ prop.idx ] === localCache[ prop.idx ]) + return same + } + }) + } + return same + }) + return same + }, + _space: function () { + var used = [] + + var inst = this + each(spaces, function (spaceName, space) { + if (inst[ space.cache ]) { + used.push(spaceName) + } + }) + return used.pop() + }, + transition: function (other, distance) { + var end = color(other) + + var spaceName = end._space() + + var space = spaces[ spaceName ] + + var start = this[ space.cache ] || space.to(this._rgba) + + var result = start.slice() + + end = end[ space.cache ] + each(space.props, function (key, prop) { + var index = prop.idx + + var startValue = start[ index ] + + var endValue = end[ index ] + + var type = propTypes[ prop.type ] || {} + + // if null, don't override start value + if (endValue === null) { + return + } + // if null - use end + if (startValue === null) { + result[ index ] = endValue + } else { + if (type.mod) { + if (endValue - startValue > type.mod / 2) { + startValue += type.mod + } else if (startValue - endValue > type.mod / 2) { + startValue -= type.mod + } + } + result[ prop.idx ] = clamp((endValue - startValue) * distance + startValue, prop) + } + }) + return this[ spaceName ](result) + }, + blend: function (opaque) { + // if we are already opaque - return ourself + if (this._rgba[ 3 ] === 1) { + return this + } + + var rgb = this._rgba.slice() + + var a = rgb.pop() + + var blend = color(opaque)._rgba + + return color(jQuery.map(rgb, function (v, i) { + return (1 - a) * blend[ i ] + a * v + })) + }, + toRgbaString: function () { + var prefix = 'rgba(' + + var rgba = jQuery.map(this._rgba, function (v, i) { + return v == null ? (i > 2 ? 1 : 0) : v + }) + + if (rgba[ 3 ] === 1) { + rgba.pop() + prefix = 'rgb(' + } + + return prefix + rgba.join(',') + ')' + }, + toHslaString: function () { + var prefix = 'hsla(' + + var hsla = jQuery.map(this.hsla(), function (v, i) { + if (v == null) { + v = i > 2 ? 1 : 0 + } + + // catch 1 and 2 + if (i && i < 3) { + v = Math.round(v * 100) + '%' + } + return v + }) + + if (hsla[ 3 ] === 1) { + hsla.pop() + prefix = 'hsl(' + } + return prefix + hsla.join(',') + ')' + }, + toHexString: function (includeAlpha) { + var rgba = this._rgba.slice() + + var alpha = rgba.pop() + + if (includeAlpha) { + rgba.push(~~(alpha * 255)) + } + + return '#' + jQuery.map(rgba, function (v, i) { + // default to 0 when nulls exist + v = (v || 0).toString(16) + return v.length === 1 ? '0' + v : v + }).join('') + }, + toString: function () { + return this._rgba[ 3 ] === 0 ? 'transparent' : this.toRgbaString() + } + } + color.fn.parse.prototype = color.fn + + // hsla conversions adapted from: + // http://www.google.com/codesearch/p#OAMlx_jo-ck/src/third_party/WebKit/Source/WebCore/inspector/front-end/Color.js&d=7&l=193 + + function hue2rgb (p, q, h) { + h = (h + 1) % 1 + if (h * 6 < 1) { + return p + (q - p) * 6 * h + } + if (h * 2 < 1) { + return q + } + if (h * 3 < 2) { + return p + (q - p) * ((2 / 3) - h) * 6 + } + return p + } + + spaces.hsla.to = function (rgba) { + if (rgba[ 0 ] == null || rgba[ 1 ] == null || rgba[ 2 ] == null) { + return [ null, null, null, rgba[ 3 ] ] + } + var r = rgba[ 0 ] / 255 + + var g = rgba[ 1 ] / 255 + + var b = rgba[ 2 ] / 255 + + var a = rgba[ 3 ] + + var max = Math.max(r, g, b) + + var min = Math.min(r, g, b) + + var diff = max - min + + var add = max + min + + var l = add * 0.5 + + var h; var s + + if (min === max) { + h = 0 + } else if (r === max) { + h = (60 * (g - b) / diff) + 360 + } else if (g === max) { + h = (60 * (b - r) / diff) + 120 + } else { + h = (60 * (r - g) / diff) + 240 + } + + if (l === 0 || l === 1) { + s = l + } else if (l <= 0.5) { + s = diff / add + } else { + s = diff / (2 - add) + } + return [ Math.round(h) % 360, s, l, a == null ? 1 : a ] + } + + spaces.hsla.from = function (hsla) { + if (hsla[ 0 ] == null || hsla[ 1 ] == null || hsla[ 2 ] == null) { + return [ null, null, null, hsla[ 3 ] ] + } + var h = hsla[ 0 ] / 360 + + var s = hsla[ 1 ] + + var l = hsla[ 2 ] + + var a = hsla[ 3 ] + + var q = l <= 0.5 ? l * (1 + s) : l + s - l * s + + var p = 2 * l - q + + var r; var g; var b + + return [ + Math.round(hue2rgb(p, q, h + (1 / 3)) * 255), + Math.round(hue2rgb(p, q, h) * 255), + Math.round(hue2rgb(p, q, h - (1 / 3)) * 255), + a + ] + } + + each(spaces, function (spaceName, space) { + var props = space.props + + var cache = space.cache + + var to = space.to + + var from = space.from + + // makes rgba() and hsla() + color.fn[ spaceName ] = function (value) { + // generate a cache for this space if it doesn't exist + if (to && !this[ cache ]) { + this[ cache ] = to(this._rgba) + } + if (value === undefined) { + return this[ cache ].slice() + } + + var type = jQuery.type(value) + + var arr = (type === 'array' || type === 'object') ? value : arguments + + var local = this[ cache ].slice() + + var ret + + each(props, function (key, prop) { + var val = arr[ type === 'object' ? key : prop.idx ] + if (val == null) { + val = local[ prop.idx ] + } + local[ prop.idx ] = clamp(val, prop) + }) + + if (from) { + ret = color(from(local)) + ret[ cache ] = local + return ret + } else { + return color(local) + } + } + + // makes red() green() blue() alpha() hue() saturation() lightness() + each(props, function (key, prop) { + // alpha is included in more than one space + if (color.fn[ key ]) { + return + } + color.fn[ key ] = function (value) { + var vtype = jQuery.type(value) + + var fn = (key === 'alpha' ? (this._hsla ? 'hsla' : 'rgba') : spaceName) + + var local = this[ fn ]() + + var cur = local[ prop.idx ] + + var match + + if (vtype === 'undefined') { + return cur + } + + if (vtype === 'function') { + value = value.call(this, cur) + vtype = jQuery.type(value) + } + if (value == null && prop.empty) { + return this + } + if (vtype === 'string') { + match = rplusequals.exec(value) + if (match) { + value = cur + parseFloat(match[ 2 ]) * (match[ 1 ] === '+' ? 1 : -1) + } + } + local[ prop.idx ] = value + return this[ fn ](local) + } + }) + }) + + // add .fx.step functions + each(stepHooks, function (i, hook) { + jQuery.cssHooks[ hook ] = { + set: function (elem, value) { + var parsed, backgroundColor, curElem + + if (jQuery.type(value) !== 'string' || (parsed = stringParse(value))) { + value = color(parsed || value) + if (!support.rgba && value._rgba[ 3 ] !== 1) { + curElem = hook === 'backgroundColor' ? elem.parentNode : elem + do { + backgroundColor = jQuery.curCSS(curElem, 'backgroundColor') + } while ( + (backgroundColor === '' || backgroundColor === 'transparent') && + (curElem = curElem.parentNode) && + curElem.style + ) + + value = value.blend(backgroundColor && backgroundColor !== 'transparent' + ? backgroundColor + : '_default') + } + + value = value.toRgbaString() + } + elem.style[ hook ] = value + } + } + jQuery.fx.step[ hook ] = function (fx) { + if (!fx.colorInit) { + fx.start = color(fx.elem, hook) + fx.end = color(fx.end) + fx.colorInit = true + } + jQuery.cssHooks[ hook ].set(fx.elem, fx.start.transition(fx.end, fx.pos)) + } + }) + + // detect rgba support + jQuery(function () { + var div = document.createElement('div') + + var div_style = div.style + + div_style.cssText = 'background-color:rgba(1,1,1,.5)' + support.rgba = div_style.backgroundColor.indexOf('rgba') > -1 + }) + + // Some named colors to work with + // From Interface by Stefan Petre + // http://interface.eyecon.ro/ + colors = jQuery.Color.names = { + aqua: '#00ffff', + azure: '#f0ffff', + beige: '#f5f5dc', + black: '#000000', + blue: '#0000ff', + brown: '#a52a2a', + cyan: '#00ffff', + darkblue: '#00008b', + darkcyan: '#008b8b', + darkgrey: '#a9a9a9', + darkgreen: '#006400', + darkkhaki: '#bdb76b', + darkmagenta: '#8b008b', + darkolivegreen: '#556b2f', + darkorange: '#ff8c00', + darkorchid: '#9932cc', + darkred: '#8b0000', + darksalmon: '#e9967a', + darkviolet: '#9400d3', + fuchsia: '#ff00ff', + gold: '#ffd700', + green: '#008000', + indigo: '#4b0082', + khaki: '#f0e68c', + lightblue: '#add8e6', + lightcyan: '#e0ffff', + lightgreen: '#90ee90', + lightgrey: '#d3d3d3', + lightpink: '#ffb6c1', + lightyellow: '#ffffe0', + lime: '#00ff00', + magenta: '#ff00ff', + maroon: '#800000', + navy: '#000080', + olive: '#808000', + orange: '#ffa500', + pink: '#ffc0cb', + purple: '#800080', + violet: '#800080', + red: '#ff0000', + silver: '#c0c0c0', + white: '#ffffff', + yellow: '#ffff00', + transparent: [ null, null, null, 0 ], + _default: '#ffffff' + } +})(jQuery) diff --git a/frontend/src/__global/js/jquery.runner.js b/frontend/src/__global/js/jquery.runner.js new file mode 100644 index 000000000..9a6ef66f9 --- /dev/null +++ b/frontend/src/__global/js/jquery.runner.js @@ -0,0 +1,296 @@ +/* eslint-disable */ +/*! + * jQuery-runner - v2.3.3 - 2014-08-06 + * https://github.com/jylauril/jquery-runner/ + * Copyright (c) 2014 Jyrki Laurila + */ +(function() { + var Runner, formatTime, meta, pad, runners, uid, _$, _requestAnimationFrame, _uid + + meta = { + version: "2.3.3", + name: "jQuery-runner" + } + + _$ = $ + + if (!(_$ && _$.fn)) { + throw new Error('[' + meta.name + '] jQuery or jQuery-like library is required for this plugin to work') + } + + runners = {} + + pad = function(num) { + return (num < 10 ? '0' : '') + num + } + + _uid = 1 + + uid = function() { + return 'runner' + _uid++ + } + + _requestAnimationFrame = (function(win, raf) { + return win['r' + raf] || win['webkitR' + raf] || win['mozR' + raf] || win['msR' + raf] || function(fn) { + return setTimeout(fn, 30) + } + })(this, 'equestAnimationFrame') + + formatTime = function(time, settings) { + var i, len, ms, output, prefix, separator, step, steps, value, _i, _len + settings = settings || {} + steps = [3600000, 60000, 1000, 10] + separator = ['', ':', ':', '.'] + prefix = '' + output = '' + ms = settings.milliseconds + len = steps.length + value = 0 + if (time < 0) { + time = Math.abs(time) + prefix = '-' + } + for (i = _i = 0, _len = steps.length; _i < _len; i = ++_i) { + step = steps[i] + value = 0 + if (time >= step) { + value = Math.floor(time / step) + time -= value * step + } + if ((value || i > 1 || output) && (i !== len - 1 || ms)) { + output += (output ? separator[i] : '') + pad(value) + } + } + return prefix + output + } + + Runner = (function() { + function Runner(items, options, start) { + var id + if (!(this instanceof Runner)) { + return new Runner(items, options, start) + } + this.items = items + id = this.id = uid() + this.settings = _$.extend({}, this.settings, options) + runners[id] = this + items.each(function(index, element) { + _$(element).data('runner', id) + }) + this.value(this.settings.startAt) + if (start || this.settings.autostart) { + this.start() + } + } + + Runner.prototype.running = false + + Runner.prototype.updating = false + + Runner.prototype.finished = false + + Runner.prototype.interval = null + + Runner.prototype.total = 0 + + Runner.prototype.lastTime = 0 + + Runner.prototype.startTime = 0 + + Runner.prototype.lastLap = 0 + + Runner.prototype.lapTime = 0 + + Runner.prototype.settings = { + autostart: false, + countdown: false, + stopAt: null, + startAt: 0, + milliseconds: true, + format: null + } + + Runner.prototype.value = function(value) { + this.items.each((function(_this) { + return function(item, element) { + var action + item = _$(element) + action = item.is('input') ? 'val' : 'text' + item[action](_this.format(value)) + } + })(this)) + } + + Runner.prototype.format = function(value) { + var format + format = this.settings.format + format = _$.isFunction(format) ? format : formatTime + return format(value, this.settings) + } + + Runner.prototype.update = function() { + var countdown, delta, settings, stopAt, time + if (!this.updating) { + this.updating = true + settings = this.settings + time = _$.now() + stopAt = settings.stopAt + countdown = settings.countdown + delta = time - this.lastTime + this.lastTime = time + if (countdown) { + this.total -= delta + } else { + this.total += delta + } + if (stopAt !== null && ((countdown && this.total <= stopAt) || (!countdown && this.total >= stopAt))) { + this.total = stopAt + this.finished = true + this.stop() + this.fire('runnerFinish') + } + this.value(this.total) + this.updating = false + } + } + + Runner.prototype.fire = function(event) { + this.items.trigger(event, this.info()) + } + + Runner.prototype.start = function() { + var step + if (!this.running) { + this.running = true + if (!this.startTime || this.finished) { + this.reset() + } + this.lastTime = _$.now() + step = (function(_this) { + return function() { + if (_this.running) { + _this.update() + _requestAnimationFrame(step) + } + } + })(this) + _requestAnimationFrame(step) + this.fire('runnerStart') + } + } + + Runner.prototype.stop = function() { + if (this.running) { + this.running = false + this.update() + this.fire('runnerStop') + } + } + + Runner.prototype.toggle = function() { + if (this.running) { + this.stop() + } else { + this.start() + } + } + + Runner.prototype.lap = function() { + var lap, last + last = this.lastTime + lap = last - this.lapTime + if (this.settings.countdown) { + lap = -lap + } + if (this.running || lap) { + this.lastLap = lap + this.lapTime = last + } + last = this.format(this.lastLap) + this.fire('runnerLap') + return last + } + + Runner.prototype.reset = function(stop) { + var nowTime + if (stop) { + this.stop() + } + nowTime = _$.now() + if (typeof this.settings.startAt === 'number' && !this.settings.countdown) { + nowTime -= this.settings.startAt + } + this.startTime = this.lapTime = this.lastTime = nowTime + this.total = this.settings.startAt + this.value(this.total) + this.finished = false + this.fire('runnerReset') + } + + Runner.prototype.info = function() { + var lap + lap = this.lastLap || 0 + return { + running: this.running, + finished: this.finished, + time: this.total, + formattedTime: this.format(this.total), + startTime: this.startTime, + lapTime: lap, + formattedLapTime: this.format(lap), + settings: this.settings + } + } + + return Runner + + })() + + _$.fn.runner = function(method, options, start) { + var id, runner + if (!method) { + method = 'init' + } + if (typeof method === 'object') { + start = options + options = method + method = 'init' + } + id = this.data('runner') + runner = id ? runners[id] : false + switch (method) { + case 'init': + new Runner(this, options, start) + break + case 'info': + if (runner) { + return runner.info() + } + break + case 'reset': + if (runner) { + runner.reset(options) + } + break + case 'lap': + if (runner) { + return runner.lap() + } + break + case 'start': + case 'stop': + case 'toggle': + if (runner) { + return runner[method]() + } + break + case 'version': + return meta.version + default: + _$.error('[' + meta.name + '] Method ' + method + ' does not exist') + } + return this + } + + _$.fn.runner.format = formatTime +}).call(window) diff --git a/frontend/src/__global/js/tinymce/index.js b/frontend/src/__global/js/tinymce/index.js new file mode 100644 index 000000000..9dcb7b0ba --- /dev/null +++ b/frontend/src/__global/js/tinymce/index.js @@ -0,0 +1,42 @@ + +import tinymce from 'tinymce/tinymce' +import './langs/pt_BR.js' + +import 'tinymce/themes/silver' +import 'tinymce/icons/default' + +import 'tinymce/plugins/table' +import 'tinymce/plugins/lists' +import 'tinymce/plugins/code' +import 'tinymce/plugins/visualblocks' + +import 'tinymce/skins/ui/oxide/skin.css' + +window.tinymce = tinymce + +window.removeTinymce = function () { + while (window.tinymce.editors.length > 0) { + window.tinymce.remove(window.tinymce.editors[0]) + } +} + +window.initTextRichEditor = function (elements, readonly = false) { + window.removeTinymce() + const configTinymce = { + selector: elements === null || elements === undefined ? 'textarea' : elements, + forced_root_block: '', + min_height: 200, + language: 'pt_BR', + branding: false, + content_css: 'default', + plugins: ['lists table code visualblocks'], + menubar: 'edit view format table tools', + toolbar: 'undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent' + } + if (readonly) { + configTinymce.readonly = 1 + configTinymce.menubar = false + configTinymce.toolbar = false + } + window.tinymce.init(configTinymce) +} diff --git a/frontend/src/__global/js/tinymce/langs/pt_BR.js b/frontend/src/__global/js/tinymce/langs/pt_BR.js new file mode 100644 index 000000000..a7ce42cb5 --- /dev/null +++ b/frontend/src/__global/js/tinymce/langs/pt_BR.js @@ -0,0 +1,262 @@ +/* eslint-disable */ +tinymce.addI18n('pt_BR', { + 'Redo': 'Refazer', + 'Undo': 'Desfazer', + 'Cut': 'Recortar', + 'Copy': 'Copiar', + 'Paste': 'Colar', + 'Select all': 'Selecionar tudo', + 'New document': 'Novo documento', + 'Ok': 'Ok', + 'Cancel': 'Cancelar', + 'Visual aids': 'Ajuda visual', + 'Bold': 'Negrito', + 'Italic': 'It\u00e1lico', + 'Underline': 'Sublinhar', + 'Strikethrough': 'Riscar', + 'Superscript': 'Sobrescrito', + 'Subscript': 'Subscrever', + 'Clear formatting': 'Limpar formata\u00e7\u00e3o', + 'Align left': 'Alinhar \u00e0 esquerda', + 'Align center': 'Centralizar', + 'Align right': 'Alinhar \u00e0 direita', + 'Justify': 'Justificar', + 'Bullet list': 'Lista n\u00e3o ordenada', + 'Numbered list': 'Lista ordenada', + 'Decrease indent': 'Diminuir recuo', + 'Increase indent': 'Aumentar recuo', + 'Close': 'Fechar', + 'Formats': 'Formatos', + 'Your browser doesn\'t support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.': 'Seu navegador n\u00e3o suporta acesso direto \u00e0 \u00e1rea de transfer\u00eancia. Por favor use os atalhos Ctrl+X - C - V do teclado', + 'Headers': 'Cabe\u00e7alhos', + 'Header 1': 'Cabe\u00e7alho 1', + 'Header 2': 'Cabe\u00e7alho 2', + 'Header 3': 'Cabe\u00e7alho 3', + 'Header 4': 'Cabe\u00e7alho 4', + 'Header 5': 'Cabe\u00e7alho 5', + 'Header 6': 'Cabe\u00e7alho 6', + 'Headings': 'Cabe\u00e7alhos', + 'Heading 1': 'Cabe\u00e7alho 1', + 'Heading 2': 'Cabe\u00e7alho 2', + 'Heading 3': 'Cabe\u00e7alho 3', + 'Heading 4': 'Cabe\u00e7alho 4', + 'Heading 5': 'Cabe\u00e7alho 5', + 'Heading 6': 'Cabe\u00e7alho 6', + 'Preformatted': 'Preformatado', + 'Div': 'Container', + 'Pre': 'Pre', + 'Code': 'C\u00f3digo', + 'Paragraph': 'Par\u00e1grafo', + 'Blockquote': 'Aspas', + 'Inline': 'Em linha', + 'Blocks': 'Blocos', + 'Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.': 'O comando colar est\u00e1 agora em modo texto plano. O conte\u00fado ser\u00e1 colado como texto plano at\u00e9 voc\u00ea desligar esta op\u00e7\u00e3o.', + 'Font Family': 'Fonte', + 'Font Sizes': 'Tamanho', + 'Class': 'Classe', + 'Browse for an image': 'Procure uma imagem', + 'OR': 'OU', + 'Drop an image here': 'Arraste uma imagem aqui', + 'Upload': 'Carregar', + 'Block': 'Bloco', + 'Align': 'Alinhamento', + 'Default': 'Padr\u00e3o', + 'Circle': 'C\u00edrculo', + 'Disc': 'Disco', + 'Square': 'Quadrado', + 'Lower Alpha': 'a. b. c. ...', + 'Lower Greek': '\u03b1. \u03b2. \u03b3. ...', + 'Lower Roman': 'i. ii. iii. ...', + 'Upper Alpha': 'A. B. C. ...', + 'Upper Roman': 'I. II. III. ...', + 'Anchor': '\u00c2ncora', + 'Name': 'Nome', + 'Id': 'Id', + 'Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.': 'Id deve come\u00e7ar com uma letra, seguido apenas por letras, n\u00fameros, tra\u00e7os, pontos, dois pontos ou sublinhados.', + 'You have unsaved changes are you sure you want to navigate away?': 'Voc\u00ea tem mudan\u00e7as n\u00e3o salvas. Voc\u00ea tem certeza que deseja sair?', + 'Restore last draft': 'Restaurar \u00faltimo rascunho', + 'Special character': 'Caracteres especiais', + 'Source code': 'C\u00f3digo fonte', + 'Insert/Edit code sample': 'Inserir/Editar c\u00f3digo de exemplo', + 'Language': 'Idioma', + 'Code sample': 'Exemplo de c\u00f3digo', + 'Color': 'Cor', + 'R': 'R', + 'G': 'G', + 'B': 'B', + 'Left to right': 'Da esquerda para a direita', + 'Right to left': 'Da direita para a esquerda', + 'Emoticons': 'Emoticons', + 'Document properties': 'Propriedades do documento', + 'Title': 'T\u00edtulo', + 'Keywords': 'Palavras-chave', + 'Description': 'Descri\u00e7\u00e3o', + 'Robots': 'Rob\u00f4s', + 'Author': 'Autor', + 'Encoding': 'Codifica\u00e7\u00e3o', + 'Fullscreen': 'Tela cheia', + 'Action': 'A\u00e7\u00e3o', + 'Shortcut': 'Atalho', + 'Help': 'Ajuda', + 'Address': 'Endere\u00e7o', + 'Focus to menubar': 'Foco no menu', + 'Focus to toolbar': 'Foco na barra de ferramentas', + 'Focus to element path': 'Foco no caminho do elemento', + 'Focus to contextual toolbar': 'Foco na barra de ferramentas contextual', + 'Insert link (if link plugin activated)': 'Inserir link (se o plugin de link estiver ativado)', + 'Save (if save plugin activated)': 'Salvar (se o plugin de salvar estiver ativado)', + 'Find (if searchreplace plugin activated)': 'Procurar (se o plugin de procurar e substituir estiver ativado)', + 'Plugins installed ({0}):': 'Plugins instalados ({0}):', + 'Premium plugins:': 'Plugins premium:', + 'Learn more...': 'Saiba mais...', + 'You are using {0}': 'Voc\u00ea est\u00e1 usando {0}', + 'Plugins': 'Plugins', + 'Handy Shortcuts': 'Atalhos \u00fateis', + 'Horizontal line': 'Linha horizontal', + 'Insert/edit image': 'Inserir/editar imagem', + 'Image description': 'Inserir descri\u00e7\u00e3o', + 'Source': 'Endere\u00e7o da imagem', + 'Dimensions': 'Dimens\u00f5es', + 'Constrain proportions': 'Manter propor\u00e7\u00f5es', + 'General': 'Geral', + 'Advanced': 'Avan\u00e7ado', + 'Style': 'Estilo', + 'Vertical space': 'Espa\u00e7amento vertical', + 'Horizontal space': 'Espa\u00e7amento horizontal', + 'Border': 'Borda', + 'Insert image': 'Inserir imagem', + 'Image': 'Imagem', + 'Image list': 'Lista de Imagens', + 'Rotate counterclockwise': 'Girar em sentido hor\u00e1rio', + 'Rotate clockwise': 'Girar em sentido anti-hor\u00e1rio', + 'Flip vertically': 'Virar verticalmente', + 'Flip horizontally': 'Virar horizontalmente', + 'Edit image': 'Editar imagem', + 'Image options': 'Op\u00e7\u00f5es de Imagem', + 'Zoom in': 'Aumentar zoom', + 'Zoom out': 'Diminuir zoom', + 'Crop': 'Cortar', + 'Resize': 'Redimensionar', + 'Orientation': 'Orienta\u00e7\u00e3o', + 'Brightness': 'Brilho', + 'Sharpen': 'Aumentar nitidez', + 'Contrast': 'Contraste', + 'Color levels': 'N\u00edveis de cor', + 'Gamma': 'Gama', + 'Invert': 'Inverter', + 'Apply': 'Aplicar', + 'Back': 'Voltar', + 'Insert date/time': 'Inserir data/hora', + 'Date/time': 'data/hora', + 'Insert link': 'Inserir link', + 'Insert/edit link': 'Inserir/editar link', + 'Text to display': 'Texto para mostrar', + 'Url': 'Url', + 'Target': 'Alvo', + 'None': 'Nenhum', + 'New window': 'Nova janela', + 'Remove link': 'Remover link', + 'Anchors': '\u00c2ncoras', + 'Link': 'Link', + 'Paste or type a link': 'Cole ou digite um Link', + 'The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?': 'The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?', + 'The URL you entered seems to be an external link. Do you want to add the required http:// prefix?': 'A URL que voc\u00ea informou parece ser um link externo. Deseja incluir o prefixo http://?', + 'Link list': 'Lista de Links', + 'Insert video': 'Inserir v\u00eddeo', + 'Insert/edit video': 'Inserir/editar v\u00eddeo', + 'Insert/edit media': 'Inserir/editar imagem', + 'Alternative source': 'Fonte alternativa', + 'Poster': 'Autor', + 'Paste your embed code below:': 'Insira o c\u00f3digo de incorpora\u00e7\u00e3o abaixo:', + 'Embed': 'Incorporar', + 'Media': 'imagem', + 'Nonbreaking space': 'Espa\u00e7o n\u00e3o separ\u00e1vel', + 'Page break': 'Quebra de p\u00e1gina', + 'Paste as text': 'Colar como texto', + 'Preview': 'Pr\u00e9-visualizar', + 'Print': 'Imprimir', + 'Save': 'Salvar', + 'Find': 'Localizar', + 'Replace with': 'Substituir por', + 'Replace': 'Substituir', + 'Replace all': 'Substituir tudo', + 'Prev': 'Anterior', + 'Next': 'Pr\u00f3ximo', + 'Find and replace': 'Localizar e substituir', + 'Could not find the specified string.': 'N\u00e3o foi poss\u00edvel encontrar o termo especificado', + 'Match case': 'Diferenciar mai\u00fasculas e min\u00fasculas', + 'Whole words': 'Palavras inteiras', + 'Spellcheck': 'Corretor ortogr\u00e1fico', + 'Ignore': 'Ignorar', + 'Ignore all': 'Ignorar tudo', + 'Finish': 'Finalizar', + 'Add to Dictionary': 'Adicionar ao Dicion\u00e1rio', + 'Insert table': 'Inserir tabela', + 'Table properties': 'Propriedades da tabela', + 'Delete table': 'Excluir tabela', + 'Cell': 'C\u00e9lula', + 'Row': 'Linha', + 'Column': 'Coluna', + 'Cell properties': 'Propriedades da c\u00e9lula', + 'Merge cells': 'Agrupar c\u00e9lulas', + 'Split cell': 'Dividir c\u00e9lula', + 'Insert row before': 'Inserir linha antes', + 'Insert row after': 'Inserir linha depois', + 'Delete row': 'Excluir linha', + 'Row properties': 'Propriedades da linha', + 'Cut row': 'Recortar linha', + 'Copy row': 'Copiar linha', + 'Paste row before': 'Colar linha antes', + 'Paste row after': 'Colar linha depois', + 'Insert column before': 'Inserir coluna antes', + 'Insert column after': 'Inserir coluna depois', + 'Delete column': 'Excluir coluna', + 'Cols': 'Colunas', + 'Rows': 'Linhas', + 'Width': 'Largura', + 'Height': 'Altura', + 'Cell spacing': 'Espa\u00e7amento da c\u00e9lula', + 'Cell padding': 'Espa\u00e7amento interno da c\u00e9lula', + 'Caption': 'Legenda', + 'Left': 'Esquerdo', + 'Center': 'Centro', + 'Right': 'Direita', + 'Cell type': 'Tipo de c\u00e9lula', + 'Scope': 'Escopo', + 'Alignment': 'Alinhamento', + 'H Align': 'Alinhamento H', + 'V Align': 'Alinhamento V', + 'Top': 'Superior', + 'Middle': 'Meio', + 'Bottom': 'Inferior', + 'Header cell': 'C\u00e9lula cabe\u00e7alho', + 'Row group': 'Agrupar linha', + 'Column group': 'Agrupar coluna', + 'Row type': 'Tipo de linha', + 'Header': 'Cabe\u00e7alho', + 'Body': 'Corpo', + 'Footer': 'Rodap\u00e9', + 'Border color': 'Cor da borda', + 'Insert template': 'Inserir modelo', + 'Templates': 'Modelos', + 'Template': 'Modelo', + 'Text color': 'Cor do texto', + 'Background color': 'Cor do fundo', + 'Custom...': 'Personalizado...', + 'Custom color': 'Cor personalizada', + 'No color': 'Nenhuma cor', + 'Table of Contents': '\u00edndice de Conte\u00fado', + 'Show blocks': 'Mostrar blocos', + 'Show invisible characters': 'Exibir caracteres invis\u00edveis', + 'Words: {0}': 'Palavras: {0}', + '{0} words': '{0} palavras', + 'File': 'Arquivo', + 'Edit': 'Editar', + 'Insert': 'Inserir', + 'View': 'Visualizar', + 'Format': 'Formatar', + 'Table': 'Tabela', + 'Tools': 'Ferramentas', + 'Powered by {0}': 'Distribu\u00eddo por {0}', + 'Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help': '\u00c1rea de texto formatado. Pressione ALT-F9 para exibir o menu, ALT-F10 para exibir a barra de ferramentas ou ALT-0 para exibir a ajuda' +}) diff --git a/frontend/src/__global/main.js b/frontend/src/__global/main.js new file mode 100644 index 000000000..a30083a01 --- /dev/null +++ b/frontend/src/__global/main.js @@ -0,0 +1,40 @@ +// app - global +// é uma app fundamental para o layout do sapl tradicional. +// é importada pelo backend em seus templates + +import '@fortawesome/fontawesome-free/css/all.css' + +import 'bootstrap' + +import 'webpack-jquery-ui/dialog' +import 'webpack-jquery-ui/sortable' +import 'webpack-jquery-ui/datepicker' +import 'webpack-jquery-ui/autocomplete' +import 'jquery-ui/ui/i18n/datepicker-pt-BR' + +import 'jquery-ui-themes/themes/cupertino/jquery-ui.min.css' + +import 'jquery-mask-plugin' + +import './scss/app.scss' + +import './js/tinymce' +import './js/image_cropping' +import './js/functions' + +import * as moment from 'moment' +import 'moment/locale/pt-br' + +// eslint-disable-next-line +require('imports-loader?window.jQuery=jquery!./js/jquery.runner.js') + +window.$ = $ +window.jQuery = $ + +window.moment = moment + +window.autorModal() +window.refreshMask() +window.refreshDatePicker() + +window.initTextRichEditor('#texto-rico') diff --git a/frontend/src/__global/scss/_header.scss b/frontend/src/__global/scss/_header.scss new file mode 100644 index 000000000..5b6fd425a --- /dev/null +++ b/frontend/src/__global/scss/_header.scss @@ -0,0 +1,49 @@ + +$blue: #02baf2 !default; +$red: #f84545 !default; + +@import "~bootstrap/scss/functions"; +@import "~bootstrap/scss/variables"; +@import "~bootstrap/scss/mixins"; +@import "~bootstrap/scss/reboot"; +@import "~bootstrap/scss/type"; +@import "~bootstrap/scss/images"; +@import "~bootstrap/scss/code"; +@import "~bootstrap/scss/grid"; +@import "~bootstrap/scss/tables"; +@import "~bootstrap/scss/forms"; +@import "~bootstrap/scss/buttons"; +@import "~bootstrap/scss/transitions"; +@import "~bootstrap/scss/dropdown"; +@import "~bootstrap/scss/button-group"; +@import "~bootstrap/scss/input-group"; +@import "~bootstrap/scss/custom-forms"; +@import "~bootstrap/scss/nav"; +@import "~bootstrap/scss/navbar"; +@import "~bootstrap/scss/card"; +@import "~bootstrap/scss/breadcrumb"; +@import "~bootstrap/scss/pagination"; +@import "~bootstrap/scss/badge"; +@import "~bootstrap/scss/jumbotron"; +@import "~bootstrap/scss/alert"; +@import "~bootstrap/scss/progress"; +@import "~bootstrap/scss/media"; +@import "~bootstrap/scss/list-group"; +@import "~bootstrap/scss/close"; +@import "~bootstrap/scss/toasts"; +@import "~bootstrap/scss/modal"; +@import "~bootstrap/scss/tooltip"; +@import "~bootstrap/scss/popover"; +@import "~bootstrap/scss/carousel"; +@import "~bootstrap/scss/spinners"; +@import "~bootstrap/scss/utilities"; +@import "~bootstrap/scss/print"; + +@each $color, $value in $theme-colors { + .btn-outline-#{$color} { + @include button-outline-variant($value); + border-color: #d6e1e5; + } +} + + diff --git a/frontend/src/__global/scss/app.scss b/frontend/src/__global/scss/app.scss new file mode 100644 index 000000000..af71f324c --- /dev/null +++ b/frontend/src/__global/scss/app.scss @@ -0,0 +1,4 @@ +@import "header"; + +@import "libs/libs"; +@import "layouts/layouts"; diff --git a/frontend/src/__global/scss/layouts/_footer.scss b/frontend/src/__global/scss/layouts/_footer.scss new file mode 100644 index 000000000..26185c7da --- /dev/null +++ b/frontend/src/__global/scss/layouts/_footer.scss @@ -0,0 +1,25 @@ + +body { + margin-bottom: 160px; +} +.footer { + background: #364347; + color: white; + text-align: center; + position: absolute; + width: 100%; + bottom: 0px; + p { + color: white; + margin-top: 10px; + } + .container { + padding-top: 25px; + } +} + +@media (max-width: 991px) { + .footer { + position: relative; + } +} diff --git a/frontend/src/__global/scss/layouts/_globals.scss b/frontend/src/__global/scss/layouts/_globals.scss new file mode 100644 index 000000000..bc89c2f65 --- /dev/null +++ b/frontend/src/__global/scss/layouts/_globals.scss @@ -0,0 +1,190 @@ +html { + position: relative; + min-height: 100%; +} + +h1, h2, h3, h4, h5, h6, form, dl, dt, dd, p, div, img, a { + margin: 0; + padding: 0; +} +h1, .h1 { + font-size: 30px; +} +h2, .h2 { + font-size: 24px; +} +h3, .h3 { + font-size: 20px; +} +h4, .h4 { + font-size: 16px; +} +h5, .h5 { + font-size: 14px; +} +h6, .h6 { + font-size: 12px; +} + +p { + margin: 0.25em 0; + &.control-label { + font-weight: bold; + } +} + +label { + margin-bottom: 0; + line-height: 1; +} +input[type=checkbox], input[type=radio] { + margin: 0 5px 0 0; + position: relative; +} + +fieldset { + fieldset { + font-size: 95%; + legend { + font-size: 18px; + } + } +} +ul { + margin: 0; +} +.hidden { + display: none; +} + +.form-control-static { + padding: 0.2em 0; + padding-left: 12px; + background-color: #f7f7f7; + &:empty { + display: none; + } +} + +.legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 20px; + font-size: 21px; + line-height: inherit; + color: #333; + border: 0; + border-bottom: 1px solid #e5e5e5; + clear: both; +} + +.page-header { + margin: 20px 0px 10px; +} + +.caret { + &.top { + transform: rotate(180deg); + } +} + +.lista-parlamentares .table td { + vertical-align: middle; +} +small { + color: #777; +} + +.container-tabaux { + .sidebar-tabaux { + background: #fafafa; + margin-top: -70px; + padding: 10px; + border: 1px solid #eee; + .navbar-right { + margin: 0; + } + .nav-pills > li + li { + margin-left: 0px; + } + li { + width: 100%; + } + span { + display: none; + } + .dropdown-menu { + padding: 0px; + right: 10px; + margin-top: -5px; + overflow: hidden; + a { + border: 0px; + } + } + } + + ul { + list-style: none; + padding: 0; + } + + .list { + font-family: "SourceSansProSemiBold", Helvetica, Arial, sans-serif; + font-size: 0px; + display: table; + width: 100%; + margin: 0; + + ul { + display: table; + width: 100%; + margin: 0; + } + + li { + width: calc(50%); + display: inline-block; + position: relative; + } + & > li { + width: 100%; + border-bottom: 1px solid #eee; + padding-bottom: 20px; + margin-bottom: 20px; + } + + .head_title { + color: #364347; + font-size: 1.7rem; + text-transform: none; + } + + a { + span { + display: none; + } + } + } +} +.mce-branding.mce-label { + display: none; +} + +.dont-break-out { + overflow-wrap: break-word; + word-wrap: break-word; + word-break: break-word; + + /*-ms-hyphens: auto; + -moz-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto;*/ +} + +@media print { + a[href]:after { + content: none !important; + } +} diff --git a/frontend/src/__global/scss/layouts/_home_index.scss b/frontend/src/__global/scss/layouts/_home_index.scss new file mode 100644 index 000000000..d85ce05a3 --- /dev/null +++ b/frontend/src/__global/scss/layouts/_home_index.scss @@ -0,0 +1,188 @@ + +.container-home { + position: relative; + padding: 2em 1.5em 1.5em 1.5em; + max-width: 1000px; + margin: 0 auto; + a:hover { + color: #444; + -webkit-transition: 0.3s ease-in; + -moz-transition: 0.3s ease-in; + -o-transition: 0.3s ease-in + } + + #homeIndex { + text-align: center; + } + + .homeBanner span { + color: white; + font-size: 32px; + font-weight: 600; + display: inline-block; + vertical-align: middle; + padding: 2px 45px 4px; + border: 2px solid; + } + + .homeBanner::after { + display: inline-block; + vertical-align: middle; + height: 100%; + } + + .homeBlock { + display: inline-block; + position: relative; + background-color: #F3F3F3; + width: 190px; + height: 260px; + margin: 3px; + text-align: center; + font-size: 0; + overflow: hidden; + } + + .homeBlock > a { + display: block; + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; + } + + .homeBlock::after { + content: ''; + display: inline-block; + vertical-align: middle; + height: 100%; + overflow: visible; + clear: none; + visibility: initial; + } + + .homeContent { + position: relative; + padding: 10px; + text-align: justify; + font-size: 14px; + color: #FFF; + opacity: 0; + transition: opacity 0.5s ease; + display: inline-block; + vertical-align: middle; + } + + .homeContent p { + display: block; + line-height: 13px; + font-size: 80%; + color: white; + } + + .homeIcon { + position: relative; + display: inline-block; + width: 105px; + height: 105px; + border-radius: 50%; + background: #364347; + z-index: 1; + } + + .homeIcon::before { + content: ''; + position: absolute; + width: 100%; + height: 100%; + border-radius: 50%; + background: #364347; + top: 0; + left: 0; + transform: scale(0.95); + transition: transform 0.6s ease; + } + + .homeIcon img { + position: absolute; + margin: auto; + top: 0; + bottom: 0; + right: 0; + left: 0; + transition: opacity 0.4s 0.4s ease; + } + + .homeFront { + position: absolute; + top: 46%; + width: 100%; + font-size: 0; + transform: translateY(-60%); + + } + + .homeFront h2 { + position: absolute; + margin-top: 18px; + font-size: 22px; + font-weight: 700; + color: #595959 !important; + width: 100%; + padding: 0 6%; + z-index: 0; + } + + .homeTitle { + display: block; + height: 32px; + text-align: center; + width: 100%; + opacity: 0; + transition: opacity 0.4s ease; + } + + .homeTitle::before { + content: ''; + display: inline-block; + vertical-align: middle; + height: 100%; + } + + .homeTitle h2 { + display: inline-block; + vertical-align: middle; + max-width: 110px; + font-size: 14px; + color: white !important; + line-height: 1em; + } + + .homeTitle img { + display: inline-block; + vertical-align: middle; + height: 30px; + margin-right: 5px; + } + + .homeBlock:hover .homeIcon::before { + transform: scale(3.6) translateY(7px); + } + + .homeBlock:hover .homeContent{ + opacity: 1; + transition-delay: 0.2s; + } + + .homeBlock:hover .homeIcon img { + opacity: 0; + transition-duration: 0.2s; + transition-delay: 0s; + } + + .homeBlock:hover .homeTitle { + opacity: 1; + } + +} \ No newline at end of file diff --git a/frontend/src/__global/scss/layouts/_layouts.scss b/frontend/src/__global/scss/layouts/_layouts.scss new file mode 100644 index 000000000..dbd1d0987 --- /dev/null +++ b/frontend/src/__global/scss/layouts/_layouts.scss @@ -0,0 +1,6 @@ +@import "globals"; + +@import "home_index"; + +@import "masthead"; +@import "footer"; \ No newline at end of file diff --git a/frontend/src/__global/scss/layouts/_masthead.scss b/frontend/src/__global/scss/layouts/_masthead.scss new file mode 100644 index 000000000..bcb4b9727 --- /dev/null +++ b/frontend/src/__global/scss/layouts/_masthead.scss @@ -0,0 +1,75 @@ +.masthead { + padding: 10px; + .navbar-brand { + padding: 0px; + color: $headings-color; + font-size: 24px; + img.img-responsive { + height: 95px; + display: inline-block; + } + small { + color: #93A4AA; + font-size: 75%; + line-height: 25px; + } + .vcenter { + display: inline-block; + vertical-align: middle; + float: none; + padding: 10px; + line-height: 1.5rem; + } + } + .nav-link { + padding: 0.3rem 0.5rem; + margin: 0 1px; + &:hover { + background-color: #b2c6cd; + color: #ffffff; + } + } +} + +@media (max-width: 1091px) { + .masthead { + .navbar-brand { + font-size: 22px; + img.img-responsive { + height: 60px; + } + } + } +} +@media (max-width: 767px) { + .masthead { + text-align: center; + .container { + max-width: 100%; + padding: 0; + } + .navbar-brand { + white-space: normal; + margin: 0; + .vcenter { + display: block; + line-height: 1em; + } + } + } +} + +@media (max-width: 576px) { + .masthead { + .navbar-brand { + font-size: 1.2rem; + } + } +} +@media (max-width: 360px) { + .masthead { + .navbar-brand { + font-size: 1rem; + } + } +} \ No newline at end of file diff --git a/frontend/src/__global/scss/libs/bootstrap/_nav_navbar.scss b/frontend/src/__global/scss/libs/bootstrap/_nav_navbar.scss new file mode 100644 index 000000000..3438db85d --- /dev/null +++ b/frontend/src/__global/scss/libs/bootstrap/_nav_navbar.scss @@ -0,0 +1,119 @@ +.navbar { + padding: 0; +} + +.navbar-nav { + flex-basis: 100%; + a { + white-space: nowrap; + color: #93a4aa; + } + .nav-link { + padding-top: 0; + padding-bottom: 0; + line-height: 4.5rem; + } + .dropdown-menu { + background-color: #20282a; + margin: 0; + border: 0; + border-radius: 0; + padding: 0; + } + .dropdown-item { + padding: 0; + &:first-child, &:last-child { + border-radius: 0; + } + a { + padding: 0 $grid-gutter-width / 2; + line-height: 2.3rem; + display: block; + text-decoration: none; + min-width: 15rem; + } + &:hover { + background-color: #364347; + a { + color: white; + } + } + } + .pesquisa { + .dropdown-menu { + min-width: 15rem; + } + } + .search-form { + padding: $grid-gutter-width / 3; + min-width: 20%;; + } + a:not([href]):not([tabindex]) { + color: #777; + } + + &.justify-content-end { + .dropdown-menu { + left: auto; + right: 0px; + } + } +} +.nav-pills { + .dropdown-menu { + padding: 0; + } + .dropdown-item { + a { + display: block; + } + &.active { + a { + color: white; + } + } + } + +} + +@media (max-width: 1199px) { + nav { + .container { + max-width: none; + flex-basis: 100%; + } + .caret { + margin-left: -3px; + } + } +} + +@media (max-width: 1091px) { + .navbar-expand-lg { + .navbar-nav { + .nav-link { + padding-left: 4px; + padding-right: 4px; + font-size: 0.95rem; + } + } + } +} + +@media (max-width: 991px) { + .navbar { + padding: 5px; + } + .navbar-nav { + .nav-link { + line-height: 2.5rem; + } + } + .navbar-nav.justify-content-end { + flex-direction: row; + justify-content: flex-start !important; + & > li { + display: inline-block; + } + } +} diff --git a/frontend/src/__global/scss/libs/bootstrap/_table.scss b/frontend/src/__global/scss/libs/bootstrap/_table.scss new file mode 100644 index 000000000..33448e44f --- /dev/null +++ b/frontend/src/__global/scss/libs/bootstrap/_table.scss @@ -0,0 +1,9 @@ + +@media (max-width: 767px) { + .table{ + width: auto; + white-space: normal; + display:block; + overflow-x: auto; + } +} diff --git a/frontend/src/__global/scss/libs/libs.scss b/frontend/src/__global/scss/libs/libs.scss new file mode 100644 index 000000000..76a4e7c73 --- /dev/null +++ b/frontend/src/__global/scss/libs/libs.scss @@ -0,0 +1,2 @@ +@import "./bootstrap/nav_navbar"; +@import "./bootstrap/table"; diff --git a/frontend/src/assets/img/arrow.png b/frontend/src/assets/img/arrow.png new file mode 100644 index 000000000..1f1a6e5a1 Binary files /dev/null and b/frontend/src/assets/img/arrow.png differ diff --git a/frontend/src/assets/img/authenticated.png b/frontend/src/assets/img/authenticated.png new file mode 100644 index 000000000..872718490 Binary files /dev/null and b/frontend/src/assets/img/authenticated.png differ diff --git a/frontend/src/assets/img/avatar.png b/frontend/src/assets/img/avatar.png new file mode 100644 index 000000000..959c168a5 Binary files /dev/null and b/frontend/src/assets/img/avatar.png differ diff --git a/frontend/src/assets/img/beta.png b/frontend/src/assets/img/beta.png new file mode 100644 index 000000000..fe23d0e6d Binary files /dev/null and b/frontend/src/assets/img/beta.png differ diff --git a/frontend/src/assets/img/bg.png b/frontend/src/assets/img/bg.png new file mode 100755 index 000000000..97407ffd2 Binary files /dev/null and b/frontend/src/assets/img/bg.png differ diff --git a/frontend/src/assets/img/brasao_transp.gif b/frontend/src/assets/img/brasao_transp.gif new file mode 100644 index 000000000..2d9ac82c6 Binary files /dev/null and b/frontend/src/assets/img/brasao_transp.gif differ diff --git a/frontend/src/assets/img/down_arrow_select.jpg b/frontend/src/assets/img/down_arrow_select.jpg new file mode 100644 index 000000000..a3a75352d Binary files /dev/null and b/frontend/src/assets/img/down_arrow_select.jpg differ diff --git a/frontend/src/assets/img/etiqueta.png b/frontend/src/assets/img/etiqueta.png new file mode 100644 index 000000000..28db5a89e Binary files /dev/null and b/frontend/src/assets/img/etiqueta.png differ diff --git a/frontend/src/assets/img/favicon.ico b/frontend/src/assets/img/favicon.ico new file mode 100644 index 000000000..b81629808 Binary files /dev/null and b/frontend/src/assets/img/favicon.ico differ diff --git a/frontend/src/assets/img/file.png b/frontend/src/assets/img/file.png new file mode 100644 index 000000000..9bcae6c88 Binary files /dev/null and b/frontend/src/assets/img/file.png differ diff --git a/frontend/src/assets/img/hand-note.png b/frontend/src/assets/img/hand-note.png new file mode 100644 index 000000000..43c757bf1 Binary files /dev/null and b/frontend/src/assets/img/hand-note.png differ diff --git a/frontend/src/assets/img/icon_comissoes.png b/frontend/src/assets/img/icon_comissoes.png new file mode 100644 index 000000000..8ec70e7e1 Binary files /dev/null and b/frontend/src/assets/img/icon_comissoes.png differ diff --git a/frontend/src/assets/img/icon_delete_white.png b/frontend/src/assets/img/icon_delete_white.png new file mode 100644 index 000000000..f06892bff Binary files /dev/null and b/frontend/src/assets/img/icon_delete_white.png differ diff --git a/frontend/src/assets/img/icon_materia_legislativa.png b/frontend/src/assets/img/icon_materia_legislativa.png new file mode 100644 index 000000000..18cdd81f9 Binary files /dev/null and b/frontend/src/assets/img/icon_materia_legislativa.png differ diff --git a/frontend/src/assets/img/icon_mesa_diretora.png b/frontend/src/assets/img/icon_mesa_diretora.png new file mode 100644 index 000000000..12a1b9f13 Binary files /dev/null and b/frontend/src/assets/img/icon_mesa_diretora.png differ diff --git a/frontend/src/assets/img/icon_normas_juridicas.png b/frontend/src/assets/img/icon_normas_juridicas.png new file mode 100644 index 000000000..147681ef8 Binary files /dev/null and b/frontend/src/assets/img/icon_normas_juridicas.png differ diff --git a/frontend/src/assets/img/icon_normas_juridicas_destaque.png b/frontend/src/assets/img/icon_normas_juridicas_destaque.png new file mode 100644 index 000000000..81b19017f Binary files /dev/null and b/frontend/src/assets/img/icon_normas_juridicas_destaque.png differ diff --git a/frontend/src/assets/img/icon_parlamentares.png b/frontend/src/assets/img/icon_parlamentares.png new file mode 100644 index 000000000..fe9f91ac7 Binary files /dev/null and b/frontend/src/assets/img/icon_parlamentares.png differ diff --git a/frontend/src/assets/img/icon_pautas.png b/frontend/src/assets/img/icon_pautas.png new file mode 100644 index 000000000..8d554f4e4 Binary files /dev/null and b/frontend/src/assets/img/icon_pautas.png differ diff --git a/frontend/src/assets/img/icon_plenarias.png b/frontend/src/assets/img/icon_plenarias.png new file mode 100644 index 000000000..b5fdaa97d Binary files /dev/null and b/frontend/src/assets/img/icon_plenarias.png differ diff --git a/frontend/src/assets/img/icon_relatorios.png b/frontend/src/assets/img/icon_relatorios.png new file mode 100644 index 000000000..3bd71c94d Binary files /dev/null and b/frontend/src/assets/img/icon_relatorios.png differ diff --git a/frontend/src/assets/img/icon_save_white.png b/frontend/src/assets/img/icon_save_white.png new file mode 100644 index 000000000..8f9ccbbf1 Binary files /dev/null and b/frontend/src/assets/img/icon_save_white.png differ diff --git a/frontend/src/assets/img/lexml.gif b/frontend/src/assets/img/lexml.gif new file mode 100644 index 000000000..193f9cb55 Binary files /dev/null and b/frontend/src/assets/img/lexml.gif differ diff --git a/frontend/src/assets/img/logo.png b/frontend/src/assets/img/logo.png new file mode 100644 index 000000000..cc8619f2f Binary files /dev/null and b/frontend/src/assets/img/logo.png differ diff --git a/frontend/src/assets/img/logo_cc.png b/frontend/src/assets/img/logo_cc.png new file mode 100644 index 000000000..7301d05b1 Binary files /dev/null and b/frontend/src/assets/img/logo_cc.png differ diff --git a/frontend/src/assets/img/logo_interlegis.png b/frontend/src/assets/img/logo_interlegis.png new file mode 100644 index 000000000..19591933c Binary files /dev/null and b/frontend/src/assets/img/logo_interlegis.png differ diff --git a/frontend/src/assets/img/manual.png b/frontend/src/assets/img/manual.png new file mode 100644 index 000000000..27a2d87c1 Binary files /dev/null and b/frontend/src/assets/img/manual.png differ diff --git a/frontend/src/assets/img/pdflogo.png b/frontend/src/assets/img/pdflogo.png new file mode 100644 index 000000000..ae28bf428 Binary files /dev/null and b/frontend/src/assets/img/pdflogo.png differ diff --git a/frontend/src/assets/img/perfil.png b/frontend/src/assets/img/perfil.png new file mode 100644 index 000000000..d1c4b77ed Binary files /dev/null and b/frontend/src/assets/img/perfil.png differ diff --git a/frontend/src/assets/img/search-gray.png b/frontend/src/assets/img/search-gray.png new file mode 100644 index 000000000..1f1c1c6c9 Binary files /dev/null and b/frontend/src/assets/img/search-gray.png differ diff --git a/frontend/src/assets/img/search.png b/frontend/src/assets/img/search.png new file mode 100644 index 000000000..442814ed8 Binary files /dev/null and b/frontend/src/assets/img/search.png differ diff --git a/frontend/src/assets/img/user.png b/frontend/src/assets/img/user.png new file mode 100644 index 000000000..e8811bcb4 Binary files /dev/null and b/frontend/src/assets/img/user.png differ diff --git a/frontend/webpack-stats.json b/frontend/webpack-stats.json new file mode 100644 index 000000000..6ff46b756 --- /dev/null +++ b/frontend/webpack-stats.json @@ -0,0 +1 @@ +{"status":"done","publicPath":"/static/sapl/frontend/","chunks":{"chunk-vendors":[{"name":"css/chunk-vendors.e8d8c6de.css","publicPath":"/static/sapl/frontend/css/chunk-vendors.e8d8c6de.css","path":"sapl/static/sapl/frontend/css/chunk-vendors.e8d8c6de.css"},{"name":"js/chunk-vendors.8a6bb3dd.js","publicPath":"/static/sapl/frontend/js/chunk-vendors.8a6bb3dd.js","path":"sapl/static/sapl/frontend/js/chunk-vendors.8a6bb3dd.js"},{"name":"css/chunk-vendors.e8d8c6de.css.map","publicPath":"/static/sapl/frontend/css/chunk-vendors.e8d8c6de.css.map","path":"sapl/static/sapl/frontend/css/chunk-vendors.e8d8c6de.css.map"},{"name":"js/chunk-vendors.8a6bb3dd.js.map","publicPath":"/static/sapl/frontend/js/chunk-vendors.8a6bb3dd.js.map","path":"sapl/static/sapl/frontend/js/chunk-vendors.8a6bb3dd.js.map"}],"compilacao":[{"name":"css/compilacao.90ba9ac3.css","publicPath":"/static/sapl/frontend/css/compilacao.90ba9ac3.css","path":"sapl/static/sapl/frontend/css/compilacao.90ba9ac3.css"},{"name":"js/compilacao.2659b00e.js","publicPath":"/static/sapl/frontend/js/compilacao.2659b00e.js","path":"sapl/static/sapl/frontend/js/compilacao.2659b00e.js"},{"name":"css/compilacao.90ba9ac3.css.map","publicPath":"/static/sapl/frontend/css/compilacao.90ba9ac3.css.map","path":"sapl/static/sapl/frontend/css/compilacao.90ba9ac3.css.map"},{"name":"js/compilacao.2659b00e.js.map","publicPath":"/static/sapl/frontend/js/compilacao.2659b00e.js.map","path":"sapl/static/sapl/frontend/js/compilacao.2659b00e.js.map"}],"global":[{"name":"css/global.80b7564c.css","publicPath":"/static/sapl/frontend/css/global.80b7564c.css","path":"sapl/static/sapl/frontend/css/global.80b7564c.css"},{"name":"js/global.9079a4fb.js","publicPath":"/static/sapl/frontend/js/global.9079a4fb.js","path":"sapl/static/sapl/frontend/js/global.9079a4fb.js"},{"name":"css/global.80b7564c.css.map","publicPath":"/static/sapl/frontend/css/global.80b7564c.css.map","path":"sapl/static/sapl/frontend/css/global.80b7564c.css.map"},{"name":"js/global.9079a4fb.js.map","publicPath":"/static/sapl/frontend/js/global.9079a4fb.js.map","path":"sapl/static/sapl/frontend/js/global.9079a4fb.js.map"}],"painel":[{"name":"css/painel.5d957a9b.css","publicPath":"/static/sapl/frontend/css/painel.5d957a9b.css","path":"sapl/static/sapl/frontend/css/painel.5d957a9b.css"},{"name":"js/painel.37936654.js","publicPath":"/static/sapl/frontend/js/painel.37936654.js","path":"sapl/static/sapl/frontend/js/painel.37936654.js"},{"name":"css/painel.5d957a9b.css.map","publicPath":"/static/sapl/frontend/css/painel.5d957a9b.css.map","path":"sapl/static/sapl/frontend/css/painel.5d957a9b.css.map"},{"name":"js/painel.37936654.js.map","publicPath":"/static/sapl/frontend/js/painel.37936654.js.map","path":"sapl/static/sapl/frontend/js/painel.37936654.js.map"}],"parlamentar":[{"name":"css/parlamentar.0e433876.css","publicPath":"/static/sapl/frontend/css/parlamentar.0e433876.css","path":"sapl/static/sapl/frontend/css/parlamentar.0e433876.css"},{"name":"js/parlamentar.84997ad7.js","publicPath":"/static/sapl/frontend/js/parlamentar.84997ad7.js","path":"sapl/static/sapl/frontend/js/parlamentar.84997ad7.js"},{"name":"css/parlamentar.0e433876.css.map","publicPath":"/static/sapl/frontend/css/parlamentar.0e433876.css.map","path":"sapl/static/sapl/frontend/css/parlamentar.0e433876.css.map"},{"name":"js/parlamentar.84997ad7.js.map","publicPath":"/static/sapl/frontend/js/parlamentar.84997ad7.js.map","path":"sapl/static/sapl/frontend/js/parlamentar.84997ad7.js.map"}]}} \ No newline at end of file diff --git a/health_check.py b/health_check.py deleted file mode 100644 index 0a050f5fb..000000000 --- a/health_check.py +++ /dev/null @@ -1,49 +0,0 @@ -from flask import Flask -import requests -import psycopg2 -import json -from sapl.settings import DATABASES, USE_SOLR, SOLR_URL - - -app = Flask(__name__) - - -@app.route('/health') -def health(): - try: - db = DATABASES['default'] - conn = psycopg2.connect(host=db['HOST'], - user=db['USER'], - password=db['PASSWORD'], - database=db['NAME'], - port=db['PORT']) - cursor = conn.cursor() - cursor.execute("SELECT 1;") - resp = {'DATABASE': 'OK'} - except Exception as e: - resp = {'DATABASE': 'ERROR'} - finally: - if cursor: - cursor.close() - conn.close() - - if USE_SOLR: - r = requests.get(SOLR_URL) - if r.ok: - resp.update({'SEARCH_ENGINE': 'OK'}) - else: - resp.update({'SEARCH_ENGINE': 'ERROR'}) - - else: - resp.update({'SEARCH_ENGINE': 'NOT_ENABLED'}) - - return json.dumps(resp) - - -@app.route('/ping') -def ping(): - return "pong" - - -if __name__ == '__main__': - app.run() \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 000000000..6c1cff61e --- /dev/null +++ b/package.json @@ -0,0 +1,57 @@ +{ + "name": "sapl-frontend", + "version": "0.1.0", + "private": true, + "scripts": { + "serve": "vue-cli-service serve", + "build": "vue-cli-service build", + "lint": "vue-cli-service lint" + }, + "dependencies": { + "@fortawesome/fontawesome-free": "^5.13.0", + "axios": "^0.21.1", + "axios-progress-bar": "^1.2.0", + "bootstrap": "^4.4.1", + "bootstrap-vue": "^2.12.0", + "diff": "^4.0.1", + "dotenv": "^6.2.0", + "exports-loader": "^0.7.0", + "imports-loader": "^0.8.0", + "jquery": "^3.5.1", + "jquery-mask-plugin": "^1.14.16", + "jquery-ui-themes": "^1.12.0", + "lodash": "^4.17.19", + "moment": "^2.24.0", + "moment-locales-webpack-plugin": "^1.1.2", + "popper.js": "^1.16.1", + "serialize-javascript": "^3.1.0", + "terser": "^4.6.11", + "tinymce": "^5.6.2", + "vue": "^2.6.11", + "webpack": "^4.43.0", + "webpack-jquery-ui": "^2.0.1", + "websocket-extensions": "^0.1.4" + }, + "devDependencies": { + "@vue/cli-plugin-babel": "^4.3.1", + "@vue/cli-plugin-eslint": "^4.3.1", + "@vue/cli-service": "^4.3.1", + "babel-eslint": "^10.1.0", + "compression-webpack-plugin": "^3.1.0", + "css-loader": "^3.5.2", + "eslint": "^6.8.0", + "eslint-config-standard": "^14.1.1", + "eslint-friendly-formatter": "^4.0.1", + "eslint-loader": "^4.0.0", + "eslint-plugin-import": "^2.20.2", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-promise": "^4.2.1", + "eslint-plugin-standard": "^4.0.1", + "eslint-plugin-vue": "^6.2.2", + "node-sass": "^4.13.1", + "sass-loader": "^8.0.2", + "shelljs": "^0.8.4", + "vue-template-compiler": "^2.6.11", + "webpack-bundle-tracker": "^0.4.3" + } +} diff --git a/pytest.ini b/pytest.ini index d67aa04f7..3a06ad0fe 100644 --- a/pytest.ini +++ b/pytest.ini @@ -9,4 +9,4 @@ python_files = tests.py test_*.py *_tests.py # # Run "py.test --create-db" if you need to recreate the database # -addopts = --reuse-db +addopts = --reuse-db -p no:warnings diff --git a/release.sh b/release.sh index 0be28cb1a..f22d2b19b 100755 --- a/release.sh +++ b/release.sh @@ -30,11 +30,11 @@ FINAL_VERSION= function change_files { - OLD_VERSION=$(grep -E 'interlegis/sapl:'$VERSION_PATTERN docker-compose.yml | cut -d':' -f3) + OLD_VERSION=$(grep -E 'interlegis/sapl:'$VERSION_PATTERN docker/docker-compose.yml | cut -d':' -f3) echo "Atualizando de "$OLD_VERSION" para "$FINAL_VERSION - sed -E -i "s|$OLD_VERSION|$FINAL_VERSION|g" docker-compose.yml + sed -E -i "s|$OLD_VERSION|$FINAL_VERSION|g" docker/docker-compose.yml sed -E -i "s|$OLD_VERSION|$FINAL_VERSION|g" setup.py @@ -65,7 +65,7 @@ function set_rc_version { function commit_and_push { echo "committing..." - git add docker-compose.yml setup.py sapl/settings.py sapl/templates/base.html + git add docker/docker-compose.yml setup.py sapl/settings.py sapl/templates/base.html git commit -m "Release: $FINAL_VERSION" git tag $FINAL_VERSION diff --git a/requirements/dev-requirements.txt b/requirements/dev-requirements.txt index dba8788b2..c13832b67 100644 --- a/requirements/dev-requirements.txt +++ b/requirements/dev-requirements.txt @@ -1,9 +1,9 @@ -r test-requirements.txt autopep8==1.2.4 -beautifulsoup4==4.6.0 +beautifulsoup4==4.9.1 django-debug-toolbar==1.8 -ipdb==0.10.1 +ipdb==0.13.3 pdbpp==0.9.2 pip-review==0.4 pipdeptree==0.10.1 diff --git a/requirements/requirements.txt b/requirements/requirements.txt index c5a1f6fd9..98a0715a4 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -1,11 +1,11 @@ -django>=1.11.29,<2.0 +django==2.2.18 django-haystack==2.8.1 django-filter==2.0.0 -djangorestframework==3.9.1 +djangorestframework==3.11.2 dj-database-url==0.5.0 -django-braces==1.9.0 +django-braces==1.14.0 django-crispy-forms==1.7.2 -django-floppyforms==1.7.0 +django-floppyforms==1.8.0 django-extra-views==0.12.0 django-model-utils==3.1.2 django-reversion==3.0.2 @@ -14,23 +14,23 @@ django-speedinfo==1.4.0 django-extensions==2.1.4 django-image-cropping==1.2 django-webpack-loader==0.6.0 -drf-yasg==1.13.0 -ruamel.yaml>=0.15.34,<0.16.0 +drf-yasg==1.20.0 easy-thumbnails==2.5 python-decouple==3.1 -psycopg2-binary==2.7.6.1 -pyyaml==4.2b1 +psycopg2-binary==2.8.6 +pyyaml==5.3.1 pytz==2019.3 -rtyaml==0.0.5 python-magic==0.4.15 unipath==1.1 WeasyPrint==51 -Pillow==6.2.2 +Pillow==8.1.1 gunicorn==19.9.0 more-itertools==8.2.0 pysolr==3.6.0 PyPDF4==1.27.0 pyoai==2.5.0 +Unidecode==1.1.1 +whitenoise==5.1.0 git+https://github.com/interlegis/trml2pdf git+https://github.com/interlegis/django-admin-bootstrapped diff --git a/requirements/test-requirements.txt b/requirements/test-requirements.txt index 1a4ccd563..5116d1fe7 100644 --- a/requirements/test-requirements.txt +++ b/requirements/test-requirements.txt @@ -1,11 +1,11 @@ -r requirements.txt -coverage==4.1 -django-webtest==1.7.8 +coverage==4.4 +django-webtest==1.9.7 flake8==2.6.2 isort==4.2.5 model-bakery==1.1.0 pep8==1.7.0 -pytest==2.9.2 -pytest-cov==2.3.0 -pytest-django==2.9.1 +pytest==5.4.3 +pytest-cov==2.10.0 +pytest-django==3.8.0 webtest==2.0.21 diff --git a/sapl/.env_test b/sapl/.env_test index 616909348..834c44985 100644 --- a/sapl/.env_test +++ b/sapl/.env_test @@ -1,5 +1,5 @@ DATABASE_URL = postgresql://postgres:@sapldb:/sapl -SECRET_KEY=TravisTest +SECRET_KEY=test++@i1y-6y8ez_=^sfbr!dzuyry#^@v(3g^2d1k9%f=+mhlb DEBUG=False EMAIL_USE_TLS = True EMAIL_PORT = 587 diff --git a/sapl/api/pagination.py b/sapl/api/pagination.py index 3c77a7ee3..d205df3c5 100644 --- a/sapl/api/pagination.py +++ b/sapl/api/pagination.py @@ -9,7 +9,7 @@ class StandardPagination(pagination.PageNumberPagination): max_page_size = 50 def paginate_queryset(self, queryset, request, view=None): - if request.query_params.get('get_all', False) == 'true': + if request.query_params.get('get_all', '').lower() == 'true': return None return super().paginate_queryset(queryset, request, view=view) diff --git a/sapl/api/permissions.py b/sapl/api/permissions.py index b7df6c63a..ae39f8ca9 100644 --- a/sapl/api/permissions.py +++ b/sapl/api/permissions.py @@ -48,6 +48,6 @@ class SaplModelPermissions(DjangoModelPermissions): return ( request.user and - (request.user.is_authenticated() or not self.authenticated_users_only) and + (request.user.is_authenticated or not self.authenticated_users_only) and request.user.has_perms(perms) ) diff --git a/sapl/api/serializers.py b/sapl/api/serializers.py index ebd40add9..2dcb518ba 100644 --- a/sapl/api/serializers.py +++ b/sapl/api/serializers.py @@ -62,6 +62,24 @@ class CasaLegislativaSerializer(serializers.ModelSerializer): model = CasaLegislativa fields = '__all__' + +class ParlamentarSerializer(serializers.ModelSerializer): + + class Meta: + model = Parlamentar + exclude = ["cpf", "rg", "fax", + "endereco_residencia", "municipio_residencia", + "uf_residencia", "cep_residencia", "situacao_militar", + "telefone_residencia", "titulo_eleitor", "fax_residencia"] + + +class ParlamentarEditSerializer(serializers.ModelSerializer): + + class Meta: + model = Parlamentar + fields = '__all__' + + class ParlamentarResumeSerializer(serializers.ModelSerializer): titular = serializers.SerializerMethodField('check_titular') partido = serializers.SerializerMethodField('check_partido') @@ -72,7 +90,6 @@ class ParlamentarResumeSerializer(serializers.ModelSerializer): thumbnail_url = "" try: import os - #import pdb;pdb.set_trace() if not obj.fotografia or not os.path.exists(obj.fotografia.path): return thumbnail_url thumbnail_url = get_backend().get_thumbnail_url( @@ -162,4 +179,4 @@ class ParlamentarResumeSerializer(serializers.ModelSerializer): class Meta: model = Parlamentar - fields = ['id', 'nome_parlamentar', 'fotografia_cropped','fotografia', 'ativo', 'partido', 'titular'] + fields = ['id', 'nome_parlamentar', 'fotografia_cropped', 'fotografia', 'ativo', 'partido', 'titular'] diff --git a/sapl/api/views.py b/sapl/api/views.py index 77db0e05f..f4e853ccd 100644 --- a/sapl/api/views.py +++ b/sapl/api/views.py @@ -3,44 +3,37 @@ import logging from django import apps from django.conf import settings from django.contrib.contenttypes.models import ContentType -from django.core.urlresolvers import reverse_lazy +from django.core.exceptions import ObjectDoesNotExist from django.db.models import Q -from django.db.models.fields.files import FileField from django.db.models.signals import post_save from django.dispatch import receiver +from django.utils import timezone from django.utils.decorators import classonlymethod -from django.utils.text import capfirst from django.utils.translation import ugettext_lazy as _ -import django_filters -from django_filters.filters import CharFilter from django_filters.rest_framework.backends import DjangoFilterBackend -from django_filters.rest_framework.filterset import FilterSet -from django_filters.utils import resolve_field -from django.utils import timezone -from django.core.exceptions import ObjectDoesNotExist from rest_framework import serializers as rest_serializers from rest_framework.authtoken.models import Token from rest_framework.decorators import action, api_view, permission_classes from rest_framework.fields import SerializerMethodField -from rest_framework.response import Response -from rest_framework.viewsets import ModelViewSet from rest_framework.permissions import IsAuthenticated, IsAdminUser - +from rest_framework.response import Response from rest_framework.views import APIView +from rest_framework.viewsets import ModelViewSet from sapl.api.forms import SaplFilterSetMixin from sapl.api.permissions import SaplModelPermissions -from sapl.api.serializers import ChoiceSerializer, ParlamentarResumeSerializer +from sapl.api.serializers import ChoiceSerializer, ParlamentarSerializer,\ + ParlamentarEditSerializer, ParlamentarResumeSerializer from sapl.base.models import Autor, AppConfig, DOC_ADM_OSTENSIVO from sapl.materia.models import Proposicao, TipoMateriaLegislativa,\ MateriaLegislativa, Tramitacao from sapl.norma.models import NormaJuridica +from sapl.parlamentares.models import Mandato, Legislatura from sapl.parlamentares.models import Parlamentar from sapl.protocoloadm.models import DocumentoAdministrativo,\ DocumentoAcessorioAdministrativo, TramitacaoAdministrativo, Anexado from sapl.sessao.models import SessaoPlenaria, ExpedienteSessao from sapl.utils import models_with_gr_for_model, choice_anos_com_sessaoplenaria -from sapl.parlamentares.models import Mandato, Parlamentar, Legislatura @receiver(post_save, sender=settings.AUTH_USER_MODEL) @@ -69,12 +62,11 @@ class BusinessRulesNotImplementedMixin: raise Exception(_("DELETE Delete não implementado")) -class SaplApiViewSet(ModelViewSet): - filter_backends = (DjangoFilterBackend,) - - class SaplApiViewSetConstrutor(): + class SaplApiViewSet(ModelViewSet): + filter_backends = (DjangoFilterBackend,) + _built_sets = {} @classonlymethod @@ -109,47 +101,71 @@ class SaplApiViewSetConstrutor(): object_name = _model._meta.object_name # Caso Exista, pega a classe sapl.api.serializers.{model}Serializer - serializer_name = '{model}Serializer'.format(model=object_name) - _serializer_class = serializers_classes.get(serializer_name, None) + # ou utiliza a base do drf para gerar uma automática para o model + serializer_name = f'{object_name}Serializer' + _serializer_class = serializers_classes.get( + serializer_name, rest_serializers.ModelSerializer) # Caso Exista, pega a classe sapl.api.forms.{model}FilterSet - filter_name = '{model}FilterSet'.format(model=object_name) - _filter_class = filters_classes.get(filter_name, None) + # ou utiliza a base definida em sapl.forms.SaplFilterSetMixin + filter_name = f'{object_name}FilterSet' + _filterset_class = filters_classes.get( + filter_name, SaplFilterSetMixin) def create_class(): + + _meta_serializer = object if not hasattr( + _serializer_class, 'Meta') else _serializer_class.Meta + # Define uma classe padrão para serializer caso não tenha sido # criada a classe sapl.api.serializers.{model}Serializer - class SaplSerializer(rest_serializers.ModelSerializer): + class SaplSerializer(_serializer_class): __str__ = SerializerMethodField() - class Meta: - model = _model - fields = '__all__' + class Meta(_meta_serializer): + if not hasattr(_meta_serializer, 'ref_name'): + ref_name = None + + if not hasattr(_meta_serializer, 'model'): + model = _model + + if hasattr(_meta_serializer, 'exclude'): + exclude = _meta_serializer.exclude + else: + if not hasattr(_meta_serializer, 'fields'): + fields = '__all__' + elif _meta_serializer.fields != '__all__': + fields = list( + _meta_serializer.fields) + ['__str__', ] + else: + fields = _meta_serializer.fields def get___str__(self, obj): return str(obj) + _meta_filterset = object if not hasattr( + _filterset_class, 'Meta') else _filterset_class.Meta + # Define uma classe padrão para filtro caso não tenha sido # criada a classe sapl.api.forms.{model}FilterSet - class SaplFilterSet(SaplFilterSetMixin): - class Meta(SaplFilterSetMixin.Meta): - model = _model + class SaplFilterSet(_filterset_class): + class Meta(_meta_filterset): + if not hasattr(_meta_filterset, 'model'): + model = _model # Define uma classe padrão ModelViewSet de DRF - class ModelSaplViewSet(SaplApiViewSet): + class ModelSaplViewSet(SaplApiViewSetConstrutor.SaplApiViewSet): queryset = _model.objects.all() # Utiliza o filtro customizado pela classe # sapl.api.forms.{model}FilterSet # ou utiliza o trivial SaplFilterSet definido acima - filter_class = _filter_class \ - if _filter_class else SaplFilterSet + filterset_class = SaplFilterSet # Utiliza o serializer customizado pela classe # sapl.api.serializers.{model}Serializer # ou utiliza o trivial SaplSerializer definido acima - serializer_class = _serializer_class \ - if _serializer_class else SaplSerializer + serializer_class = SaplSerializer return ModelSaplViewSet @@ -168,63 +184,63 @@ class SaplApiViewSetConstrutor(): SaplApiViewSetConstrutor.build_class() """ -1. Constroi uma rest_framework.viewsets.ModelViewSet para +1. Constroi uma rest_framework.viewsets.ModelViewSet para todos os models de todas as apps do sapl 2. Define DjangoFilterBackend como ferramenta de filtro dos campos 3. Define Serializer como a seguir: 3.1 - Define um Serializer genérico para cada módel 3.2 - Recupera Serializer customizado em sapl.api.serializers - 3.3 - Para todo model é opcional a existência de + 3.3 - Para todo model é opcional a existência de sapl.api.serializers.{model}Serializer. Caso não seja definido um Serializer customizado, utiliza-se o trivial 4. Define um FilterSet como a seguir: 4.1 - Define um FilterSet genérico para cada módel 4.2 - Recupera FilterSet customizado em sapl.api.forms - 4.3 - Para todo model é opcional a existência de + 4.3 - Para todo model é opcional a existência de sapl.api.forms.{model}FilterSet. Caso não seja definido um FilterSet customizado, utiliza-se o trivial - 4.4 - todos os campos que aceitam lookup 'exact' + 4.4 - todos os campos que aceitam lookup 'exact' podem ser filtrados por default - + 5. SaplApiViewSetConstrutor não cria padrões e/ou exige conhecimento alem dos - exigidos pela DRF. - + exigidos pela DRF. + 6. As rotas são criadas seguindo nome da app e nome do model http://localhost:9000/api/{applabel}/{model_name}/ e seguem as variações definidas em: https://www.django-rest-framework.org/api-guide/routers/#defaultrouter - + 7. Todas as viewsets construídas por SaplApiViewSetConstrutor e suas rotas (paginate list, detail, edit, create, delete) bem como testes em ambiente de desenvolvimento podem ser conferidas em: - http://localhost:9000/api/ + http://localhost:9000/api/ desde que settings.DEBUG=True **SaplApiViewSetConstrutor._built_sets** é um dict de dicts de models conforme: { ... - + 'audiencia': { 'tipoaudienciapublica': TipoAudienciaPublicaViewSet, 'audienciapublica': AudienciaPublicaViewSet, 'anexoaudienciapublica': AnexoAudienciaPublicaViewSet - + ... - + }, - + ... - + 'base': { 'casalegislativa': CasaLegislativaViewSet, 'appconfig': AppConfigViewSet, - + ... - + } - + ... - + } """ @@ -232,9 +248,48 @@ SaplApiViewSetConstrutor.build_class() # das possibilidades para uma classe normal criada a partir de # rest_framework.viewsets.ModelViewSet conforme exemplo para a classe autor -# decorator para recuperar e transformar o default +# decorator que processa um endpoint detail trivial com base no model passado, +# Um endpoint detail geralmente é um conteúdo baseado numa FK com outros possíveis filtros +# e os passados pelo proprio cliente, além de o serializer e o filterset +# ser desse model passado + + +class wrapper_queryset_response_for_drf_action(object): + def __init__(self, model): + self.model = model + + def __call__(self, cls): + + def wrapper(instance_view, *args, **kwargs): + # recupera a viewset do model anotado + iv = instance_view + viewset_from_model = SaplApiViewSetConstrutor._built_sets[ + self.model._meta.app_config][self.model] + + # apossa da instancia da viewset mae do action + # em uma viewset que processa dados do model passado no decorator + iv.queryset = viewset_from_model.queryset + iv.serializer_class = viewset_from_model.serializer_class + iv.filterset_class = viewset_from_model.filterset_class + + iv.queryset = instance_view.filter_queryset( + iv.get_queryset()) + # chama efetivamente o metodo anotado que deve devolver um queryset + # com os filtros específicos definido pelo programador customizador + qs = cls(instance_view, *args, **kwargs) + page = iv.paginate_queryset(qs) + data = iv.get_serializer( + page if page is not None else qs, many=True).data + + return iv.get_paginated_response( + data) if page is not None else Response(data) + + return wrapper + + +# decorator para recuperar e transformar o default class customize(object): def __init__(self, model): self.model = model @@ -262,17 +317,17 @@ class customize(object): @customize(Autor) class _AutorViewSet: """ - Neste exemplo de customização do que foi criado em - SaplApiViewSetConstrutor além do ofertado por + Neste exemplo de customização do que foi criado em + SaplApiViewSetConstrutor além do ofertado por rest_framework.viewsets.ModelViewSet, dentre outras customizações possíveis, foi adicionado as rotas referentes aos relacionamentos genéricos * padrão de ModelViewSet /api/base/autor/ POST - create - /api/base/autor/ GET - list - /api/base/autor/{pk}/ GET - detail - /api/base/autor/{pk}/ PUT - update - /api/base/autor/{pk}/ PATCH - partial_update + /api/base/autor/ GET - list + /api/base/autor/{pk}/ GET - detail + /api/base/autor/{pk}/ PUT - update + /api/base/autor/{pk}/ PATCH - partial_update /api/base/autor/{pk}/ DELETE - destroy * rotas desta classe local criadas pelo método build: @@ -283,7 +338,7 @@ class _AutorViewSet: /api/base/autor/bloco devolve apenas autores que são blocos parlamentares /api/base/autor/bancada - devolve apenas autores que são bancadas parlamentares + devolve apenas autores que são bancadas parlamentares /api/base/autor/frente devolve apenas autores que são Frene parlamentares /api/base/autor/orgao @@ -335,9 +390,14 @@ class _ParlamentarViewSet: else: perm = super().has_permission(request, view) return perm - + permission_classes = (ParlamentarPermission, ) + def get_serializer(self, *args, **kwargs): + if self.request.user.has_perm('parlamentares.add_parlamentar'): + self.serializer_class = ParlamentarEditSerializer + return super().get_serializer(*args, **kwargs) + @action(detail=True) def proposicoes(self, request, *args, **kwargs): """ @@ -350,62 +410,76 @@ class _ParlamentarViewSet: # recupera proposições enviadas e incorporadas do parlamentar # deve coincidir com # /parlamentar/{pk}/proposicao - content_type = ContentType.objects.get_for_model(Parlamentar) - qs = Proposicao.objects.filter( + return self.get_proposicoes(**kwargs) + + @wrapper_queryset_response_for_drf_action(model=Proposicao) + def get_proposicoes(self, **kwargs): + + return self.get_queryset().filter( data_envio__isnull=False, data_recebimento__isnull=False, cancelado=False, autor__object_id=kwargs['pk'], - autor__content_type=content_type + autor__content_type=ContentType.objects.get_for_model(Parlamentar) ) - page = self.paginate_queryset(qs) - if page is not None: - serializer = SaplApiViewSetConstrutor.get_class_for_model( - Proposicao).serializer_class(page, many=True) - return self.get_paginated_response(serializer.data) + @action(detail=False, methods=['GET']) + def search_parlamentares(self, request, *args, **kwargs): + nome = request.query_params.get('nome_parlamentar', '') + parlamentares = Parlamentar.objects.filter( + nome_parlamentar__icontains=nome) + serializer_class = ParlamentarResumeSerializer( + parlamentares, many=True, context={'request': request}) + return Response(serializer_class.data) + + +@customize(Legislatura) +class _LegislaturaViewSet: - serializer = self.get_serializer(page, many=True) - return Response(serializer.data) - @action(detail=True) - def parlamentares_by_legislatura(self,request,*args,**kwargs): - """ - Pega lista de parlamentares pelo id da legislatura. - """ + def parlamentares(self, request, *args, **kwargs): + + def get_serializer_context(): + return { + 'request': self.request, 'legislatura': kwargs['pk'] + } + + def get_serializer_class(): + return ParlamentarResumeSerializer + + self.get_serializer_context = get_serializer_context + self.get_serializer_class = get_serializer_class + + return self.get_parlamentares() + + @wrapper_queryset_response_for_drf_action(model=Parlamentar) + def get_parlamentares(self): + try: - legislatura = Legislatura.objects.get(pk=kwargs['pk']) + legislatura = Legislatura.objects.get(pk=self.kwargs['pk']) except ObjectDoesNotExist: - return Response("") - data_atual = timezone.now().date() + return Response("") + + data_atual = timezone.localdate() filter_params = { - 'legislatura':legislatura, - 'data_inicio_mandato__gte':legislatura.data_inicio, - 'data_fim_mandato__gte':legislatura.data_fim, + 'legislatura': legislatura, + 'data_inicio_mandato__gte': legislatura.data_inicio, + 'data_fim_mandato__lte': legislatura.data_fim, } - if legislatura.data_inicio < data_atual < legislatura.data_fim: - filter_params['data_fim_mandato__gte'] = data_atual + mandatos = Mandato.objects.filter( + **filter_params).order_by('-data_inicio_mandato') - mandatos = Mandato.objects.filter(**filter_params).order_by('-data_inicio_mandato') - parlamentares = Parlamentar.objects.filter(mandato__in=mandatos).distinct() - serializer_class = ParlamentarResumeSerializer(parlamentares, - many=True, - context={'request':request,'legislatura':kwargs['pk']}) - return Response(serializer_class.data) + parlamentares = self.get_queryset().filter( + mandato__in=mandatos).distinct() - @action(detail=False,methods=['GET']) - def search_parlamentares(self,request,*args,**kwargs): - nome = request.query_params.get('nome_parlamentar','') - parlamentares = Parlamentar.objects.filter(nome_parlamentar__icontains=nome) - serializer_class= ParlamentarResumeSerializer(parlamentares,many=True,context={'request':request}) - return Response(serializer_class.data) + return parlamentares @customize(Proposicao) -class _ProposicaoViewSet(): +class _ProposicaoViewSet: """ list: Retorna lista de Proposições @@ -413,7 +487,7 @@ class _ProposicaoViewSet(): * Permissões: * Usuário Dono: - * Pode listar todas suas Proposições + * Pode listar todas suas Proposições * Usuário Conectado ou Anônimo: * Pode listar todas as Proposições incorporadas @@ -424,7 +498,7 @@ class _ProposicaoViewSet(): * Permissões: * Usuário Dono: - * Pode recuperar qualquer de suas Proposições + * Pode recuperar qualquer de suas Proposições * Usuário Conectado ou Anônimo: * Pode recuperar qualquer das proposições incorporadas @@ -451,8 +525,18 @@ class _ProposicaoViewSet(): qs = super().get_queryset() q = Q(data_recebimento__isnull=False, object_id__isnull=False) - if not self.request.user.is_anonymous(): - q |= Q(autor__user=self.request.user) + if not self.request.user.is_anonymous: + + autor_do_usuario_logado = self.request.user.autor_set.first() + + # se usuário logado é operador de algum autor + if autor_do_usuario_logado: + q = Q(autor=autor_do_usuario_logado) + + # se é operador de protocolo, ve qualquer coisa enviada + if self.request.user.has_perm('protocoloadm.list_protocolo'): + q = Q(data_envio__isnull=False) | Q( + data_devolucao__isnull=False) qs = qs.filter(q) return qs @@ -460,6 +544,8 @@ class _ProposicaoViewSet(): @customize(MateriaLegislativa) class _MateriaLegislativaViewSet: + class Meta: + ordering = ['-ano', 'tipo', 'numero'] @action(detail=True, methods=['GET']) def ultima_tramitacao(self, request, *args, **kwargs): @@ -468,7 +554,8 @@ class _MateriaLegislativaViewSet: if not materia.tramitacao_set.exists(): return Response({}) - ultima_tramitacao = materia.tramitacao_set.last() + ultima_tramitacao = materia.tramitacao_set.order_by( + '-data_tramitacao', '-id').first() serializer_class = SaplApiViewSetConstrutor.get_class_for_model( Tramitacao).serializer_class(ultima_tramitacao) @@ -511,7 +598,7 @@ class _DocumentoAdministrativoViewSet: """ Diante da lógica implementada na manutenção de documentos administrativos: - - Se o comportamento é doc adm ostensivo, deve passar pelo + - Se o comportamento é doc adm ostensivo, deve passar pelo teste de permissões sem avaliá-las - se o comportamento é doc adm restritivo, deve passar pelo teste de permissões avaliando-as @@ -524,12 +611,12 @@ class _DocumentoAdministrativoViewSet: """ mesmo tendo passado pelo teste de permissões, deve ser filtrado, pelo campo restrito. Sendo este igual a True, disponibilizar apenas - a um usuário conectado. Apenas isso, sem critérios outros de permissão, + a um usuário conectado. Apenas isso, sem critérios outros de permissão, conforme implementado em DocumentoAdministrativoCrud """ qs = super().get_queryset() - if self.request.user.is_anonymous(): + if self.request.user.is_anonymous: qs = qs.exclude(restrito=True) return qs @@ -543,7 +630,7 @@ class _DocumentoAcessorioAdministrativoViewSet: def get_queryset(self): qs = super().get_queryset() - if self.request.user.is_anonymous(): + if self.request.user.is_anonymous: qs = qs.exclude(documento__restrito=True) return qs @@ -558,7 +645,7 @@ class _TramitacaoAdministrativoViewSet(BusinessRulesNotImplementedMixin): def get_queryset(self): qs = super().get_queryset() - if self.request.user.is_anonymous(): + if self.request.user.is_anonymous: qs = qs.exclude(documento__restrito=True) return qs @@ -572,7 +659,7 @@ class _AnexadoViewSet(BusinessRulesNotImplementedMixin): def get_queryset(self): qs = super().get_queryset() - if self.request.user.is_anonymous(): + if self.request.user.is_anonymous: qs = qs.exclude(documento__restrito=True) return qs @@ -589,17 +676,11 @@ class _SessaoPlenariaViewSet: @action(detail=True) def expedientes(self, request, *args, **kwargs): + return self.get_expedientes() - sessao = self.get_object() - - page = self.paginate_queryset(sessao.expedientesessao_set.all()) - if page is not None: - serializer = SaplApiViewSetConstrutor.get_class_for_model( - ExpedienteSessao).serializer_class(page, many=True) - return self.get_paginated_response(serializer.data) - - serializer = self.get_serializer(page, many=True) - return Response(serializer.data) + @wrapper_queryset_response_for_drf_action(model=ExpedienteSessao) + def get_expedientes(self): + return self.get_queryset().filter(sessao_plenaria_id=self.kwargs['pk']) @customize(NormaJuridica) @@ -620,7 +701,6 @@ class AppVersionView(APIView): 'description': 'Sistema de Apoio ao Processo Legislativo', 'version': settings.SAPL_VERSION, 'user': request.user.username, - 'is_authenticated': request.user.is_authenticated(), + 'is_authenticated': request.user.is_authenticated, } return Response(content) - diff --git a/sapl/audiencia/forms.py b/sapl/audiencia/forms.py index a765ca34e..72f3e9c35 100755 --- a/sapl/audiencia/forms.py +++ b/sapl/audiencia/forms.py @@ -95,7 +95,7 @@ class AudienciaForm(FileFieldCheckMixin, forms.ModelForm): except ObjectDoesNotExist: msg = _('A matéria %s nº %s/%s não existe no cadastro' ' de matérias legislativas.' % (tipo_materia, materia, ano_materia)) - self.logger.warn( + self.logger.warning( 'A MateriaLegislativa %s nº %s/%s não existe no cadastro' ' de matérias legislativas.' % (tipo_materia, materia, ano_materia) ) @@ -108,31 +108,42 @@ class AudienciaForm(FileFieldCheckMixin, forms.ModelForm): campos = [materia, tipo_materia, ano_materia] if campos.count(None) + campos.count('') < len(campos): msg = _('Preencha todos os campos relacionados à Matéria Legislativa') - self.logger.warn( + self.logger.warning( 'Algum campo relacionado à MatériaLegislativa %s nº %s/%s \ não foi preenchido.' % (tipo_materia, materia, ano_materia) ) raise ValidationError(msg) if not cleaned_data['numero']: - ultima_audiencia = AudienciaPublica.objects.all().order_by('numero').last() if ultima_audiencia: cleaned_data['numero'] = ultima_audiencia.numero + 1 else: cleaned_data['numero'] = 1 + else: + if AudienciaPublica.objects.filter(numero=cleaned_data['numero']).exclude(pk=self.instance.pk).exists(): + raise ValidationError(f"Já existe uma audiência com a numeração {cleaned_data['numero']}.") if self.cleaned_data['hora_inicio'] and self.cleaned_data['hora_fim']: if self.cleaned_data['hora_fim'] < self.cleaned_data['hora_inicio']: msg = _('A hora de fim ({}) não pode ser anterior a hora de início({})' .format(self.cleaned_data['hora_fim'], self.cleaned_data['hora_inicio'])) - self.logger.warn( + self.logger.warning( 'Hora de fim anterior à hora de início.' ) raise ValidationError(msg) - if parlamentar_autor.autor.first() not in requerimento.autores.all(): - raise ValidationError("Parlamentar Autor selecionado não faz parte da autoria do Requerimento selecionado.") + # requerimento é optativo + if parlamentar_autor and requerimento: + if parlamentar_autor.autor.first() not in requerimento.autores.all(): + raise ValidationError("Parlamentar Autor selecionado não faz" + " parte da autoria do Requerimento " + "selecionado.") + elif parlamentar_autor: + raise ValidationError("Para informar um autor deve-se informar um requerimento.") + elif requerimento: + raise ValidationError("Para informar um requerimento deve-se informar um autor.") + upload_pauta = self.cleaned_data.get('upload_pauta', False) upload_ata = self.cleaned_data.get('upload_ata', False) diff --git a/sapl/audiencia/migrations/0016_auto_20201013_1126.py b/sapl/audiencia/migrations/0016_auto_20201013_1126.py new file mode 100644 index 000000000..811a3d15f --- /dev/null +++ b/sapl/audiencia/migrations/0016_auto_20201013_1126.py @@ -0,0 +1,17 @@ +# Generated by Django 2.2.13 on 2020-10-13 14:26 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('audiencia', '0015_auto_20200518_1158'), + ] + + operations = [ + migrations.AlterModelOptions( + name='anexoaudienciapublica', + options={'ordering': ('id',), 'verbose_name': 'Anexo de Documento Acessório', 'verbose_name_plural': 'Anexo de Documentos Acessórios'}, + ), + ] diff --git a/sapl/audiencia/models.py b/sapl/audiencia/models.py index 49a0b7ddd..234171e14 100755 --- a/sapl/audiencia/models.py +++ b/sapl/audiencia/models.py @@ -192,6 +192,7 @@ class AnexoAudienciaPublica(models.Model): class Meta: verbose_name = _('Anexo de Documento Acessório') verbose_name_plural = _('Anexo de Documentos Acessórios') + ordering = ('id',) def __str__(self): return self.assunto diff --git a/sapl/audiencia/tests/test_audiencia.py b/sapl/audiencia/tests/test_audiencia.py index d217bf460..930d1288b 100644 --- a/sapl/audiencia/tests/test_audiencia.py +++ b/sapl/audiencia/tests/test_audiencia.py @@ -71,7 +71,7 @@ def test_valida_campos_obrigatorios_audiencia_form(): assert errors['data'] == [_('Este campo é obrigatório.')] assert errors['hora_inicio'] == [_('Este campo é obrigatório.')] - assert len(errors) == 5 + assert len(errors) == 6 @pytest.mark.django_db(transaction=False) diff --git a/sapl/audiencia/views.py b/sapl/audiencia/views.py index 67b9ea656..637886e8c 100755 --- a/sapl/audiencia/views.py +++ b/sapl/audiencia/views.py @@ -1,7 +1,7 @@ import sapl from django.http import HttpResponse -from django.core.urlresolvers import reverse +from django.urls import reverse from django.views.decorators.clickjacking import xframe_options_exempt from django.views.generic import UpdateView from sapl.crud.base import RP_DETAIL, RP_LIST, Crud, MasterDetailCrud @@ -19,8 +19,7 @@ class AudienciaCrud(Crud): public = [RP_LIST, RP_DETAIL, ] class BaseMixin(Crud.BaseMixin): - list_field_names = ['numero', 'nome', 'tipo', 'materia', - 'data'] + list_field_names = [ 'nome', 'tipo', 'materia', 'data'] ordering = '-data', 'nome', 'numero', 'tipo' class ListView(Crud.ListView): @@ -29,18 +28,20 @@ class AudienciaCrud(Crud): def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) - audiencia_materia = {} - for o in context['object_list']: - # indexado pelo numero da audiencia - audiencia_materia[str(o.numero)] = o.materia + audiencia_materia = { str(a.id): (a.materia, a.numero) for a in context['object_list'] } for row in context['rows']: - coluna_materia = row[3] # se mudar a ordem de listagem mudar aqui + audiencia_id = row[0][1].split('/')[-1] + tema = str(audiencia_materia[audiencia_id][1]) + ' - ' + row[0][0] + row[0] = (tema, row[0][1]) + coluna_materia = row[2] # Se mudar a ordem de listagem, mudar aqui. if coluna_materia[0]: - materia = audiencia_materia[row[0][0]] - url_materia = reverse('sapl.materia:materialegislativa_detail', - kwargs={'pk': materia.id}) - row[3] = (coluna_materia[0], url_materia) + materia = audiencia_materia[audiencia_id][0] + if materia: + url_materia = reverse('sapl.materia:materialegislativa_detail', kwargs={'pk': materia.id}) + else: + url_materia = None + row[2] = (coluna_materia[0], url_materia) # Se mudar a ordem de listagem, mudar aqui. return context class CreateView(Crud.CreateView): diff --git a/sapl/base/apps.py b/sapl/base/apps.py index c3af888b7..403d74bd1 100644 --- a/sapl/base/apps.py +++ b/sapl/base/apps.py @@ -7,3 +7,6 @@ class AppConfig(django.apps.AppConfig): name = 'sapl.base' label = 'base' verbose_name = _('Dados Básicos') + + def ready(self): + from sapl.base import receivers diff --git a/sapl/base/email_utils.py b/sapl/base/email_utils.py index 7c23dd2da..3ccf64690 100644 --- a/sapl/base/email_utils.py +++ b/sapl/base/email_utils.py @@ -2,7 +2,7 @@ from datetime import datetime as dt import logging from django.core.mail import EmailMultiAlternatives, get_connection, send_mail -from django.core.urlresolvers import reverse +from django.urls import reverse from django.template import Context, loader from django.utils import timezone @@ -171,7 +171,7 @@ def criar_email_tramitacao(base_url, casa_legislativa, tipo, doc_mat, status, ementa = doc_mat.ementa autores = [autoria.autor.nome for autoria in doc_mat.autoria_set.all()] - tramitacao = doc_mat.tramitacao_set.last() + tramitacao = doc_mat.tramitacao_set.order_by('-data_tramitacao', '-id').first() else: doc_mat_url = reverse('sapl.protocoloadm:tramitacaoadministrativo_list', diff --git a/sapl/base/forms.py b/sapl/base/forms.py index 388007bf2..1dd54e3a7 100644 --- a/sapl/base/forms.py +++ b/sapl/base/forms.py @@ -1,26 +1,25 @@ import logging import os - from crispy_forms.bootstrap import FieldWithButtons, InlineRadios, StrictButton, FormActions from crispy_forms.layout import HTML, Button, Div, Field, Fieldset, Layout, Row, Submit from django import forms from django.conf import settings -from django.contrib.auth import get_user_model +from django.contrib.auth import get_user_model, password_validation from django.contrib.auth.forms import (AuthenticationForm, PasswordResetForm, SetPasswordForm) -from django.contrib.auth.models import Group, User +from django.contrib.auth.models import Group, User, Permission from django.core.exceptions import ValidationError from django.db import models, transaction from django.db.models import Q from django.forms import Form, ModelForm from django.utils import timezone -from django.utils.translation import string_concat +from django.utils.safestring import mark_safe from django.utils.translation import ugettext_lazy as _ import django_filters from sapl.audiencia.models import AudienciaPublica -from sapl.base.models import Autor, TipoAutor +from sapl.base.models import Autor, TipoAutor, OperadorAutor from sapl.comissoes.models import Reuniao from sapl.crispy_layout_mixin import (form_actions, to_column, to_row, SaplFormHelper, SaplFormLayout) @@ -28,16 +27,18 @@ from sapl.materia.models import (DocumentoAcessorio, MateriaEmTramitacao, MateriaLegislativa, UnidadeTramitacao, StatusTramitacao) from sapl.norma.models import NormaJuridica -from sapl.parlamentares.models import Partido, SessaoLegislativa +from sapl.parlamentares.models import Partido, SessaoLegislativa,\ + Parlamentar, Votante from sapl.protocoloadm.models import DocumentoAdministrativo +from sapl.rules import SAPL_GROUP_AUTOR, SAPL_GROUP_VOTANTE from sapl.sessao.models import SessaoPlenaria from sapl.settings import MAX_IMAGE_UPLOAD_SIZE from sapl.utils import (autor_label, autor_modal, ChoiceWithoutValidationField, choice_anos_com_normas, choice_anos_com_materias, FilterOverridesMetaMixin, FileFieldCheckMixin, - AnoNumeroOrderingFilter, ImageThumbnailFileInput, - models_with_gr_for_model, qs_override_django_filter, - RangeWidgetOverride, RANGE_ANOS, YES_NO_CHOICES) + ImageThumbnailFileInput, qs_override_django_filter, + RANGE_ANOS, YES_NO_CHOICES, + GoogleRecapthaMixin, parlamentares_ativos) from .models import AppConfig, CasaLegislativa @@ -57,202 +58,272 @@ STATUS_USER_CHOICE = [ ] -def get_roles(): - roles = [(g.id, g.name) for g in Group.objects.all().order_by('name') - if g.name != 'Votante'] - return roles +class UserAdminForm(ModelForm): + is_active = forms.TypedChoiceField(label=_('Usuário Ativo'), + choices=YES_NO_CHOICES, + coerce=lambda x: x == 'True') -class UsuarioCreateForm(ModelForm): - logger = logging.getLogger(__name__) - firstname = forms.CharField( - required=True, - label="Nome", - max_length=30 - ) - lastname = forms.CharField( - required=True, - label="Sobrenome", - max_length=30 - ) - password1 = forms.CharField( - required=True, - widget=forms.PasswordInput, - label='Senha', - min_length=6, - max_length=128 - ) - password2 = forms.CharField( - required=True, - widget=forms.PasswordInput, - label='Confirmar senha', - min_length=6, - max_length=128 - ) - user_active = forms.ChoiceField( - required=True, - choices=YES_NO_CHOICES, - label="Usuário ativo?", - initial='True' - ) - roles = forms.MultipleChoiceField( - required=True, - widget=forms.CheckboxSelectMultiple(), - choices=get_roles - ) + new_password1 = forms.CharField( + label='Nova senha', + max_length=50, + strip=False, + required=False, + widget=forms.PasswordInput(), + help_text='Deixe os campos em branco para não fazer alteração de senha') - class Meta: - model = get_user_model() - fields = [ - get_user_model().USERNAME_FIELD, 'firstname', 'lastname', - 'password1', 'password2', 'user_active', 'roles' - ] + (['email'] - if get_user_model().USERNAME_FIELD != 'email' else []) + new_password2 = forms.CharField( + label='Confirmar senha', + max_length=50, + strip=False, + required=False, + widget=forms.PasswordInput(), + help_text='Deixe os campos em branco para não fazer alteração de senha') - def clean(self): - super().clean() + token = forms.CharField( + required=False, + label="Token", + max_length=40, + widget=forms.TextInput(attrs={'readonly': 'readonly'})) - if not self.is_valid(): - return self.cleaned_data + parlamentar = forms.ModelChoiceField( + label=_('Este usuário é um Parlamentar Votante?'), + queryset=Parlamentar.objects.all(), + required=False, + help_text='Se o usuário que está sendo cadastrado (ou em edição) é um usuário para que um parlamentar possa votar, você pode selecionar o parlamentar nas opções acima.') - data = self.cleaned_data - if data['password1'] != data['password2']: - self.logger.warn('Erro de validação. Senhas informadas são diferentes.') - raise ValidationError('Senhas informadas são diferentes') + autor = forms.ModelChoiceField( + label=_('Este usuário registrará proposições para um Autor?'), + queryset=Autor.objects.all(), + required=False, + help_text='Se o usuário que está sendo cadastrado (ou em edição) é um usuário para cadastro de proposições, você pode selecionar para que autor ele registrará proposições.') - return data + class Meta: + model = get_user_model() + fields = [ + get_user_model().USERNAME_FIELD, + 'first_name', + 'last_name', + 'is_active', - def __init__(self, *args, **kwargs): + 'token', - super().__init__(*args, **kwargs) + 'new_password1', + 'new_password2', - row0 = to_row([('username', 12)]) + 'parlamentar', + 'autor', - row1 = to_row([('firstname', 6), - ('lastname', 6)]) + 'groups', + 'user_permissions', + ] - row2 = to_row([('email', 6), - ('user_active', 6)]) - row3 = to_row( - [('password1', 6), - ('password2', 6)]) + if get_user_model().USERNAME_FIELD != 'email': + fields.extend(['email']) - self.helper = SaplFormHelper() - self.helper.layout = Layout( - row0, - row1, - row3, - row2, - 'roles', - form_actions(label='Confirmar')) + def __init__(self, *args, **kwargs): + self.user_session = kwargs.pop('user_session', None) + self.granular = kwargs.pop('granular', None) + self.instance = kwargs.get('instance', None) -class UsuarioFilterSet(django_filters.FilterSet): + row_pwd = [ + ('username', 4), + ('email', 6), + ('is_active', 2), + ('first_name', 6), + ('last_name', 6), + ('new_password1', 3 if self.instance and self.instance.pk else 6), + ('new_password2', 3 if self.instance and self.instance.pk else 6), + ] + + if self.instance and self.instance.pk: + row_pwd += [ + ( + FieldWithButtons( + 'token', + StrictButton( + 'Renovar', + id="renovar-token", + css_class="btn-outline-primary"), + css_class='' if self.instance and self.instance.pk else 'd-none'), + 6 + ) + ] - username = django_filters.CharFilter( - label=_('Nome de Usuário'), - lookup_expr='icontains') + row_pwd += [ - class Meta: - model = User - fields = ['username'] + ('parlamentar', 6), + ('autor', 6), + ('groups', 12), - def __init__(self, *args, **kwargs): - super(UsuarioFilterSet, self).__init__(*args, **kwargs) + ] + ([('user_permissions', 12)] if not self.granular is None else []) - row0 = to_row([('username', 12)]) + row_pwd = to_row(row_pwd) - self.form.helper = SaplFormHelper() - self.form.helper.form_method = 'GET' - self.form.helper.layout = Layout( - Fieldset(_('Pesquisa de Usuário'), - row0, - form_actions(label='Pesquisar')) - ) + self.helper = SaplFormHelper() + self.helper.layout = SaplFormLayout(row_pwd) + super(UserAdminForm, self).__init__(*args, **kwargs) + self.fields['groups'].widget = forms.CheckboxSelectMultiple() -class UsuarioEditForm(ModelForm): - logger = logging.getLogger(__name__) - # ROLES = [(g.id, g.name) for g in Group.objects.all().order_by('name')] - ROLES = [] + self.fields['parlamentar'].choices = [('', '---------')] + [ + (p.id, p) for p in parlamentares_ativos(timezone.now()) + ] - token = forms.CharField( - required=False, - label="Token", - max_length=40, - widget=forms.TextInput(attrs={'readonly': 'readonly'})) - first_name = forms.CharField( - required=False, - label="Nome", - max_length=30) - last_name = forms.CharField( - required=False, - label="Sobrenome", - max_length=30) - password1 = forms.CharField( - required=False, - widget=forms.PasswordInput, - label='Senha') - password2 = forms.CharField( - required=False, widget=forms.PasswordInput, - label='Confirmar senha') - user_active = forms.ChoiceField( - choices=YES_NO_CHOICES, - required=True, - label="Usuário ativo?", - initial='True') - roles = forms.MultipleChoiceField( - required=True, - widget=forms.CheckboxSelectMultiple(), - choices=get_roles) + if not self.instance.pk: + self.fields['groups'].choices = [ + (g.id, g) for g in Group.objects.exclude( + name__in=['Autor', 'Votante'] + ).order_by('name') + ] - class Meta: - model = get_user_model() - fields = [ - get_user_model().USERNAME_FIELD, - "token", - "first_name", - "last_name", - 'password1', - 'password2', - 'user_active', - 'roles'] + else: + operadorautor = self.instance.operadorautor_set.first() + votante = self.instance.votante_set.first() + self.fields['token'].initial = self.instance.auth_token.key + self.fields['autor'].initial = operadorautor.autor if operadorautor else None + self.fields['parlamentar'].initial = votante.parlamentar if votante else None + + self.fields['groups'].choices = [ + (g.id, g) for g in self.instance.groups.exclude( + name__in=['Autor', 'Votante'] + ).order_by('name') + ] + [ + (g.id, g) for g in Group.objects.exclude( + user=self.instance).exclude( + name__in=['Autor', 'Votante'] + ).order_by('name') + ] + + self.fields[ + 'user_permissions'].widget = forms.CheckboxSelectMultiple() + + if not self.granular is None: + self.fields['user_permissions'].choices = [ + (p.id, p) for p in self.instance.user_permissions.all( + ).order_by('content_type__app_label', + 'content_type__model', + 'codename') + ] + [ + (p.id, p) for p in Permission.objects.filter( + content_type__app_label__in=list( + map(lambda x: x.split('.')[-1], settings.SAPL_APPS)) + ).exclude( + user=self.instance + ).order_by('content_type__app_label', + 'content_type__model', + 'codename') + ] + + def save(self, commit=True): + if self.cleaned_data['new_password1']: + self.instance.set_password(self.cleaned_data['new_password1']) + permissions = None + votante = None + operadorautor = None + if self.instance.id: + inst_old = get_user_model().objects.get(pk=self.instance.pk) + if self.granular is None: + permissions = list(inst_old.user_permissions.all()) + + votante = inst_old.votante_set.first() + operadorautor = inst_old.operadorautor_set.first() + + inst = super().save(commit) + + if permissions: + inst.user_permissions.add(*permissions) + + g_autor = Group.objects.get(name=SAPL_GROUP_AUTOR) + g_votante = Group.objects.get(name=SAPL_GROUP_VOTANTE) + + if not self.cleaned_data['autor']: + inst.groups.remove(g_autor) + if operadorautor: + operadorautor.delete() + else: + inst.groups.add(g_autor) + if operadorautor: + if operadorautor.autor != self.cleaned_data['autor']: + operadorautor.autor = self.cleaned_data['autor'] + operadorautor.save() + else: + operadorautor = OperadorAutor() + operadorautor.user = inst + operadorautor.autor = self.cleaned_data['autor'] + operadorautor.save() + + if not self.cleaned_data['parlamentar']: + inst.groups.remove(g_votante) + if votante: + votante.delete() + else: + inst.groups.add(g_votante) + if votante: + if votante.parlamentar != self.cleaned_data['parlamentar']: + votante.parlamentar = self.cleaned_data['parlamentar'] + votante.save() + else: + votante = Votante() + votante.user = inst + votante.parlamentar = self.cleaned_data['parlamentar'] + votante.save() + + return inst - if get_user_model().USERNAME_FIELD != 'email': - fields.extend(['email']) + def clean(self): + data = super().clean() - def __init__(self, *args, **kwargs): - super(UsuarioEditForm, self).__init__(*args, **kwargs) + if self.errors: + return data - rows = to_row(( - ('first_name', 6), - ('last_name', 6), - ('email', 6), - ('user_active', 6), - ('password1', 6), - ('password2', 6), - ('roles', 12))) + new_password1 = data.get('new_password1', '') + new_password2 = data.get('new_password2', '') - self.helper = SaplFormHelper() - self.helper.layout = Layout( - 'username', - FieldWithButtons('token', StrictButton('Renovar', id="renovar-token", css_class="btn-outline-primary")), - rows, - form_actions( - more=[ - HTML("Cancelar")], - label='Salvar Alterações')) + if new_password1 != new_password2: + raise forms.ValidationError( + _("As senhas informadas são diferentes"), + ) + else: + if new_password1 and new_password2: + password_validation.validate_password( + new_password2, self.instance) + + parlamentar = data.get('parlamentar', None) + if parlamentar and parlamentar.votante_set.exists() and \ + parlamentar.votante_set.first().user != self.instance: + raise forms.ValidationError( + mark_safe( + 'O Parlamentar {} ' + 'já está associado a outro usuário: {}.
' + 'Para realizar nova associação, você precisa ' + 'primeiro cancelar esta já existente.'.format( + parlamentar, + parlamentar.votante_set.first().user + )) + ) - def clean(self): - super().clean() - if not self.is_valid(): - return self.cleaned_data + autor = data.get('autor', None) + if parlamentar and autor: + if autor.autor_related != parlamentar: + raise forms.ValidationError( + 'Um usuário não deve ser Votante de um parlamentar, e operador de um Autor que possui um parlamentar diferente, ou mesmo outro tipo de Autor.' + ) - data = self.cleaned_data - if data['password1'] and data['password1'] != data['password2']: - self.logger.warn("Erro de validação. Senhas informadas são diferentes.") - raise ValidationError('Senhas informadas são diferentes') + """ + + if 'email' in data and data['email']: + duplicidade = get_user_model().objects.filter(email=data['email']) + if self.instance.id: + duplicidade = duplicidade.exclude(id=self.instance.id) + + if duplicidade.exists(): + raise forms.ValidationError( + "Email já cadastrado para: {}".format( + ', '.join(map(lambda x: str(x), duplicidade.all())), + ) + )""" return data @@ -314,26 +385,28 @@ class SessaoLegislativaForm(FileFieldCheckMixin, ModelForm): ult = 0 if numero <= ult and flag_edit: - self.logger.warn( + self.logger.warning( 'O número da SessaoLegislativa ({}) é menor ou igual ' - 'que o de Sessões Legislativas passadas ({})'.format(numero, ult) + 'que o de Sessões Legislativas passadas ({})'.format( + numero, ult) ) raise ValidationError('O número da Sessão Legislativa não pode ser menor ou igual ' 'que o de Sessões Legislativas passadas') if data_inicio < data_inicio_leg or \ data_inicio > data_fim_leg: - self.logger.warn( + self.logger.warning( 'A data de início ({}) da SessaoLegislativa está compreendida ' 'fora da data início ({}) e fim ({}) da Legislatura ' - 'selecionada'.format(data_inicio, data_inicio_leg, data_fim_leg) + 'selecionada'.format( + data_inicio, data_inicio_leg, data_fim_leg) ) raise ValidationError('A data de início da Sessão Legislativa deve estar compreendida ' 'entre a data início e fim da Legislatura selecionada') if data_fim > data_fim_leg or \ data_fim < data_inicio_leg: - self.logger.warn( + self.logger.warning( 'A data de fim ({}) da SessaoLegislativa está compreendida ' 'fora da data início ({}) e fim ({}) da Legislatura ' 'selecionada.'.format(data_fim, data_inicio_leg, data_fim_leg) @@ -342,20 +415,26 @@ class SessaoLegislativaForm(FileFieldCheckMixin, ModelForm): 'entre a data início e fim da Legislatura selecionada') if data_inicio > data_fim: - self.logger.warn( - 'Data início ({}) superior à data fim ({}).'.format(data_inicio, data_fim) + self.logger.warning( + 'Data início ({}) superior à data fim ({}).'.format( + data_inicio, data_fim) ) raise ValidationError( 'Data início não pode ser superior à data fim') + if data_fim.year > data_inicio.year + 1: + raise ValidationError( + 'A Sessão Legislativa só pode ter, no máximo, dois anos de período.') + data_inicio_intervalo = cleaned_data['data_inicio_intervalo'] data_fim_intervalo = cleaned_data['data_fim_intervalo'] if data_inicio_intervalo and data_fim_intervalo and \ data_inicio_intervalo > data_fim_intervalo: - self.logger.warn( + self.logger.warning( 'Data início de intervalo ({}) superior à ' - 'data fim de intervalo ({}).'.format(data_inicio_intervalo, data_fim_intervalo) + 'data fim de intervalo ({}).'.format( + data_inicio_intervalo, data_fim_intervalo) ) raise ValidationError('Data início de intervalo não pode ser ' 'superior à data fim de intervalo') @@ -365,7 +444,7 @@ class SessaoLegislativaForm(FileFieldCheckMixin, ModelForm): data_inicio_intervalo < data_inicio_leg or \ data_inicio_intervalo > data_fim or \ data_inicio_intervalo > data_fim_leg: - self.logger.warn( + self.logger.warning( 'A data de início do intervalo ({}) não está compreendida entre ' 'as datas de início ({}) e fim ({}) tanto da Legislatura quanto da ' 'própria Sessão Legislativa ({} e {}).'.format( @@ -380,7 +459,7 @@ class SessaoLegislativaForm(FileFieldCheckMixin, ModelForm): data_fim_intervalo > data_fim_leg or \ data_fim_intervalo < data_inicio or \ data_fim_intervalo < data_inicio_leg: - self.logger.warn( + self.logger.warning( 'A data de fim do intervalo ({}) não está compreendida entre ' 'as datas de início ({}) e fim ({}) tanto da Legislatura quanto da ' 'própria Sessão Legislativa ({} e {}).'.format( @@ -453,13 +532,8 @@ class AutorForm(ModelForm): required=False, label=_('Confirmar Email')) - username = forms.CharField(label=get_user_model()._meta.get_field( - get_user_model().USERNAME_FIELD).verbose_name.capitalize(), - required=False, - max_length=50) - q = forms.CharField( - max_length=50, required=False, + max_length=120, required=False, label='Pesquise o nome do Autor com o ' 'tipo Selecionado e marque o escolhido.') @@ -467,10 +541,14 @@ class AutorForm(ModelForm): required=False, widget=forms.RadioSelect()) - action_user = forms.ChoiceField( - label=_('Usuário com acesso ao Sistema para este Autor'), - choices=ACTION_CREATE_USERS_AUTOR_CHOICE, - widget=forms.RadioSelect()) + operadores = forms.ModelMultipleChoiceField( + queryset=get_user_model().objects.all(), + widget=forms.CheckboxSelectMultiple(), + label=_('Usuários do SAPL ligados ao autor acima selecionado'), + required=False, + help_text=_( + 'Para ser listado aqui, o usuário não pode estar em nenhum outro autor e deve estar marcado como ativo.') + ) class Meta: model = Autor @@ -479,8 +557,8 @@ class AutorForm(ModelForm): 'cargo', 'autor_related', 'q', - 'action_user', - 'username'] + 'operadores' + ] def __init__(self, *args, **kwargs): @@ -506,34 +584,41 @@ class AutorForm(ModelForm): Field('autor_related'), css_class='radiogroup-autor-related hidden'), 12))) - - row2 = Row(to_column((InlineRadios('action_user'), 8)), - to_column((Div('username'), 4))) - - row3 = Row(to_column(('senha', 3)), - to_column(('senha_confirma', 3)), - to_column(('email', 3)), - to_column(('confirma_email', 3)), - css_class='new_user_fields hidden') - - row4 = Row(to_column(( - Div(InlineRadios('status_user'), - css_class='radiogroup-status hidden'), - 12))) if 'status_user' in self.Meta.fields else None - - controle_acesso = [row2, row3] - - if row4: - controle_acesso.append(row4) - controle_acesso = Fieldset(_('Controle de Acesso do Autor'), - *controle_acesso) + operadores_select = to_row( + [ + ('operadores', 12) + ] + ) self.helper = SaplFormHelper() - self.helper.layout = SaplFormLayout(autor_select, controle_acesso) + self.helper.layout = SaplFormLayout(autor_select, *operadores_select) super(AutorForm, self).__init__(*args, **kwargs) - self.fields['action_user'].initial = 'N' + self.fields['operadores'].choices = [ + ( + u.id, + u.username, + u + ) + for u in get_user_model().objects.filter( + operadorautor_set__autor=self.instance + ).order_by('-is_active', + get_user_model().USERNAME_FIELD + ) if self.instance.id + ] + [ + ( + u.id, + u.username, + u + ) + for u in get_user_model().objects.filter( + operadorautor_set__isnull=True, + is_active=True + ).order_by('-is_active', + get_user_model().USERNAME_FIELD + ) + ] if self.instance.pk: if self.instance.autor_related: @@ -545,42 +630,9 @@ class AutorForm(ModelForm): self.fields['autor_related'].initial = self.instance.autor_related - if self.instance.user: - self.fields['username'].initial = getattr( - self.instance.user, - get_user_model().USERNAME_FIELD) - self.fields['action_user'].initial = 'A' - - self.fields['username'].label = string_concat( - self.fields['username'].label, - ' (', getattr( - self.instance.user, - get_user_model().USERNAME_FIELD), ')') - - if 'status_user' in self.Meta.fields: - self.fields['status_user'].initial = 'R' - self.fields['status_user'].label = string_concat( - self.fields['status_user'].label, - ' (', getattr( - self.instance.user, - get_user_model().USERNAME_FIELD), ')') - - self.fields['username'].widget.attrs.update({ - 'data': getattr( - self.instance.user, - get_user_model().USERNAME_FIELD) - if self.instance.user else ''}) - - if 'status_user' in self.Meta.fields: - self.fields['status_user'].widget.attrs.update({ - 'data': getattr( - self.instance.user, - get_user_model().USERNAME_FIELD) - if self.instance.user else ''}) - def valida_igualdade(self, texto1, texto2, msg): if texto1 != texto2: - self.logger.warn( + self.logger.warning( 'Textos diferentes. ("{}" e "{}")'.format(texto1, texto2) ) raise ValidationError(msg) @@ -592,92 +644,29 @@ class AutorForm(ModelForm): if not self.is_valid(): return self.cleaned_data - User = get_user_model() cd = self.cleaned_data - if 'action_user' not in cd or not cd['action_user']: - self.logger.warn( - 'Não Informado se o Autor terá usuário ' - 'vinculado para acesso ao Sistema.' - ) - raise ValidationError(_('Informe se o Autor terá usuário ' - 'vinculado para acesso ao Sistema.')) - - if 'status_user' in self.Meta.fields: - if self.instance.pk and self.instance.user_id: - if getattr( - self.instance.user, - get_user_model().USERNAME_FIELD) != cd['username']: - if 'status_user' not in cd or not cd['status_user']: - self.logger.warn( - 'Foi trocado ou removido o usuário deste Autor ({}), ' - 'mas não foi informado como se deve proceder ' - 'com o usuário que está sendo desvinculado? ({})'.format( - cd['username'], get_user_model().USERNAME_FIELD - ) - ) - raise ValidationError( - _('Foi trocado ou removido o usuário deste Autor, ' - 'mas não foi informado como se deve proceder ' - 'com o usuário que está sendo desvinculado?')) - - qs_user = User.objects.all() qs_autor = Autor.objects.all() if self.instance.pk: qs_autor = qs_autor.exclude(pk=self.instance.pk) - if self.instance.user: - qs_user = qs_user.exclude(pk=self.instance.user.pk) - - if cd['action_user'] == 'A': - param_username = {get_user_model().USERNAME_FIELD: cd['username']} - if not User.objects.filter(**param_username).exists(): - self.logger.warn( - 'Não existe usuário com username "%s". ' % cd['username'] - ) - raise ValidationError( - _('Não existe usuário com username "%s". ' - 'Para utilizar esse username você deve selecionar ' - '"Criar novo Usuário".') % cd['username']) - - if cd['action_user'] != 'N': - if 'username' not in cd or not cd['username']: - self.logger.warn('Username não informado.') - raise ValidationError(_('O username deve ser informado.')) - - param_username = { - 'user__' + get_user_model().USERNAME_FIELD: cd['username']} - - autor_vinculado = qs_autor.filter(**param_username) - if autor_vinculado.exists(): - nome = autor_vinculado[0].nome - error_msg = 'Já existe um autor para este ' \ - 'usuário ({}): {}'.format(cd['username'], nome) - self.logger.warn(error_msg) - raise ValidationError(_(error_msg)) - - """ - 'if' não é necessário por ser campo obrigatório e o framework já - mostrar a mensagem de obrigatório junto ao campo. mas foi colocado - ainda assim para renderizar um message.danger no topo do form. - """ if 'tipo' not in cd or not cd['tipo']: - self.logger.warn('Tipo do Autor não selecionado.') + self.logger.warning('Tipo do Autor não selecionado.') raise ValidationError( _('O Tipo do Autor deve ser selecionado.')) tipo = cd['tipo'] if not tipo.content_type: if 'nome' not in cd or not cd['nome']: - self.logger.warn('Nome do Autor não informado.') + self.logger.warning('Nome do Autor não informado.') raise ValidationError( _('O Nome do Autor deve ser informado.')) elif qs_autor.filter(nome=cd['nome']).exists(): raise ValidationError("Autor '%s' já existente!" % cd['nome']) else: if 'autor_related' not in cd or not cd['autor_related']: - self.logger.warn( + self.logger.warning( 'Registro de %s não escolhido para ser ' 'vinculado ao cadastro de Autor' % tipo.descricao ) @@ -687,7 +676,7 @@ class AutorForm(ModelForm): if not tipo.content_type.model_class().objects.filter( pk=cd['autor_related']).exists(): - self.logger.warn( + self.logger.warning( 'O Registro definido (%s-%s) não está na base ' 'de %s.' % (cd['autor_related'], cd['q'], tipo.descricao) ) @@ -700,7 +689,7 @@ class AutorForm(ModelForm): content_type_id=cd['tipo'].content_type_id) if qs_autor_selected.exists(): autor = qs_autor_selected.first() - self.logger.warn( + self.logger.warning( 'Já existe um autor Cadastrado para ' '%s' % autor.autor_related ) @@ -711,21 +700,8 @@ class AutorForm(ModelForm): return self.cleaned_data @transaction.atomic - def save(self, commit=False): - autor = super(AutorForm, self).save(commit) - - user_old = autor.user if autor.user_id else None - - u = None - param_username = { - get_user_model().USERNAME_FIELD: self.cleaned_data['username']} - if self.cleaned_data['action_user'] == 'A': - u = get_user_model().objects.get(**param_username) - if not u.is_active: - u.is_active = settings.DEBUG - u.save() - - autor.user = u + def save(self, commit=True): + autor = self.instance if not autor.tipo.content_type: autor.content_type = None @@ -736,39 +712,14 @@ class AutorForm(ModelForm): ).objects.get(pk=self.cleaned_data['autor_related']) autor.nome = str(autor.autor_related) - autor.save() - - # FIXME melhorar captura de grupo de Autor, levando em conta, - # no mínimo, a tradução. - grupo = Group.objects.filter(name='Autor')[0] - if self.cleaned_data['action_user'] != 'N': - autor.user.groups.add(grupo) - if user_old and user_old != autor.user: - user_old.groups.remove(grupo) - - else: - if 'status_user' in self.Meta.fields: - if 'status_user' in self.cleaned_data and user_old: - if self.cleaned_data['status_user'] == 'X': - user_old.delete() - - elif self.cleaned_data['status_user'] == 'D': - user_old.groups.remove(grupo) - user_old.is_active = False - user_old.save() - - elif self.cleaned_data['status_user'] == 'R': - user_old.groups.remove(grupo) - elif user_old: - user_old.groups.remove(grupo) - elif user_old: - user_old.groups.remove(grupo) + autor = super(AutorForm, self).save(commit) return autor class AutorFilterSet(django_filters.FilterSet): - nome = django_filters.CharFilter(label=_('Nome do Autor'), lookup_expr='icontains') + nome = django_filters.CharFilter( + label=_('Nome do Autor'), lookup_expr='icontains') class Meta: model = Autor @@ -787,26 +738,36 @@ class AutorFilterSet(django_filters.FilterSet): form_actions(label='Pesquisar'))) -class AutorFormForAdmin(AutorForm): - status_user = forms.ChoiceField( - label=_('Bloqueio do Usuário Existente'), - choices=STATUS_USER_CHOICE, - widget=forms.RadioSelect(), - required=False, - help_text=_('Se vc está trocando ou removendo o usuário deste Autor, ' - 'como o Sistema deve proceder com o usuário que está sendo' - ' desvinculado?')) +class OperadorAutorForm(ModelForm): class Meta: - model = Autor - fields = ['tipo', - 'nome', - 'cargo', - 'autor_related', - 'q', - 'action_user', - 'username', - 'status_user'] + model = OperadorAutor + fields = ['user', ] + + def __init__(self, *args, **kwargs): + + row = to_row([('user', 12)]) + + self.helper = SaplFormHelper() + self.helper.layout = SaplFormLayout( + Fieldset(_('Operador'), row)) + + super(OperadorAutorForm, self).__init__(*args, **kwargs) + + self.fields['user'].choices = [ + ( + u.id, + '{} - {} - {}'.format( + u.get_full_name(), + getattr(u, u.USERNAME_FIELD), + u.email + ) + ) + for u in get_user_model().objects.all().order_by( + get_user_model().USERNAME_FIELD + ) + ] + self.fields['user'].widget = forms.RadioSelect() class RelatorioDocumentosAcessoriosFilterSet(django_filters.FilterSet): @@ -1063,17 +1024,24 @@ class RelatorioPresencaSessaoFilterSet(django_filters.FilterSet): 'legislatura'] def __init__(self, *args, **kwargs): - super(RelatorioPresencaSessaoFilterSet, self).__init__( - *args, **kwargs) + super().__init__(*args, **kwargs) - self.form.fields['exibir_ordem_dia'] = forms.BooleanField(required=False, - label='Exibir presença das Ordens do Dia') + self.form.fields['exibir_ordem_dia'] = forms.BooleanField( + required=False, label='Exibir presença das Ordens do Dia') self.form.initial['exibir_ordem_dia'] = True - self.filters['data_inicio'].label = 'Período (Inicial - Final)' + self.form.fields['exibir_somente_titular'] = forms.BooleanField( + required=False, label='Exibir somente parlamentares titulares') + self.form.initial['exibir_somente_titular'] = False + + self.form.fields['exibir_somente_ativo'] = forms.BooleanField( + required=False, label='Exibir somente parlamentares ativos') + self.form.initial['exibir_somente_ativo'] = False self.form.fields['legislatura'].required = True + self.filters['data_inicio'].label = 'Período (Inicial - Final)' + tipo_sessao_ordinaria = self.filters['tipo'].queryset.filter( nome='Ordinária') if tipo_sessao_ordinaria: @@ -1082,17 +1050,19 @@ class RelatorioPresencaSessaoFilterSet(django_filters.FilterSet): row1 = to_row([('legislatura', 4), ('sessao_legislativa', 4), ('tipo', 4)]) - row2 = to_row([('exibir_ordem_dia', 12)]) + row2 = to_row([('exibir_ordem_dia', 12), + ('exibir_somente_titular', 12), + ('exibir_somente_ativo', 12)]) row3 = to_row([('data_inicio', 12)]) buttons = FormActions( *[ HTML(''' -
- - -
- ''') +
+ + +
+ ''') ], Submit('pesquisar', _('Pesquisar'), css_class='float-right', onclick='return true;'), @@ -1338,7 +1308,6 @@ class RelatorioMateriasTramitacaoFilterSet(django_filters.FilterSet): label='Autor da Matéria', queryset=Autor.objects.all()) - @property def qs(self): parent = super(RelatorioMateriasTramitacaoFilterSet, self).qs @@ -1350,7 +1319,7 @@ class RelatorioMateriasTramitacaoFilterSet(django_filters.FilterSet): model = MateriaEmTramitacao fields = ['materia__ano', 'materia__tipo', 'tramitacao__unidade_tramitacao_destino', - 'tramitacao__status','materia__autores'] + 'tramitacao__status', 'materia__autores'] def __init__(self, *args, **kwargs): super(RelatorioMateriasTramitacaoFilterSet, self).__init__( @@ -1382,7 +1351,7 @@ class RelatorioMateriasTramitacaoFilterSet(django_filters.FilterSet): self.form.helper.form_method = 'GET' self.form.helper.layout = Layout( Fieldset(_('Pesquisa de Matéria em Tramitação'), - row1, row2, row3, row4,row5, + row1, row2, row3, row4, row5, buttons,) ) @@ -1549,10 +1518,32 @@ class ConfiguracoesAppForm(ModelForm): label=_('Mostrar brasão da Casa no painel?'), required=False) + google_recaptcha_site_key = forms.CharField( + label=AppConfig._meta.get_field( + 'google_recaptcha_site_key').verbose_name, + max_length=256, + required=False, + help_text=_( + 'Acesse https://www.google.com/recaptcha ' + 'para configurar um Recaptcha para sua casa legislativa. ' + 'Com Recaptcha configurado seu sapl disponibilizará ' + 'Acompanhamentos de Matérias e Documentos Administrativos ' + 'e Recuperação de Senha pela opção "Esqueceu sua Senha" ' + 'na tela de login. Esta melhoria na foi necessária com o ' + 'intuito de coibir recorrentes ataques ao serviço de email.'), + ) + + google_recaptcha_secret_key = forms.CharField( + label=AppConfig._meta.get_field( + 'google_recaptcha_secret_key').verbose_name, + max_length=256, + required=False) + class Meta: model = AppConfig fields = ['documentos_administrativos', 'sequencia_numeracao_protocolo', + 'inicio_numeracao_protocolo', 'sequencia_numeracao_proposicao', 'esfera_federacao', # 'painel_aberto', # TODO: a ser implementado na versão 3.2 @@ -1571,7 +1562,10 @@ class ConfiguracoesAppForm(ModelForm): 'estatisticas_acesso_normas', 'escolher_numero_materia_proposicao', 'tramitacao_materia', - 'tramitacao_documento'] + 'tramitacao_documento', + 'google_recaptcha_site_key', + 'google_recaptcha_secret_key', + 'sapl_as_sapn'] def __init__(self, *args, **kwargs): super(ConfiguracoesAppForm, self).__init__(*args, **kwargs) @@ -1591,11 +1585,11 @@ class ConfiguracoesAppForm(ModelForm): casa = CasaLegislativa.objects.first() if not casa: - self.logger.warn('Não há casa legislativa relacionada.') + self.logger.warning('Não há casa legislativa relacionada.') raise ValidationError("Não há casa legislativa relacionada.") if not casa.logotipo and mostrar_brasao_painel: - self.logger.warn( + self.logger.warning( 'Não há logitipo configurado para esta ' 'CasaLegislativa ({}).'.format(casa) ) @@ -1605,35 +1599,29 @@ class ConfiguracoesAppForm(ModelForm): return cleaned_data -class RecuperarSenhaForm(PasswordResetForm): +class RecuperarSenhaForm(GoogleRecapthaMixin, PasswordResetForm): logger = logging.getLogger(__name__) def __init__(self, *args, **kwargs): - row1 = to_row( - [('email', 12)]) - self.helper = SaplFormHelper() - self.helper.layout = Layout( - Fieldset(_('Insira o e-mail cadastrado com a sua conta'), - row1, - form_actions(label='Enviar')) - ) - super(RecuperarSenhaForm, self).__init__(*args, **kwargs) + kwargs['title_label'] = _('Insira o e-mail cadastrado com a sua conta') + kwargs['action_label'] = _('Enviar') + + super().__init__(*args, **kwargs) def clean(self): - super(RecuperarSenhaForm, self).clean() - if not self.is_valid(): - return self.cleaned_data + super(RecuperarSenhaForm, self).clean() - email_existente = User.objects.filter( + email_existente = get_user_model().objects.filter( email=self.data['email']).exists() if not email_existente: msg = 'Não existe nenhum usuário cadastrado com este e-mail.' - self.logger.warn( - 'Não existe nenhum usuário cadastrado com este e-mail ({}).'.format(self.data['email']) + self.logger.warning( + 'Não existe nenhum usuário cadastrado com este e-mail ({}).'.format( + self.data['email']) ) raise ValidationError(msg) @@ -1701,7 +1689,7 @@ class AlterarSenhaForm(Form): new_password2 = data['new_password2'] if new_password1 != new_password2: - self.logger.warn("'Nova Senha' diferente de 'Confirmar Senha'") + self.logger.warning("'Nova Senha' diferente de 'Confirmar Senha'") raise ValidationError( "'Nova Senha' diferente de 'Confirmar Senha'") @@ -1710,7 +1698,7 @@ class AlterarSenhaForm(Form): # TODO: senha atual igual a senha anterior, etc if len(new_password1) < 6: - self.logger.warn( + self.logger.warning( 'A senha informada não tem o mínimo de 6 caracteres.' ) raise ValidationError( @@ -1720,15 +1708,16 @@ class AlterarSenhaForm(Form): old_password = data['old_password'] user = User.objects.get(username=username) - if user.is_anonymous(): - self.logger.warn( - 'Não é possível alterar senha de usuário anônimo ({}).'.format(username) + if user.is_anonymous: + self.logger.warning( + 'Não é possível alterar senha de usuário anônimo ({}).'.format( + username) ) raise ValidationError( "Não é possível alterar senha de usuário anônimo") if not user.check_password(old_password): - self.logger.warn( + self.logger.warning( 'Senha atual informada não confere ' 'com a senha armazenada.' ) @@ -1736,7 +1725,7 @@ class AlterarSenhaForm(Form): "com a senha armazenada") if user.check_password(new_password1): - self.logger.warn( + self.logger.warning( 'Nova senha igual à senha anterior.' ) raise ValidationError( diff --git a/sapl/base/migrations/0040_appconfig_inicio_numeracao_protocolo.py b/sapl/base/migrations/0040_appconfig_inicio_numeracao_protocolo.py new file mode 100644 index 000000000..43839a8e4 --- /dev/null +++ b/sapl/base/migrations/0040_appconfig_inicio_numeracao_protocolo.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.29 on 2020-05-26 17:58 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('base', '0039_auto_20191202_1114'), + ] + + operations = [ + migrations.AddField( + model_name='appconfig', + name='inicio_numeracao_protocolo', + field=models.PositiveIntegerField(default=1, verbose_name='Início da numeração de protocolo'), + ), + ] diff --git a/sapl/base/migrations/0040_auto_20200521_1534.py b/sapl/base/migrations/0040_auto_20200521_1534.py new file mode 100644 index 000000000..ae19b9f01 --- /dev/null +++ b/sapl/base/migrations/0040_auto_20200521_1534.py @@ -0,0 +1,24 @@ +# Generated by Django 2.2 on 2020-05-21 18:34 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('base', '0039_auto_20191202_1114'), + ] + + operations = [ + migrations.AlterField( + model_name='autor', + name='content_type', + field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.PROTECT, to='contenttypes.ContentType'), + ), + migrations.AlterField( + model_name='tipoautor', + name='content_type', + field=models.OneToOneField(default=None, null=True, on_delete=django.db.models.deletion.PROTECT, to='contenttypes.ContentType', verbose_name='Modelagem no SAPL'), + ), + ] diff --git a/sapl/base/migrations/0041_merge_20200818_1256.py b/sapl/base/migrations/0041_merge_20200818_1256.py new file mode 100644 index 000000000..94ad51f86 --- /dev/null +++ b/sapl/base/migrations/0041_merge_20200818_1256.py @@ -0,0 +1,14 @@ +# Generated by Django 2.2 on 2020-08-18 15:56 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('base', '0040_appconfig_inicio_numeracao_protocolo'), + ('base', '0040_auto_20200521_1534'), + ] + + operations = [ + ] diff --git a/sapl/base/migrations/0042_auto_20201013_1151.py b/sapl/base/migrations/0042_auto_20201013_1151.py new file mode 100644 index 000000000..0d30e0c66 --- /dev/null +++ b/sapl/base/migrations/0042_auto_20201013_1151.py @@ -0,0 +1,17 @@ +# Generated by Django 2.2.13 on 2020-10-13 14:51 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('base', '0041_merge_20200818_1256'), + ] + + operations = [ + migrations.AlterModelOptions( + name='casalegislativa', + options={'ordering': ('id',), 'verbose_name': 'Casa Legislativa', 'verbose_name_plural': 'Casa Legislativa'}, + ), + ] diff --git a/sapl/base/migrations/0043_auto_20210203_1442.py b/sapl/base/migrations/0043_auto_20210203_1442.py new file mode 100644 index 000000000..05ac2cbb4 --- /dev/null +++ b/sapl/base/migrations/0043_auto_20210203_1442.py @@ -0,0 +1,23 @@ +# Generated by Django 2.2.13 on 2021-02-03 17:42 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('base', '0042_auto_20201013_1151'), + ] + + operations = [ + migrations.AddField( + model_name='appconfig', + name='google_recaptcha_secret_key', + field=models.CharField(default='', max_length=256, verbose_name='Chave privada gerada pelo Google Recaptcha'), + ), + migrations.AddField( + model_name='appconfig', + name='google_recaptcha_site_key', + field=models.CharField(default='', max_length=256, verbose_name='Chave pública gerada pelo Google Recaptcha'), + ), + ] diff --git a/sapl/base/migrations/0044_appconfig_sapl_as_sapn.py b/sapl/base/migrations/0044_appconfig_sapl_as_sapn.py new file mode 100644 index 000000000..3fcb96d5a --- /dev/null +++ b/sapl/base/migrations/0044_appconfig_sapl_as_sapn.py @@ -0,0 +1,18 @@ +# Generated by Django 2.2.13 on 2021-02-28 00:45 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('base', '0043_auto_20210203_1442'), + ] + + operations = [ + migrations.AddField( + model_name='appconfig', + name='sapl_as_sapn', + field=models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=False, verbose_name='Utilizar SAPL com SAPN?'), + ), + ] diff --git a/sapl/base/migrations/0045_auto_20210301_1537.py b/sapl/base/migrations/0045_auto_20210301_1537.py new file mode 100644 index 000000000..d10898b4f --- /dev/null +++ b/sapl/base/migrations/0045_auto_20210301_1537.py @@ -0,0 +1,18 @@ +# Generated by Django 2.2.13 on 2021-03-01 18:37 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('base', '0044_appconfig_sapl_as_sapn'), + ] + + operations = [ + migrations.AlterField( + model_name='appconfig', + name='sapl_as_sapn', + field=models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=False, verbose_name='Utilizar SAPL como SAPN?'), + ), + ] diff --git a/sapl/base/migrations/0046_auto_20210314_1532.py b/sapl/base/migrations/0046_auto_20210314_1532.py new file mode 100644 index 000000000..d5f558db3 --- /dev/null +++ b/sapl/base/migrations/0046_auto_20210314_1532.py @@ -0,0 +1,62 @@ +# Generated by Django 2.2.13 on 2021-03-14 18:32 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +def adjust_user_oto_m2m(apps, schema_editor): + Autor = apps.get_model('base', 'Autor') + autores = Autor.objects.all() + for a in autores: + if a.user: + a.operadores.add(a.user) + + +def adjust_remove_grupo_parlamentar(apps, schema_editor): + Group = apps.get_model('auth', 'Group') + Group.objects.filter(name='Parlamentar').delete() + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('base', '0045_auto_20210301_1537'), + ] + + operations = [ + migrations.CreateModel( + name='OperadorAutor', + fields=[ + ('id', models.AutoField(auto_created=True, + primary_key=True, serialize=False, verbose_name='ID')), + ('autor', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, + related_name='operadorautor_set', to='base.Autor', verbose_name='Autor')), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, + related_name='operadorautor_set', to=settings.AUTH_USER_MODEL, verbose_name='Operador do Autor')), + ], + options={ + 'verbose_name': 'Operador do Autor', + 'verbose_name_plural': 'Operadores do Autor', + 'unique_together': {('user', 'autor')}, + }, + ), + + migrations.AddField( + model_name='autor', + name='operadores', + field=models.ManyToManyField( + related_name='autor_set', through='base.OperadorAutor', to=settings.AUTH_USER_MODEL), + ), + + migrations.RunPython(adjust_user_oto_m2m), + + migrations.RunPython(adjust_remove_grupo_parlamentar), + + migrations.RemoveField( + model_name='autor', + name='user', + ), + + ] diff --git a/sapl/base/migrations/0047_auto_20210315_1522.py b/sapl/base/migrations/0047_auto_20210315_1522.py new file mode 100644 index 000000000..23a576231 --- /dev/null +++ b/sapl/base/migrations/0047_auto_20210315_1522.py @@ -0,0 +1,19 @@ +# Generated by Django 2.2.13 on 2021-03-15 18:22 + +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('base', '0046_auto_20210314_1532'), + ] + + operations = [ + migrations.AlterField( + model_name='autor', + name='operadores', + field=models.ManyToManyField(related_name='autor_set', through='base.OperadorAutor', to=settings.AUTH_USER_MODEL, verbose_name='Operadores'), + ), + ] diff --git a/sapl/base/models.py b/sapl/base/models.py index 07f028984..fb2a3bd66 100644 --- a/sapl/base/models.py +++ b/sapl/base/models.py @@ -1,6 +1,7 @@ from django.contrib.contenttypes.fields import GenericForeignKey from django.contrib.contenttypes.models import ContentType from django.db import models +from django.db.models.deletion import CASCADE from django.db.models.signals import post_migrate from django.db.utils import DEFAULT_DB_ALIAS from django.utils.translation import ugettext_lazy as _ @@ -9,6 +10,7 @@ import reversion from sapl.utils import (LISTA_DE_UFS, YES_NO_CHOICES, get_settings_auth_user_model, models_with_gr_for_model) + DOC_ADM_OSTENSIVO = 'O' DOC_ADM_RESTRITIVO = 'R' @@ -19,11 +21,11 @@ RELATORIO_ATOS_ACESSADOS = (('S', _('Sim')), ('N', _('Não'))) SEQUENCIA_NUMERACAO_PROTOCOLO = (('A', _('Sequencial por ano')), - ('L', _('Sequencial por legislatura')), - ('U', _('Sequencial único'))) + ('L', _('Sequencial por legislatura')), + ('U', _('Sequencial único'))) SEQUENCIA_NUMERACAO_PROPOSICAO = (('A', _('Sequencial por ano para cada autor')), - ('B', _('Sequencial por ano indepententemente do autor'))) + ('B', _('Sequencial por ano indepententemente do autor'))) ESFERA_FEDERACAO_CHOICES = (('M', _('Municipal')), ('E', _('Estadual')), @@ -73,6 +75,7 @@ class CasaLegislativa(models.Model): class Meta: verbose_name = _('Casa Legislativa') verbose_name_plural = _('Casa Legislativa') + ordering = ('id',) def __str__(self): return _('Casa Legislativa de %(municipio)s') % { @@ -108,6 +111,11 @@ class AppConfig(models.Model): verbose_name=_('Sequência de numeração de protocolos'), choices=SEQUENCIA_NUMERACAO_PROTOCOLO, default='A') + inicio_numeracao_protocolo = models.PositiveIntegerField( + verbose_name=_('Início da numeração de protocolo'), + default=1 + ) + esfera_federacao = models.CharField( max_length=1, blank=True, @@ -173,17 +181,32 @@ class AppConfig(models.Model): choices=YES_NO_CHOICES, default=False) escolher_numero_materia_proposicao = models.BooleanField( - verbose_name=_('Indicar número da matéria a ser gerada na proposição?'), + verbose_name=_( + 'Indicar número da matéria a ser gerada na proposição?'), choices=YES_NO_CHOICES, default=False) tramitacao_materia = models.BooleanField( - verbose_name=_('Tramitar matérias anexadas junto com as matérias principais?'), + verbose_name=_( + 'Tramitar matérias anexadas junto com as matérias principais?'), choices=YES_NO_CHOICES, default=True) - + tramitacao_documento = models.BooleanField( - verbose_name=_('Tramitar documentos anexados junto com os documentos principais?'), + verbose_name=_( + 'Tramitar documentos anexados junto com os documentos principais?'), choices=YES_NO_CHOICES, default=True) + google_recaptcha_site_key = models.CharField( + verbose_name=_('Chave pública gerada pelo Google Recaptcha'), + max_length=256, default='') + google_recaptcha_secret_key = models.CharField( + verbose_name=_('Chave privada gerada pelo Google Recaptcha'), + max_length=256, default='') + + sapl_as_sapn = models.BooleanField( + verbose_name=_( + 'Utilizar SAPL como SAPN?'), + choices=YES_NO_CHOICES, default=False) + class Meta: verbose_name = _('Configurações da Aplicação') verbose_name_plural = _('Configurações da Aplicação') @@ -211,14 +234,18 @@ class AppConfig(models.Model): @reversion.register() class TipoAutor(models.Model): descricao = models.CharField( - max_length=50, verbose_name=_('Descrição'), - help_text=_('Obs: Não crie tipos de autores ' - 'semelhante aos tipos fixos. ')) + max_length=50, + verbose_name=_('Descrição'), + help_text=_( + 'Obs: Não crie tipos de autores semelhante aos tipos fixos. ') + ) content_type = models.OneToOneField( ContentType, - null=True, default=None, - verbose_name=_('Modelagem no SAPL')) + null=True, + default=None, + verbose_name=_('Modelagem no SAPL'), + on_delete=models.PROTECT) class Meta: ordering = ['descricao'] @@ -231,25 +258,36 @@ class TipoAutor(models.Model): @reversion.register() class Autor(models.Model): - - user = models.OneToOneField(get_settings_auth_user_model(), - on_delete=models.SET_NULL, - null=True) - - tipo = models.ForeignKey(TipoAutor, verbose_name=_('Tipo do Autor'), - on_delete=models.PROTECT) - + operadores = models.ManyToManyField( + get_settings_auth_user_model(), + through='OperadorAutor', + through_fields=('autor', 'user'), + symmetrical=False, + related_name='autor_set', + verbose_name='Operadores') + + tipo = models.ForeignKey( + TipoAutor, + verbose_name=_('Tipo do Autor'), + on_delete=models.PROTECT) content_type = models.ForeignKey( ContentType, - blank=True, null=True, default=None) + blank=True, + null=True, + default=None, + on_delete=models.PROTECT) object_id = models.PositiveIntegerField( - blank=True, null=True, default=None) + blank=True, + null=True, + default=None) autor_related = GenericForeignKey('content_type', 'object_id') - nome = models.CharField( - max_length=120, blank=True, verbose_name=_('Nome do Autor')) - - cargo = models.CharField(max_length=50, blank=True) + max_length=120, + blank=True, + verbose_name=_('Nome do Autor')) + cargo = models.CharField( + max_length=50, + blank=True) class Meta: verbose_name = _('Autor') @@ -266,11 +304,40 @@ class Autor(models.Model): return '{} - {}'.format(self.nome, self.cargo) else: return str(self.nome) - if self.user: - return str(self.user.username) + return '?' +class OperadorAutor(models.Model): + + user = models.ForeignKey( + get_settings_auth_user_model(), + verbose_name=_('Operador do Autor'), + related_name='operadorautor_set', + on_delete=CASCADE) + + autor = models.ForeignKey( + Autor, + related_name='operadorautor_set', + verbose_name=_('Autor'), + on_delete=CASCADE) + + @property + def user_name(self): + return '%s - %s' % ( + self.autor, + self.user) + + class Meta: + verbose_name = _('Operador do Autor') + verbose_name_plural = _('Operadores do Autor') + unique_together = ( + ('user', 'autor', ),) + + def __str__(self): + return self.user_name + + class AuditLog(models.Model): operation = ('C', 'D', 'U') @@ -309,4 +376,3 @@ class AuditLog(models.Model): self.model_name, self.username, ) - diff --git a/sapl/base/receivers.py b/sapl/base/receivers.py index 5685c5c15..6a1e622be 100644 --- a/sapl/base/receivers.py +++ b/sapl/base/receivers.py @@ -1,35 +1,59 @@ +import inspect import logging +from django.conf import settings +from django.contrib.contenttypes.models import ContentType from django.core import serializers -from django.db.models.signals import post_delete +from django.db.models.signals import post_delete, post_save,\ + post_migrate +from django.db.utils import DEFAULT_DB_ALIAS from django.dispatch import receiver from django.utils import timezone +from django.utils.translation import ugettext_lazy as _ from sapl.base.email_utils import do_envia_email_tramitacao -from sapl.base.models import AuditLog -from sapl.base.signals import tramitacao_signal, post_delete_signal, post_save_signal +from sapl.base.models import AuditLog, TipoAutor, Autor from sapl.materia.models import Tramitacao from sapl.protocoloadm.models import TramitacaoAdministrativo -from sapl.utils import get_base_url +from sapl.utils import get_base_url, models_with_gr_for_model -@receiver(tramitacao_signal) +@receiver(post_save, sender=Tramitacao) +@receiver(post_save, sender=TramitacaoAdministrativo) def handle_tramitacao_signal(sender, **kwargs): - tramitacao = kwargs.get("post") - request = kwargs.get("request") - if 'protocoloadm' in str(sender): - doc_mat = tramitacao.documento - tipo = "documento" - elif 'materia' in str(sender): + logger = logging.getLogger(__name__) + + tramitacao = kwargs.get('instance') + + if isinstance(tramitacao, Tramitacao): tipo = "materia" doc_mat = tramitacao.materia + else: + tipo = "documento" + doc_mat = tramitacao.documento - do_envia_email_tramitacao( - get_base_url(request), - tipo, - doc_mat, - tramitacao.status, - tramitacao.unidade_tramitacao_destino) + pilha_de_execucao = inspect.stack() + for i in pilha_de_execucao: + if i.function == 'migrate': + return + request = i.frame.f_locals.get('request', None) + if request: + break + + if not request: + logger.warning("Email não enviado, objeto request é None.") + return + try: + do_envia_email_tramitacao( + get_base_url(request), + tipo, + doc_mat, + tramitacao.status, + tramitacao.unidade_tramitacao_destino) + except Exception as e: + logger.error(f'user={request.user.username}. Tramitação criada, mas e-mail de acompanhamento ' + 'de matéria não enviado. Há problemas na configuração ' + 'do e-mail. ' + str(e)) @receiver(post_delete) @@ -46,28 +70,53 @@ def status_tramitacao_materia(sender, instance, **kwargs): documento.save() -@receiver(post_delete_signal) -@receiver(post_save_signal) -def audit_log(sender, **kwargs): - logger = logging.getLogger(__name__) +def audit_log_function(sender, **kwargs): + try: + if not (sender._meta.app_config.name.startswith('sapl') or + sender._meta.label == settings.AUTH_USER_MODEL): + return + except: + # não é necessário usar logger, aqui é usada apenas para + # eliminar um o if complexo + return instance = kwargs.get('instance') - operation = kwargs.get('operation') - user = kwargs.get('request').user - model_name = instance.__class__.__name__ - app_name = instance._meta.app_label - object_id = instance.id - data = serializers.serialize('json', [instance]) - - if len(data) > AuditLog.MAX_DATA_LENGTH: - data = data[:AuditLog.MAX_DATA_LENGTH] - - if user: - username = user.username - else: - username = '' + if instance._meta.model == AuditLog: + return + + logger = logging.getLogger(__name__) + + u = None + pilha_de_execucao = inspect.stack() + for i in pilha_de_execucao: + if i.function == 'migrate': + return + r = i.frame.f_locals.get('request', None) + try: + if r.user._meta.label == settings.AUTH_USER_MODEL: + u = r.user + break + except: + # não é necessário usar logger, aqui é usada apenas para + # eliminar um o if complexo + pass try: + operation = kwargs.get('operation') + user = u + model_name = instance.__class__.__name__ + app_name = instance._meta.app_label + object_id = instance.id + data = serializers.serialize('json', [instance]) + + if len(data) > AuditLog.MAX_DATA_LENGTH: + data = data[:AuditLog.MAX_DATA_LENGTH] + + if user: + username = user.username + else: + username = '' + AuditLog.objects.create(username=username, operation=operation, model_name=model_name, @@ -78,3 +127,51 @@ def audit_log(sender, **kwargs): except Exception as e: logger.error('Error saving auditing log object') logger.error(e) + + +@receiver(post_delete) +def audit_log_post_delete(sender, **kwargs): + audit_log_function(sender, operation='D', **kwargs) + + +@receiver(post_save) +def audit_log_post_save(sender, **kwargs): + operation = 'C' if kwargs.get('created') else 'U' + audit_log_function(sender, operation=operation, **kwargs) + + +def cria_models_tipo_autor(app_config=None, verbosity=2, interactive=True, + using=DEFAULT_DB_ALIAS, **kwargs): + + models = models_with_gr_for_model(Autor) + + print("\n\033[93m\033[1m{}\033[0m".format( + _('Atualizando registros TipoAutor do SAPL:'))) + for model in models: + content_type = ContentType.objects.get_for_model(model) + tipo_autor = TipoAutor.objects.filter( + content_type=content_type.id).exists() + + if tipo_autor: + msg1 = "Carga de {} não efetuada.".format( + TipoAutor._meta.verbose_name) + msg2 = " Já Existe um {} {} relacionado...".format( + TipoAutor._meta.verbose_name, + model._meta.verbose_name) + msg = " {}{}".format(msg1, msg2) + else: + novo_autor = TipoAutor() + novo_autor.content_type_id = content_type.id + novo_autor.descricao = model._meta.verbose_name + novo_autor.save() + msg1 = "Carga de {} efetuada.".format( + TipoAutor._meta.verbose_name) + msg2 = " {} {} criado...".format( + TipoAutor._meta.verbose_name, content_type.model) + msg = " {}{}".format(msg1, msg2) + print(msg) + # Disconecta função para evitar a chamada repetidas vezes. + post_migrate.disconnect(receiver=cria_models_tipo_autor) + + +post_migrate.connect(receiver=cria_models_tipo_autor) diff --git a/sapl/base/signals.py b/sapl/base/signals.py deleted file mode 100644 index a2caf67df..000000000 --- a/sapl/base/signals.py +++ /dev/null @@ -1,51 +0,0 @@ -from django.contrib.contenttypes.models import ContentType -from django.db.models.signals import post_migrate -from django.db.utils import DEFAULT_DB_ALIAS -import django.dispatch - -from django.utils.translation import ugettext_lazy as _ -from sapl.base.models import Autor, TipoAutor -from sapl.utils import models_with_gr_for_model - - -tramitacao_signal = django.dispatch.Signal(providing_args=['post', 'request']) - - -def cria_models_tipo_autor(app_config=None, verbosity=2, interactive=True, - using=DEFAULT_DB_ALIAS, **kwargs): - - models = models_with_gr_for_model(Autor) - - print("\n\033[93m\033[1m{}\033[0m".format( - _('Atualizando registros TipoAutor do SAPL:'))) - for model in models: - content_type = ContentType.objects.get_for_model(model) - tipo_autor = TipoAutor.objects.filter( - content_type=content_type.id).exists() - - if tipo_autor: - msg1 = "Carga de {} não efetuada.".format( - TipoAutor._meta.verbose_name) - msg2 = " Já Existe um {} {} relacionado...".format( - TipoAutor._meta.verbose_name, - model._meta.verbose_name) - msg = " {}{}".format(msg1, msg2) - else: - novo_autor = TipoAutor() - novo_autor.content_type_id = content_type.id - novo_autor.descricao = model._meta.verbose_name - novo_autor.save() - msg1 = "Carga de {} efetuada.".format( - TipoAutor._meta.verbose_name) - msg2 = " {} {} criado...".format( - TipoAutor._meta.verbose_name, content_type.model) - msg = " {}{}".format(msg1, msg2) - print(msg) - # Disconecta função para evitar a chamada repetidas vezes. - post_migrate.disconnect(receiver=cria_models_tipo_autor) - - -post_migrate.connect(receiver=cria_models_tipo_autor) -post_delete_signal = django.dispatch.Signal(providing_args=['instance', 'request']) - -post_save_signal = django.dispatch.Signal(providing_args=['instance', 'operation', 'request']) diff --git a/sapl/base/templatetags/common_tags.py b/sapl/base/templatetags/common_tags.py index 048778d8d..56d7d356e 100644 --- a/sapl/base/templatetags/common_tags.py +++ b/sapl/base/templatetags/common_tags.py @@ -51,6 +51,13 @@ def model_verbose_name_plural(class_name): model = get_class(class_name) return model._meta.verbose_name_plural +@register.filter +def meta_model_value(instance, attr): + try: + return getattr(instance._meta, attr) + except: + return '' + @register.filter def split(value, arg): @@ -324,12 +331,12 @@ def render_chunk_vendors(extension=None): return mark_safe('\n'.join(tags)) except: return '' - - + + @register.filter(is_safe=True) -@stringfilter +@stringfilter def dont_break_out(value): _safe = '
{}
'.format(value) _safe = mark_safe(_safe) - return _safe + return _safe diff --git a/sapl/base/templatetags/menus.py b/sapl/base/templatetags/menus.py index 5b526002a..0c3f54ca9 100644 --- a/sapl/base/templatetags/menus.py +++ b/sapl/base/templatetags/menus.py @@ -1,7 +1,7 @@ import logging from django import template -from django.core.urlresolvers import reverse +from django.urls import reverse from django.utils.translation import ugettext_lazy as _ import yaml @@ -85,7 +85,7 @@ def nav_run(context, path=None): try: rendered = yaml_template.template.render(context) - menu = yaml.load(rendered) + menu = yaml.load(rendered, yaml.Loader) resolve_urls_inplace(menu, root_pk, rm, context) except Exception as e: raise Exception(_("""Erro na conversão do yaml %s. App: %s. diff --git a/sapl/base/tests/test_view_base.py b/sapl/base/tests/test_view_base.py index 1020da2f4..3a38d379c 100644 --- a/sapl/base/tests/test_view_base.py +++ b/sapl/base/tests/test_view_base.py @@ -1,7 +1,7 @@ import pytest from model_bakery import baker import datetime -from django.core.urlresolvers import reverse +from django.urls import reverse from django.utils.translation import ugettext_lazy as _ from model_bakery import baker diff --git a/sapl/base/urls.py b/sapl/base/urls.py index 2630f5114..b85c55a44 100644 --- a/sapl/base/urls.py +++ b/sapl/base/urls.py @@ -3,52 +3,37 @@ import os from django.conf.urls import include, url from django.contrib.auth import views from django.contrib.auth.decorators import permission_required -from django.contrib.auth.views import (password_reset, password_reset_complete, - password_reset_confirm, - password_reset_done) + from django.views.generic.base import RedirectView, TemplateView -from sapl.base.views import AutorCrud, ConfirmarEmailView, TipoAutorCrud, get_estatistica, DetailUsuarioView, \ - PesquisarAutorView -from sapl.settings import EMAIL_SEND_USER, MEDIA_URL +from sapl.base.views import (AutorCrud, ConfirmarEmailView, TipoAutorCrud, get_estatistica, + RecuperarSenhaEmailView, RecuperarSenhaFinalizadoView, + RecuperarSenhaConfirmaView, RecuperarSenhaCompletoView, RelatorioMateriaAnoAssuntoView, + IndexView, UserCrud) +from sapl.settings import MEDIA_URL, LOGOUT_REDIRECT_URL from .apps import AppConfig -from .forms import LoginForm, NovaSenhaForm, RecuperarSenhaForm +from .forms import LoginForm from .views import (AlterarSenha, AppConfigCrud, CasaLegislativaCrud, - CreateUsuarioView, DeleteUsuarioView, EditUsuarioView, - HelpTopicView, PesquisarUsuarioView, LogotipoView, - RelatorioAtasView, RelatorioAudienciaView, - RelatorioDataFimPrazoTramitacaoView, - RelatorioHistoricoTramitacaoView, - RelatorioMateriasPorAnoAutorTipoView, - RelatorioMateriasPorAutorView, - RelatorioMateriasTramitacaoView, - RelatorioPresencaSessaoView, - RelatorioReuniaoView, SaplSearchView, - RelatorioNormasPublicadasMesView, - RelatorioNormasVigenciaView, - EstatisticasAcessoNormas, - RelatoriosListView, - ListarInconsistenciasView, ListarProtocolosDuplicadosView, - ListarProtocolosComMateriasView, ListarMatProtocoloInexistenteView, - ListarParlamentaresDuplicadosView, - ListarFiliacoesSemDataFiliacaoView, ListarMandatoSemDataInicioView, - ListarParlMandatosIntersecaoView, ListarParlFiliacoesIntersecaoView, - ListarAutoresDuplicadosView, ListarBancadaComissaoAutorExternoView, - ListarLegislaturaInfindavelView, ListarAnexadasCiclicasView, - ListarAnexadosCiclicosView, pesquisa_textual, - RelatorioHistoricoTramitacaoAdmView, RelatorioDocumentosAcessoriosView, - RelatorioNormasPorAutorView) + HelpTopicView, LogotipoView, RelatorioAtasView, + RelatorioAudienciaView, RelatorioDataFimPrazoTramitacaoView, RelatorioHistoricoTramitacaoView, + RelatorioMateriasPorAnoAutorTipoView, RelatorioMateriasPorAutorView, + RelatorioMateriasTramitacaoView, RelatorioPresencaSessaoView, RelatorioReuniaoView, SaplSearchView, + RelatorioNormasPublicadasMesView, RelatorioNormasVigenciaView, + EstatisticasAcessoNormas, RelatoriosListView, ListarInconsistenciasView, + ListarProtocolosDuplicadosView, ListarProtocolosComMateriasView, ListarMatProtocoloInexistenteView, + ListarParlamentaresDuplicadosView, ListarFiliacoesSemDataFiliacaoView, + ListarMandatoSemDataInicioView, ListarParlMandatosIntersecaoView, ListarParlFiliacoesIntersecaoView, + ListarAutoresDuplicadosView, ListarBancadaComissaoAutorExternoView, ListarLegislaturaInfindavelView, + ListarAnexadasCiclicasView, ListarAnexadosCiclicosView, pesquisa_textual, + RelatorioHistoricoTramitacaoAdmView, RelatorioDocumentosAcessoriosView, RelatorioNormasPorAutorView) app_name = AppConfig.name admin_user = [ - url(r'^sistema/usuario/$', PesquisarUsuarioView.as_view(), name='usuario'), - url(r'^sistema/usuario/create$', CreateUsuarioView.as_view(), name='user_create'), - url(r'^sistema/usuario/(?P\d+)$', DetailUsuarioView.as_view(), name='user_detail'), - url(r'^sistema/usuario/(?P\d+)/edit$', EditUsuarioView.as_view(), name='user_edit'), - url(r'^sistema/usuario/(?P\d+)/delete$', DeleteUsuarioView.as_view(), name='user_delete') + url(r'^sistema/usuario/', include(UserCrud.get_urls())), + ] alterar_senha = [ @@ -59,39 +44,21 @@ alterar_senha = [ ] recuperar_senha = [ - url(r'^recuperar-senha/email/$', - password_reset, - {'post_reset_redirect': 'sapl.base:recuperar_senha_finalizado', - 'email_template_name': 'base/recuperar_senha_email.html', - 'html_email_template_name': 'base/recuperar_senha_email.html', - 'template_name': 'base/recuperar_senha_email_form.html', - 'from_email': EMAIL_SEND_USER, - 'password_reset_form': RecuperarSenhaForm}, + url(r'^recuperar-senha/email/$', RecuperarSenhaEmailView.as_view(), name='recuperar_senha_email'), - url(r'^recuperar-senha/finalizado/$', - password_reset_done, - {'template_name': 'base/recupera_senha_email_enviado.html'}, - name='recuperar_senha_finalizado'), - - url(r'^recuperar-senha/(?P[0-9A-Za-z_\-]+)/(?P.+)$', - password_reset_confirm, - {'post_reset_redirect': 'sapl.base:recuperar_senha_completo', - 'template_name': 'base/nova_senha_form.html', - 'set_password_form': NovaSenhaForm}, + RecuperarSenhaFinalizadoView.as_view(), name='recuperar_senha_finalizado'), + url(r'^recuperar-senha/(?P[0-9A-Za-z_\-]+)/(?P.+)/$', RecuperarSenhaConfirmaView.as_view(), name='recuperar_senha_confirma'), - url(r'^recuperar-senha/completo/$', - password_reset_complete, - {'template_name': 'base/recuperar_senha_completo.html'}, - name='recuperar_senha_completo'), + RecuperarSenhaCompletoView.as_view(), name='recuperar_senha_completo'), ] - urlpatterns = [ + url(r'^$', IndexView.as_view(template_name='index.html'), name='sapl_index'), + url(r'^sistema/autor/tipo/', include(TipoAutorCrud.get_urls())), url(r'^sistema/autor/', include(AutorCrud.get_urls())), - url(r'^sistema/autor/pesquisar-autor/', PesquisarAutorView.as_view(), name='pesquisar_autor'), url(r'^sistema/ajuda/(?P\w+)$', HelpTopicView.as_view(), name='help_topic'), @@ -102,7 +69,7 @@ urlpatterns = [ url(r'^sistema/app-config/', include(AppConfigCrud.get_urls())), # TODO mover estas telas para a app 'relatorios' - url(r'^sistema/relatorios/$', + url(r'^sistema/relatorios/$', RelatoriosListView.as_view(), name='relatorios_list'), url(r'^sistema/relatorios/materia-por-autor$', RelatorioMateriasPorAutorView.as_view(), name='materia_por_autor'), @@ -118,6 +85,9 @@ urlpatterns = [ url(r'^sistema/relatorios/materia-por-tramitacao$', RelatorioMateriasTramitacaoView.as_view(), name='materia_por_tramitacao'), + url(r'^sistema/relatorios/materia-por-assunto$', + RelatorioMateriaAnoAssuntoView.as_view(), + name='materia_por_ano_assunto'), url(r'^sistema/relatorios/historico-tramitacoes$', RelatorioHistoricoTramitacaoView.as_view(), name='historico_tramitacoes'), @@ -203,10 +173,10 @@ urlpatterns = [ (TemplateView.as_view(template_name='sistema.html')), name='sistema'), - url(r'^login/$', views.login, { - 'template_name': 'base/login.html', 'authentication_form': LoginForm}, + url(r'^login/$', views.LoginView.as_view(template_name='base/login.html', authentication_form=LoginForm), name='login'), - url(r'^logout/$', views.logout, {'next_page': '/login'}, name='logout'), + url(r'^logout/$', views.LogoutView.as_view(), + {'next_page': LOGOUT_REDIRECT_URL}, name='logout'), url(r'^sistema/search/', SaplSearchView(), name='haystack_search'), diff --git a/sapl/base/views.py b/sapl/base/views.py index 56e8879e1..447509882 100644 --- a/sapl/base/views.py +++ b/sapl/base/views.py @@ -1,90 +1,91 @@ +from collections import OrderedDict import collections -import itertools import datetime +import itertools import logging import os -from collections import OrderedDict from django.contrib import messages from django.contrib.auth import get_user_model from django.contrib.auth.mixins import PermissionRequiredMixin -from django.contrib.auth.models import Group, User +from django.contrib.auth.models import Group from django.contrib.auth.tokens import default_token_generator +from django.contrib.auth.views import (PasswordResetView, PasswordResetConfirmView, PasswordResetCompleteView, + PasswordResetDoneView) from django.core.exceptions import ObjectDoesNotExist, PermissionDenied, ValidationError from django.core.mail import send_mail -from django.core.urlresolvers import reverse, reverse_lazy from django.db import connection -from django.db.models import Count, Q, ProtectedError, Max -from django.shortcuts import render +from django.db.models import Count, Q, Max, F +from django.forms.utils import ErrorList from django.http import Http404, HttpResponseRedirect, JsonResponse +from django.shortcuts import redirect from django.template import TemplateDoesNotExist from django.template.loader import get_template +from django.urls import reverse, reverse_lazy from django.utils import timezone from django.utils.encoding import force_bytes from django.utils.http import urlsafe_base64_decode, urlsafe_base64_encode -from django.utils.translation import string_concat from django.utils.translation import ugettext_lazy as _ -from django.views.generic import (CreateView, DetailView, DeleteView, FormView, ListView, UpdateView) +from django.views.generic import (FormView, ListView) from django.views.generic.base import RedirectView, TemplateView from django_filters.views import FilterView -from haystack.views import SearchView from haystack.query import SearchQuerySet - -from sapl.relatorios.views import (relatorio_materia_em_tramitacao, relatorio_materia_por_autor, - relatorio_materia_por_ano_autor, relatorio_presenca_sessao, - relatorio_historico_tramitacao, relatorio_fim_prazo_tramitacao, - relatorio_atas, relatorio_audiencia, relatorio_normas_mes, - relatorio_normas_vigencia, relatorio_historico_tramitacao_adm, - relatorio_reuniao, relatorio_estatisticas_acesso_normas, - relatorio_normas_por_autor, relatorio_documento_acessorio) +from haystack.views import SearchView from sapl import settings from sapl.audiencia.models import AudienciaPublica, TipoAudienciaPublica -from sapl.base.models import Autor, TipoAutor -from sapl.base.forms import AutorForm, AutorFormForAdmin, TipoAutorForm, AutorFilterSet +from sapl.base.forms import (AutorForm, TipoAutorForm, AutorFilterSet, RecuperarSenhaForm, + NovaSenhaForm, UserAdminForm, + OperadorAutorForm) +from sapl.base.models import Autor, TipoAutor, OperadorAutor from sapl.comissoes.models import Comissao, Reuniao -from sapl.crud.base import CrudAux, make_pagination -from sapl.materia.models import (Anexada, Autoria, DocumentoAcessorio, - MateriaEmTramitacao, MateriaLegislativa, Proposicao, - StatusTramitacao, TipoDocumento, - TipoMateriaLegislativa, UnidadeTramitacao, Tramitacao) +from sapl.crud.base import CrudAux, make_pagination, Crud,\ + ListWithSearchForm, MasterDetailCrud +from sapl.materia.models import (Anexada, Autoria, DocumentoAcessorio, MateriaEmTramitacao, MateriaLegislativa, + Proposicao, StatusTramitacao, TipoDocumento, TipoMateriaLegislativa, UnidadeTramitacao, + MateriaAssunto) from sapl.norma.models import NormaJuridica, TipoNormaJuridica -from sapl.parlamentares.models import (Filiacao, Legislatura, Mandato, Parlamentar, - SessaoLegislativa) -from sapl.protocoloadm.models import (Anexado, DocumentoAdministrativo, Protocolo, - StatusTramitacaoAdministrativo, +from sapl.parlamentares.models import ( + Filiacao, Legislatura, Mandato, Parlamentar, SessaoLegislativa) +from sapl.protocoloadm.models import (Anexado, DocumentoAdministrativo, Protocolo, StatusTramitacaoAdministrativo, TipoDocumentoAdministrativo) -from sapl.sessao.models import (Bancada, PresencaOrdemDia, SessaoPlenaria, - SessaoPlenariaPresenca, TipoSessaoPlenaria) -from sapl.utils import (gerar_hash_arquivo, intervalos_tem_intersecao, - mail_service_configured, parlamentares_ativos, - SEPARADOR_HASH_PROPOSICAO, show_results_filter_set, num_materias_por_tipo) - -from .forms import (AlterarSenhaForm, CasaLegislativaForm, - ConfiguracoesAppForm, RelatorioAtasFilterSet, - RelatorioAudienciaFilterSet, - RelatorioDataFimPrazoTramitacaoFilterSet, - RelatorioHistoricoTramitacaoFilterSet, - RelatorioMateriasPorAnoAutorTipoFilterSet, - RelatorioMateriasPorAutorFilterSet, - RelatorioMateriasTramitacaoFilterSet, - RelatorioPresencaSessaoFilterSet, - RelatorioReuniaoFilterSet, UsuarioCreateForm, - UsuarioEditForm, RelatorioNormasMesFilterSet, - RelatorioNormasVigenciaFilterSet, - EstatisticasAcessoNormasForm, UsuarioFilterSet, - RelatorioHistoricoTramitacaoAdmFilterSet, - RelatorioDocumentosAcessoriosFilterSet, +from sapl.relatorios.views import (relatorio_materia_em_tramitacao, relatorio_materia_por_autor, + relatorio_materia_por_ano_autor, relatorio_presenca_sessao, + relatorio_historico_tramitacao, relatorio_fim_prazo_tramitacao, relatorio_atas, + relatorio_audiencia, relatorio_normas_mes, relatorio_normas_vigencia, + relatorio_historico_tramitacao_adm, relatorio_reuniao, + relatorio_estatisticas_acesso_normas, relatorio_normas_por_autor, + relatorio_documento_acessorio) +from sapl.sessao.models import ( + Bancada, PresencaOrdemDia, SessaoPlenaria, SessaoPlenariaPresenca, TipoSessaoPlenaria) +from sapl.settings import EMAIL_SEND_USER +from sapl.utils import (gerar_hash_arquivo, intervalos_tem_intersecao, mail_service_configured, parlamentares_ativos, + SEPARADOR_HASH_PROPOSICAO, show_results_filter_set, num_materias_por_tipo, + google_recaptcha_configured, sapl_as_sapn, + groups_remove_user, groups_add_user) + +from .forms import (AlterarSenhaForm, CasaLegislativaForm, ConfiguracoesAppForm, RelatorioAtasFilterSet, + RelatorioAudienciaFilterSet, RelatorioDataFimPrazoTramitacaoFilterSet, + RelatorioHistoricoTramitacaoFilterSet, RelatorioMateriasPorAnoAutorTipoFilterSet, + RelatorioMateriasPorAutorFilterSet, RelatorioMateriasTramitacaoFilterSet, + RelatorioPresencaSessaoFilterSet, RelatorioReuniaoFilterSet, + RelatorioNormasMesFilterSet, RelatorioNormasVigenciaFilterSet, EstatisticasAcessoNormasForm, + RelatorioHistoricoTramitacaoAdmFilterSet, RelatorioDocumentosAcessoriosFilterSet, RelatorioNormasPorAutorFilterSet) from .models import AppConfig, CasaLegislativa -from rest_framework.authtoken.models import Token - def get_casalegislativa(): return CasaLegislativa.objects.first() +class IndexView(TemplateView): + def get(self, request, *args, **kwargs): + if sapl_as_sapn(): + return redirect('/norma/pesquisar') + return TemplateView.get(self, request, *args, **kwargs) + + class ConfirmarEmailView(TemplateView): template_name = "email/confirma.html" @@ -97,6 +98,49 @@ class ConfirmarEmailView(TemplateView): return self.render_to_response(context) +class RecuperarSenhaEmailView(PasswordResetView): + logger = logging.getLogger(__name__) + + success_url = reverse_lazy('sapl.base:recuperar_senha_finalizado') + email_template_name = 'base/recuperar_senha_email.html' + html_email_template_name = 'base/recuperar_senha_email.html' + template_name = 'base/recuperar_senha_email_form.html' + from_email = EMAIL_SEND_USER + form_class = RecuperarSenhaForm + + def get(self, request, *args, **kwargs): + + if not google_recaptcha_configured(): + self.logger.warning(_('Google Recaptcha não configurado!')) + messages.error(request, _('Google Recaptcha não configurado!')) + return redirect(request.META.get('HTTP_REFERER', '/')) + + return PasswordResetView.get(self, request, *args, **kwargs) + + def post(self, request, *args, **kwargs): + + if not google_recaptcha_configured(): + self.logger.warning(_('Google Recaptcha não configurado!')) + messages.error(request, _('Google Recaptcha não configurado!')) + return redirect(request.META.get('HTTP_REFERER', '/')) + + return PasswordResetView.post(self, request, *args, **kwargs) + + +class RecuperarSenhaFinalizadoView(PasswordResetDoneView): + template_name = 'base/recupera_senha_email_enviado.html' + + +class RecuperarSenhaConfirmaView(PasswordResetConfirmView): + success_url = reverse_lazy('sapl.base:recuperar_senha_completo') + template_name = 'base/nova_senha_form.html' + form_class = NovaSenhaForm + + +class RecuperarSenhaCompletoView(PasswordResetCompleteView): + template_name = 'base/recuperar_senha_completo.html' + + class TipoAutorCrud(CrudAux): model = TipoAutor help_topic = 'tipo-autor' @@ -108,7 +152,7 @@ class TipoAutorCrud(CrudAux): @property def verbose_name(self): vn = super().verbose_name - vn = string_concat(vn, ' ', _('Externo ao SAPL')) + vn = "{} {}".format(vn, _('Externo ao SAPL')) return vn class ListView(CrudAux.ListView): @@ -150,211 +194,143 @@ class AutorCrud(CrudAux): help_topic = 'autor' class BaseMixin(CrudAux.BaseMixin): - list_field_names = ['tipo', 'nome', 'user'] - - class DeleteView(CrudAux.DeleteView): - - def delete(self, *args, **kwargs): - self.object = self.get_object() - - if self.object.user: - # FIXME melhorar captura de grupo de Autor, levando em conta - # trad - grupo = Group.objects.filter(name='Autor')[0] - self.object.user.groups.remove(grupo) - - return CrudAux.DeleteView.delete(self, *args, **kwargs) - - class UpdateView(CrudAux.UpdateView): - logger = logging.getLogger(__name__) - layout_key = None - form_class = AutorForm - - def form_valid(self, form): - # devido a implement do form o form_valid do Crud deve ser pulado - return super(CrudAux.UpdateView, self).form_valid(form) - - def post(self, request, *args, **kwargs): - if request.user.is_superuser: - self.form_class = AutorFormForAdmin - return CrudAux.UpdateView.post(self, request, *args, **kwargs) - - def get(self, request, *args, **kwargs): - if request.user.is_superuser: - self.form_class = AutorFormForAdmin - return CrudAux.UpdateView.get(self, request, *args, **kwargs) - - def get_success_url(self): - username = self.request.user.username - pk_autor = self.object.id - url_reverse = reverse('sapl.base:autor_detail', - kwargs={'pk': pk_autor}) - - if not mail_service_configured(): - self.logger.warning(_('Registro de Autor sem envio de email. ' - 'Servidor de email não configurado.')) - return url_reverse - - try: - self.logger.debug('user={}. Enviando email na edição ' - 'de Autores.'.format(username)) - kwargs = {} - user = self.object.user - - if not user: - return url_reverse - - kwargs['token'] = default_token_generator.make_token(user) - kwargs['uidb64'] = urlsafe_base64_encode(force_bytes(user.pk)) - assunto = "SAPL - Confirmação de Conta" - full_url = self.request.get_raw_uri() - url_base = full_url[:full_url.find('sistema') - 1] - - mensagem = ( - "Este e-mail foi utilizado para fazer cadastro no " + - "SAPL com o perfil de Autor. Agora você pode " + - "criar/editar/enviar Proposições.\n" + - "Seu nome de usuário é: " + - self.request.POST['username'] + "\n" - "Caso você não tenha feito este cadastro, por favor " + - "ignore esta mensagem. Caso tenha, clique " + - "no link abaixo\n" + url_base + - reverse('sapl.base:confirmar_email', kwargs=kwargs)) - remetente = settings.EMAIL_SEND_USER - destinatario = [user.email] - send_mail(assunto, mensagem, remetente, destinatario, - fail_silently=False) - except Exception as e: - self.logger.error('user={}. Erro no envio de email na edição de' - ' Autores. {}'.format(username, str(e))) - - return url_reverse - - class CreateView(CrudAux.CreateView): - logger = logging.getLogger(__name__) - form_class = AutorForm - layout_key = None - - def post(self, request, *args, **kwargs): - if request.user.is_superuser: - self.form_class = AutorFormForAdmin - return CrudAux.CreateView.post(self, request, *args, **kwargs) + list_field_names = ['nome', 'tipo', 'operadores'] - def get(self, request, *args, **kwargs): - if request.user.is_superuser: - self.form_class = AutorFormForAdmin - return CrudAux.CreateView.get(self, request, *args, **kwargs) - - def get_success_url(self): + def send_mail_operadores(self): username = self.request.user.username - pk_autor = self.object.id - url_reverse = reverse('sapl.base:autor_detail', - kwargs={'pk': pk_autor}) if not mail_service_configured(): self.logger.warning(_('Registro de Autor sem envio de email. ' 'Servidor de email não configurado.')) - return url_reverse + return try: self.logger.debug('user=' + username + '. Enviando email na criação de Autores.') kwargs = {} - user = self.object.user - - if not user: - return url_reverse - - kwargs['token'] = default_token_generator.make_token(user) - kwargs['uidb64'] = urlsafe_base64_encode(force_bytes(user.pk)) - assunto = "SAPL - Confirmação de Conta" - full_url = self.request.get_raw_uri() - url_base = full_url[:full_url.find('sistema') - 1] - - mensagem = ( - "Este e-mail foi utilizado para fazer cadastro no " + - "SAPL com o perfil de Autor. Agora você pode " + - "criar/editar/enviar Proposições.\n" + - "Seu nome de usuário é: " + - self.request.POST['username'] + "\n" - "Caso você não tenha feito este cadastro, por favor " + - "ignore esta mensagem. Caso tenha, clique " + - "no link abaixo\n" + url_base + - reverse('sapl.base:confirmar_email', kwargs=kwargs)) - remetente = settings.EMAIL_SEND_USER - destinatario = [user.email] - send_mail(assunto, mensagem, remetente, destinatario, - fail_silently=False) + + for user in self.object.operadores.all(): + + if not user.email: + self.logger.warning( + _('Registro de Autor sem envio de email. ' + 'Usuário sem um email cadastrado.')) + continue + + kwargs['token'] = default_token_generator.make_token(user) + kwargs['uidb64'] = urlsafe_base64_encode( + force_bytes(user.pk)) + assunto = "SAPL - Confirmação de Conta" + full_url = self.request.get_raw_uri() + url_base = full_url[:full_url.find('sistema') - 1] + + mensagem = ( + "Este e-mail foi utilizado para fazer cadastro no " + + "SAPL com o perfil de Autor. Agora você pode " + + "criar/editar/enviar Proposições.\n" + + "Seu nome de usuário é: " + + self.request.POST['username'] + "\n" + "Caso você não tenha feito este cadastro, por favor " + + "ignore esta mensagem. Caso tenha, clique " + + "no link abaixo\n" + url_base + + reverse('sapl.base:confirmar_email', kwargs=kwargs)) + remetente = settings.EMAIL_SEND_USER + destinatario = [user.email] + send_mail(assunto, mensagem, remetente, destinatario, + fail_silently=False) except Exception as e: print( _('Erro no envio de email na criação de Autores.')) self.logger.error( 'user=' + username + '. Erro no envio de email na criação de Autores. ' + str(e)) - return url_reverse - - -class PesquisarAutorView(FilterView): - model = Autor - filterset_class = AutorFilterSet - paginate_by = 10 + class DeleteView(CrudAux.DeleteView): - def get_filterset_kwargs(self, filterset_class): - super().get_filterset_kwargs(filterset_class) + def delete(self, *args, **kwargs): + self.object = self.get_object() - kwargs = {'data': self.request.GET or None} + grupo = Group.objects.filter(name='Autor')[0] + lista_operadores = list(self.object.operadores.all()) - qs = self.get_queryset().order_by('nome').distinct() + response = CrudAux.DeleteView.delete(self, *args, **kwargs) - kwargs.update({ - 'queryset': qs, - }) - return kwargs + if not Autor.objects.filter(pk=kwargs['pk']).exists(): + for u in lista_operadores: + u.groups.remove(grupo) - def get_context_data(self, **kwargs): - context = super().get_context_data(**kwargs) + return response - paginator = context['paginator'] - page_obj = context['page_obj'] + class DetailView(CrudAux.DetailView): - context['page_range'] = make_pagination(page_obj.number, paginator.num_pages) + def hook_operadores(self, obj): + r = '
    {}
'.format( + ''.join( + [ + '
  • {} - ({}) - ' + '{}' + '
  • '.format(u.first_name, u, u.email) + for u in obj.operadores.all() + ] + ) - context['NO_ENTRIES_MSG'] = 'Nenhum Autor encontrado!' + ) + return 'Operadores', r - context['title'] = _('Autores') + class UpdateView(CrudAux.UpdateView): + logger = logging.getLogger(__name__) + layout_key = None + form_class = AutorForm - return context + def get_success_url(self): + self.send_mail_operadores() + return super().get_success_url() - def get(self, request, *args, **kwargs): - super().get(request) + class CreateView(CrudAux.CreateView): + logger = logging.getLogger(__name__) + form_class = AutorForm + layout_key = None - data = self.filterset.data - url = '' - if data: - url = "&" + str(self.request.META['QUERY_STRING']) - if url.startswith("&page"): - ponto_comeco = url.find('nome=') - 1 - url = url[ponto_comeco:] + def get_success_url(self): + self.send_mail_operadores() + return super().get_success_url() - context = self.get_context_data(filter=self.filterset, - object_list=self.object_list, - filter_url=url, - numero_res=len(self.object_list)) + class ListView(CrudAux.ListView): + form_search_class = ListWithSearchForm + + def hook_operadores(self, *args, **kwargs): + r = '
      {}
    '.format( + ''.join( + [ + '
  • {} - ({})
  • '.format(u.first_name, u) + for u in args[0].operadores.all() + ] + ) - context['show_results'] = show_results_filter_set(self.request.GET.copy()) + ) + return r, '' - return self.render_to_response(context) + def get_queryset(self): + qs = self.model.objects.all() + q_param = self.request.GET.get('q', '') + if q_param: + q = Q(nome__icontains=q_param) + q |= Q(cargo__icontains=q_param) + q |= Q(tipo__descricao__icontains=q_param) + q |= Q(operadores__username__icontains=q_param) + q |= Q(operadores__email__icontains=q_param) + qs = qs.filter(q) + return qs.distinct('nome', 'id').order_by('nome', 'id') class RelatoriosListView(TemplateView): - template_name='base/relatorios_list.html' + template_name = 'base/relatorios_list.html' def get_context_data(self, **kwargs): context = super(TemplateView, self).get_context_data(**kwargs) estatisticas_acesso_normas = AppConfig.objects.first().estatisticas_acesso_normas context['estatisticas_acesso_normas'] = True if estatisticas_acesso_normas == 'S' else False - + return context @@ -386,10 +362,10 @@ class RelatorioDocumentosAcessoriosView(RelatorioMixin, FilterView): if not self.filterset.form.is_valid(): return context - + query_dict = self.request.GET.copy() context['show_results'] = show_results_filter_set(query_dict) - + context['tipo_documento'] = str( TipoDocumento.objects.get(pk=self.request.GET['tipo']) ) @@ -449,22 +425,23 @@ class RelatorioPresencaSessaoView(RelatorioMixin, FilterView): def get_context_data(self, **kwargs): - context = super(RelatorioPresencaSessaoView, - self).get_context_data(**kwargs) + context = super().get_context_data(**kwargs) context['title'] = _('Presença dos parlamentares nas sessões') # Verifica se os campos foram preenchidos if not self.filterset.form.is_valid(): return context - + cd = self.filterset.form.cleaned_data if not cd['data_inicio'] and not cd['sessao_legislativa'] \ - and not cd['legislatura']: - msg = _("Formulário inválido! Preencha pelo menos algum dos campos Período, Legislatura ou Sessão Legislativa.") + and not cd['legislatura']: + msg = _( + "Formulário inválido! Preencha pelo menos algum dos campos Período, Legislatura ou Sessão Legislativa.") messages.error(self.request, msg) return context - # Caso a data tenha sido preenchida, verifica se foi preenchida corretamente + # Caso a data tenha sido preenchida, verifica se foi preenchida + # corretamente if self.request.GET.get('data_inicio_0') and not self.request.GET.get('data_inicio_1'): msg = _("Formulário inválido! Preencha a data do Período Final.") messages.error(self.request, msg) @@ -486,58 +463,62 @@ class RelatorioPresencaSessaoView(RelatorioMixin, FilterView): sessao_legislativa_pk = self.request.GET.get('sessao_legislativa') if sessao_legislativa_pk: param0['sessao_plenaria__sessao_legislativa_id'] = sessao_legislativa_pk - sessao_legislativa = SessaoLegislativa.objects.get(id=sessao_legislativa_pk) + sessao_legislativa = SessaoLegislativa.objects.get( + id=sessao_legislativa_pk) context['sessao_legislativa'] = sessao_legislativa tipo_sessao_plenaria_pk = self.request.GET.get('tipo') context['tipo'] = '' if tipo_sessao_plenaria_pk: param0['sessao_plenaria__tipo_id'] = tipo_sessao_plenaria_pk - context['tipo'] = TipoSessaoPlenaria.objects.get(id=tipo_sessao_plenaria_pk) + context['tipo'] = TipoSessaoPlenaria.objects.get( + id=tipo_sessao_plenaria_pk) _range = [] if ('data_inicio_0' in self.request.GET) and self.request.GET['data_inicio_0'] and \ - ('data_inicio_1' in self.request.GET) and self.request.GET['data_inicio_1']: + ('data_inicio_1' in self.request.GET) and self.request.GET['data_inicio_1']: where = context['object_list'].query.where _range = where.children[0].rhs elif legislatura_pk and not sessao_legislativa_pk: _range = [legislatura.data_inicio, legislatura.data_fim] - + elif sessao_legislativa_pk: - _range = [sessao_legislativa.data_inicio, sessao_legislativa.data_fim] + _range = [sessao_legislativa.data_inicio, + sessao_legislativa.data_fim] param0.update({'sessao_plenaria__data_inicio__range': _range}) - # Parlamentares com Mandato no intervalo de tempo (Ativos) parlamentares_qs = parlamentares_ativos( _range[0], _range[1]).order_by('nome_parlamentar') - parlamentares_id = parlamentares_qs.values_list( - 'id', flat=True) + parlamentares_id = parlamentares_qs.values_list('id', flat=True) # Presenças de cada Parlamentar em Sessões - presenca_sessao = SessaoPlenariaPresenca.objects.filter(**param0).values_list( - 'parlamentar_id').annotate( - sessao_count=Count('id')) + presenca_sessao = SessaoPlenariaPresenca.objects.filter( + **param0).values_list('parlamentar_id').annotate(sessao_count=Count('id')) # Presenças de cada Ordem do Dia - presenca_ordem = PresencaOrdemDia.objects.filter(**param0).values_list( - 'parlamentar_id').annotate( - sessao_count=Count('id')) + presenca_ordem = PresencaOrdemDia.objects.filter( + **param0).values_list('parlamentar_id').annotate(sessao_count=Count('id')) total_ordemdia = PresencaOrdemDia.objects.filter( - **param0).distinct('sessao_plenaria__id').order_by( - 'sessao_plenaria__id').count() + **param0).distinct('sessao_plenaria__id').order_by('sessao_plenaria__id').count() total_sessao = context['object_list'].count() username = self.request.user.username + context['exibir_somente_titular'] = self.request.GET.get( + 'exibir_somente_titular') == 'on' + context['exibir_somente_ativo'] = self.request.GET.get( + 'exibir_somente_ativo') == 'on' + # Completa o dicionario as informacoes parlamentar/sessao/ordem parlamentares_presencas = [] - for i, p in enumerate(parlamentares_qs): + for p in parlamentares_qs: + parlamentar = {} m = p.mandato_set.filter(Q(data_inicio_mandato__lte=_range[0], data_fim_mandato__gte=_range[1]) | Q(data_inicio_mandato__lte=_range[0], data_fim_mandato__isnull=True) | Q(data_inicio_mandato__gte=_range[0], data_fim_mandato__lte=_range[1]) | @@ -545,57 +526,92 @@ class RelatorioPresencaSessaoView(RelatorioMixin, FilterView): Q(data_inicio_mandato__gte=_range[0], data_fim_mandato__lte=_range[1])) m = m.last() - parlamentares_presencas.append({ - 'parlamentar': p, - 'titular': m.titular if m else False, - 'sessao_porc': 0, - 'ordemdia_porc': 0 - }) + + if not context['exibir_somente_titular'] and not context['exibir_somente_ativo']: + parlamentar = { + 'parlamentar': p, + 'titular': m.titular if m else False, + 'sessao_porc': 0, + 'ordemdia_porc': 0 + } + elif context['exibir_somente_titular'] and not context['exibir_somente_ativo']: + if m and m.titular: + parlamentar = { + 'parlamentar': p, + 'titular': m.titular if m else False, + 'sessao_porc': 0, + 'ordemdia_porc': 0 + } + else: + continue + elif not context['exibir_somente_titular'] and context['exibir_somente_ativo']: + if p.ativo: + parlamentar = { + 'parlamentar': p, + 'titular': m.titular if m else False, + 'sessao_porc': 0, + 'ordemdia_porc': 0 + } + else: + continue + elif context['exibir_somente_titular'] and context['exibir_somente_ativo']: + if m and m.titular and p.ativo: + parlamentar = { + 'parlamentar': p, + 'titular': m.titular if m else False, + 'sessao_porc': 0, + 'ordemdia_porc': 0 + } + else: + continue + else: + continue + try: self.logger.debug( - 'user=' + username + '. Tentando obter presença do parlamentar (pk={}).'.format(p.id)) + F'user={username}. Tentando obter presença do parlamentar (pk={p.id}).') sessao_count = presenca_sessao.get(parlamentar_id=p.id)[1] except ObjectDoesNotExist as e: self.logger.error( - 'user=' + username + '. Erro ao obter presença do parlamentar (pk={}). Definido como 0. '.format(p.id) + str(e)) + F'user={username}. Erro ao obter presença do parlamentar (pk={p.id}). Definido como 0. {str(e)}') sessao_count = 0 try: # Presenças de cada Ordem do Dia self.logger.info( - 'user=' + username + '. Tentando obter PresencaOrdemDia para o parlamentar pk={}.'.format(p.id)) + F'user={username}. Tentando obter PresencaOrdemDia para o parlamentar pk={p.id}.') ordemdia_count = presenca_ordem.get(parlamentar_id=p.id)[1] except ObjectDoesNotExist: - self.logger.error('user=' + username + '. Erro ao obter PresencaOrdemDia para o parlamentar pk={}. ' - 'Definido como 0.'.format(p.id)) + self.logger.error( + F'user={username}. Erro ao obter PresencaOrdemDia para o parlamentar pk={p.id}. Definido como 0.') ordemdia_count = 0 - parlamentares_presencas[i].update({ + parlamentar.update({ 'sessao_count': sessao_count, 'ordemdia_count': ordemdia_count }) if total_sessao != 0: - parlamentares_presencas[i].update( - {'sessao_porc': round( - sessao_count * 100 / total_sessao, 2)}) + parlamentar.update({'sessao_porc': round( + sessao_count * 100 / total_sessao, 2)}) if total_ordemdia != 0: - parlamentares_presencas[i].update( - {'ordemdia_porc': round( - ordemdia_count * 100 / total_ordemdia, 2)}) + parlamentar.update({'ordemdia_porc': round( + ordemdia_count * 100 / total_ordemdia, 2)}) + + parlamentares_presencas.append(parlamentar) context['date_range'] = _range context['total_ordemdia'] = total_ordemdia context['total_sessao'] = context['object_list'].count() context['parlamentares'] = parlamentares_presencas - context['periodo'] = ( - self.request.GET['data_inicio_0'] + - ' - ' + self.request.GET['data_inicio_1']) + context['periodo'] = f"{self.request.GET['data_inicio_0']} - {self.request.GET['data_inicio_1']}" context['sessao_legislativa'] = '' context['legislatura'] = '' - context['exibir_ordem'] = self.request.GET.get('exibir_ordem_dia') == 'on' + context['exibir_ordem'] = self.request.GET.get( + 'exibir_ordem_dia') == 'on' if sessao_legislativa_pk: - context['sessao_legislativa'] = SessaoLegislativa.objects.get(id=sessao_legislativa_pk) + context['sessao_legislativa'] = SessaoLegislativa.objects.get( + id=sessao_legislativa_pk) if legislatura_pk: context['legislatura'] = Legislatura.objects.get(id=legislatura_pk) # ===================================================================== @@ -616,7 +632,8 @@ class RelatorioHistoricoTramitacaoView(RelatorioMixin, FilterView): def get_context_data(self, **kwargs): context = super(RelatorioHistoricoTramitacaoView, self).get_context_data(**kwargs) - context['title'] = _('Histórico de Tramitações de Matérias Legislativas') + context['title'] = _( + 'Histórico de Tramitações de Matérias Legislativas') if not self.filterset.form.is_valid(): return context qr = self.request.GET.copy() @@ -814,21 +831,22 @@ class RelatorioMateriasTramitacaoView(RelatorioMixin, FilterView): kwargs['tramitacao__status'] = status_tramitacao if autor: kwargs['materia__autores'] = autor - + qs = qs.filter(**kwargs) data['queryset'] = qs - - self.total_resultados_tipos = num_materias_por_tipo(qs, "materia__tipo") + + self.total_resultados_tipos = num_materias_por_tipo( + qs, "materia__tipo") return data def get_queryset(self): qs = super().get_queryset() qs = qs.select_related('materia__tipo').filter( - materia__em_tramitacao=True - ).exclude( - tramitacao__status__indicador='F' - ).order_by('-materia__ano', '-materia__numero') + materia__em_tramitacao=True + ).exclude( + tramitacao__status__indicador='F' + ).order_by('-materia__ano', '-materia__numero') return qs def get_context_data(self, **kwargs): @@ -837,7 +855,7 @@ class RelatorioMateriasTramitacaoView(RelatorioMixin, FilterView): ).get_context_data(**kwargs) context['title'] = _('Matérias em Tramitação') - + if not self.filterset.form.is_valid(): return context @@ -853,7 +871,7 @@ class RelatorioMateriasTramitacaoView(RelatorioMixin, FilterView): ) else: context['tipo'] = '' - + if self.request.GET['tramitacao__status']: tramitacao_status = self.request.GET['tramitacao__status'] context['tramitacao__status'] = ( @@ -861,7 +879,7 @@ class RelatorioMateriasTramitacaoView(RelatorioMixin, FilterView): ) else: context['tramitacao__status'] = '' - + if self.request.GET['tramitacao__unidade_tramitacao_destino']: context['tramitacao__unidade_tramitacao_destino'] = ( str(UnidadeTramitacao.objects.get( @@ -878,7 +896,7 @@ class RelatorioMateriasTramitacaoView(RelatorioMixin, FilterView): ) else: context['materia__autor'] = '' - + context['filter_url'] = ('&' + qr.urlencode()) if len(qr) > 0 else '' context['show_results'] = show_results_filter_set(qr) @@ -1010,9 +1028,36 @@ class RelatorioMateriasPorAutorView(RelatorioMixin, FilterView): else: context['autor'] = '' context['periodo'] = ( - self.request.GET['data_apresentacao_0'] + - ' - ' + self.request.GET['data_apresentacao_1']) + self.request.GET['data_apresentacao_0'] + + ' - ' + self.request.GET['data_apresentacao_1']) + + return context + +class RelatorioMateriaAnoAssuntoView(ListView): + template_name = 'base/RelatorioMateriasAnoAssunto.html' + + def get_queryset(self): + return MateriaAssunto.objects.all().values( + 'assunto_id', + assunto_materia=F('assunto__assunto'), + ano=F('materia__ano')).annotate( + total=Count('assunto_id')).order_by('-materia__ano', 'assunto_id') + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context['title'] = _('Matérias por Ano e Assunto') + + # In[10]: MateriaAssunto.objects.all().values( + # ...: 'materia__ano').annotate( + # ...: total = Count('materia__ano')).order_by('-materia__ano') + + mat = MateriaLegislativa.objects.filter( + materiaassunto__isnull=True).values( + 'ano').annotate( + total=Count('ano')).order_by('-ano') + + context.update({"materias_sem_assunto": mat}) return context @@ -1038,15 +1083,15 @@ class RelatorioNormasPublicadasMesView(RelatorioMixin, FilterView): context['ano'] = self.request.GET['ano'] normas_mes = collections.OrderedDict() - meses = {1: 'Janeiro', 2: 'Fevereiro', 3:'Março', 4: 'Abril', 5: 'Maio', 6:'Junho', - 7: 'Julho', 8: 'Agosto', 9:'Setembro', 10:'Outubro', 11:'Novembro', 12:'Dezembro'} + meses = {1: 'Janeiro', 2: 'Fevereiro', 3: 'Março', 4: 'Abril', 5: 'Maio', 6: 'Junho', + 7: 'Julho', 8: 'Agosto', 9: 'Setembro', 10: 'Outubro', 11: 'Novembro', 12: 'Dezembro'} for norma in context['object_list']: if not meses[norma.data.month] in normas_mes: normas_mes[meses[norma.data.month]] = [] normas_mes[meses[norma.data.month]].append(norma) - + context['normas_mes'] = normas_mes - + quant_normas_mes = {} for key in normas_mes.keys(): quant_normas_mes[key] = len(normas_mes[key]) @@ -1073,19 +1118,20 @@ class RelatorioNormasVigenciaView(RelatorioMixin, FilterView): vigencia = kwargs['data']['vigencia'] if ano: qs = qs.filter(ano=ano) - + if vigencia == 'True': qs_dt_not_null = qs.filter(data_vigencia__isnull=True) - qs = (qs_dt_not_null | qs.filter(data_vigencia__gte=datetime.datetime.now().date())).distinct() + qs = (qs_dt_not_null | qs.filter( + data_vigencia__gte=datetime.datetime.now().date())).distinct() else: - qs = qs.filter(data_vigencia__lt=datetime.datetime.now().date()) + qs = qs.filter( + data_vigencia__lt=datetime.datetime.now().date()) kwargs.update({ 'queryset': qs }) return kwargs - def get_context_data(self, **kwargs): context = super(RelatorioNormasVigenciaView, self).get_context_data(**kwargs) @@ -1095,17 +1141,20 @@ class RelatorioNormasVigenciaView(RelatorioMixin, FilterView): if not self.filterset.form.is_valid(): return context - normas_totais = NormaJuridica.objects.filter(ano=self.request.GET['ano']) - + normas_totais = NormaJuridica.objects.filter( + ano=self.request.GET['ano']) + context['quant_total'] = len(normas_totais) if self.request.GET['vigencia'] == 'True': context['vigencia'] = 'Vigente' context['quant_vigente'] = len(context['object_list']) - context['quant_nao_vigente'] = context['quant_total'] - context['quant_vigente'] + context['quant_nao_vigente'] = context['quant_total'] - \ + context['quant_vigente'] else: context['vigencia'] = 'Não vigente' context['quant_nao_vigente'] = len(context['object_list']) - context['quant_vigente'] = context['quant_total'] - context['quant_nao_vigente'] + context['quant_vigente'] = context['quant_total'] - \ + context['quant_nao_vigente'] qr = self.request.GET.copy() context['filter_url'] = ('&' + qr.urlencode()) if len(qr) > 0 else '' @@ -1131,7 +1180,7 @@ class EstatisticasAcessoNormas(TemplateView): return self.render_to_response(context) context['ano'] = self.request.GET['ano'] - + query = ''' select norma_id, ano, extract(month from horario_acesso) as mes, count(*) from norma_normaestatisticas @@ -1144,20 +1193,21 @@ class EstatisticasAcessoNormas(TemplateView): rows = cursor.fetchall() normas_mes = collections.OrderedDict() - meses = {1: 'Janeiro', 2: 'Fevereiro', 3:'Março', 4: 'Abril', 5: 'Maio', 6:'Junho', - 7: 'Julho', 8: 'Agosto', 9:'Setembro', 10:'Outubro', 11:'Novembro', 12:'Dezembro'} - + meses = {1: 'Janeiro', 2: 'Fevereiro', 3: 'Março', 4: 'Abril', 5: 'Maio', 6: 'Junho', + 7: 'Julho', 8: 'Agosto', 9: 'Setembro', 10: 'Outubro', 11: 'Novembro', 12: 'Dezembro'} + for row in rows: if not meses[int(row[2])] in normas_mes: normas_mes[meses[int(row[2])]] = [] norma_est = [NormaJuridica.objects.get(id=row[0]), row[3]] normas_mes[meses[int(row[2])]].append(norma_est) - + # Ordena por acesso e limita em 5 for n in normas_mes: - sorted_by_value = sorted(normas_mes[n], key=lambda kv: kv[1], reverse=True) + sorted_by_value = sorted( + normas_mes[n], key=lambda kv: kv[1], reverse=True) normas_mes[n] = sorted_by_value[0:5] - + context['normas_mes'] = normas_mes is_relatorio = request.GET.get('relatorio') @@ -1201,19 +1251,19 @@ class ListarInconsistenciasView(PermissionRequiredMixin, ListView): ('filiacoes_sem_data_filiacao', 'Filiações sem data filiação', len(filiacoes_sem_data_filiacao()) - ) + ) ) tabela.append( ('mandato_sem_data_inicio', 'Mandatos sem data inicial', - len(mandato_sem_data_inicio()) - ) + len(mandato_sem_data_inicio()) + ) ) tabela.append( ('parlamentares_duplicados', 'Parlamentares duplicados', len(parlamentares_duplicados()) - ) + ) ) tabela.append( ('parlamentares_mandatos_intersecao', @@ -1224,8 +1274,8 @@ class ListarInconsistenciasView(PermissionRequiredMixin, ListView): tabela.append( ('parlamentares_filiacoes_intersecao', 'Parlamentares com filiações em interseção', - len(parlamentares_filiacoes_intersecao()) - ) + len(parlamentares_filiacoes_intersecao()) + ) ) tabela.append( ('autores_duplicados', @@ -1243,7 +1293,7 @@ class ListarInconsistenciasView(PermissionRequiredMixin, ListView): ('legislatura_infindavel', 'Legislaturas sem data fim', len(legislatura_infindavel()) - ) + ) ) tabela.append( ('anexadas_ciclicas', @@ -1259,6 +1309,7 @@ class ListarInconsistenciasView(PermissionRequiredMixin, ListView): ) return tabela + def materias_anexadas_ciclicas(): ciclos = [] @@ -1272,7 +1323,8 @@ def materias_anexadas_ciclicas(): ma = anexadas.pop() if ma not in visitados: visitados.append(ma) - anexadas.extend([a.materia_anexada for a in Anexada.objects.filter(materia_principal=ma)]) + anexadas.extend( + [a.materia_anexada for a in Anexada.objects.filter(materia_principal=ma)]) else: ciclo_list = visitados + [ma] ciclos.append(ciclo_list) @@ -1286,12 +1338,14 @@ def materias_anexadas_ciclicas(): return ciclos_unique + def is_ciclo_unique(ciclo, ciclos_set): - if set(ciclo) not in ciclos_set: - ciclos_set.append(set(ciclo)) - return True - else: - return False + if set(ciclo) not in ciclos_set: + ciclos_set.append(set(ciclo)) + return True + else: + return False + def anexados_ciclicos(ofMateriaLegislativa): ciclicos = [] @@ -1333,7 +1387,8 @@ def anexados_ciclicos(ofMateriaLegislativa): ) anexados_temp.extend(anexados_anexado) else: - ciclicos.append((anexado.data_anexacao, anexado.materia_principal, anexado.materia_anexada)) + ciclicos.append( + (anexado.data_anexacao, anexado.materia_principal, anexado.materia_anexada)) else: if anexado.documento_anexado not in anexados_total: if not principal['documento_principal'] == anexado.documento_anexado.pk: @@ -1343,7 +1398,8 @@ def anexados_ciclicos(ofMateriaLegislativa): ) anexados_temp.extend(anexados_anexado) else: - ciclicos.append((anexado.data_anexacao, anexado.documento_principal, anexado.documento_anexado)) + ciclicos.append( + (anexado.data_anexacao, anexado.documento_principal, anexado.documento_anexado)) return ciclicos @@ -1391,7 +1447,7 @@ class ListarAnexadasCiclicasView(PermissionRequiredMixin, ListView): paginator = context['paginator'] page_obj = context['page_obj'] - + context['page_range'] = make_pagination( page_obj.number, paginator.num_pages ) @@ -1417,14 +1473,14 @@ class ListarLegislaturaInfindavelView(PermissionRequiredMixin, ListView): def get_context_data(self, **kwargs): context = super( ListarLegislaturaInfindavelView, self - ).get_context_data(**kwargs) + ).get_context_data(**kwargs) paginator = context['paginator'] page_obj = context['page_obj'] context['page_range'] = make_pagination( page_obj.number, paginator.num_pages) context[ 'NO_ENTRIES_MSG' - ] = 'Nenhuma encontrada.' + ] = 'Nenhuma encontrada.' return context @@ -1433,20 +1489,20 @@ def bancada_comissao_autor_externo(): lista_bancada_autor_externo = [] for bancada in Bancada.objects.all().order_by('nome'): - autor_externo = bancada.autor.filter(tipo=tipo_autor_externo) + autor_externo = bancada.autor.filter(tipo__in=tipo_autor_externo) if autor_externo: - q_autor_externo = bancada.autor.get(tipo=tipo_autor_externo) + q_autor_externo = bancada.autor.get(tipo__in=tipo_autor_externo) lista_bancada_autor_externo.append( (q_autor_externo, bancada, 'Bancada', 'sistema/bancada') ) lista_comissao_autor_externo = [] for comissao in Comissao.objects.all().order_by('nome'): - autor_externo = comissao.autor.filter(tipo=tipo_autor_externo) + autor_externo = comissao.autor.filter(tipo__in=tipo_autor_externo) if autor_externo: - q_autor_externo = comissao.autor.get(tipo=tipo_autor_externo) + q_autor_externo = comissao.autor.get(tipo__in=tipo_autor_externo) lista_comissao_autor_externo.append( (q_autor_externo, comissao, 'Comissão', 'comissao') ) @@ -1467,14 +1523,14 @@ class ListarBancadaComissaoAutorExternoView(PermissionRequiredMixin, ListView): def get_context_data(self, **kwargs): context = super( ListarBancadaComissaoAutorExternoView, self - ).get_context_data(**kwargs) + ).get_context_data(**kwargs) paginator = context['paginator'] page_obj = context['page_obj'] context['page_range'] = make_pagination( page_obj.number, paginator.num_pages) context[ 'NO_ENTRIES_MSG' - ] = 'Nenhuma encontrada.' + ] = 'Nenhuma encontrada.' return context @@ -1500,7 +1556,7 @@ class ListarAutoresDuplicadosView(PermissionRequiredMixin, ListView): page_obj.number, paginator.num_pages) context[ 'NO_ENTRIES_MSG' - ] = 'Nenhum encontrado.' + ] = 'Nenhum encontrado.' return context @@ -1513,10 +1569,12 @@ def parlamentares_filiacoes_intersecao(): for c in combinacoes: data_filiacao1 = c[0].data - data_desfiliacao1 = c[0].data_desfiliacao if c[0].data_desfiliacao else timezone.now().date() + data_desfiliacao1 = c[0].data_desfiliacao if c[0].data_desfiliacao else timezone.now( + ).date() data_filiacao2 = c[1].data - data_desfiliacao2 = c[1].data_desfiliacao if c[1].data_desfiliacao else timezone.now().date() + data_desfiliacao2 = c[1].data_desfiliacao if c[1].data_desfiliacao else timezone.now( + ).date() if data_filiacao1 and data_filiacao2: exists = intervalos_tem_intersecao( @@ -1546,8 +1604,8 @@ class ListarParlFiliacoesIntersecaoView(PermissionRequiredMixin, ListView): page_obj.number, paginator.num_pages) context[ 'NO_ENTRIES_MSG' - ] = 'Nenhum encontrado.' - return context + ] = 'Nenhum encontrado.' + return context def parlamentares_mandatos_intersecao(): @@ -1559,10 +1617,12 @@ def parlamentares_mandatos_intersecao(): for c in combinacoes: data_inicio_mandato1 = c[0].data_inicio_mandato - data_fim_mandato1 = c[0].data_fim_mandato if c[0].data_fim_mandato else timezone.now().date() + data_fim_mandato1 = c[0].data_fim_mandato if c[0].data_fim_mandato else timezone.now( + ).date() data_inicio_mandato2 = c[1].data_inicio_mandato - data_fim_mandato2 = c[1].data_fim_mandato if c[1].data_fim_mandato else timezone.now().date() + data_fim_mandato2 = c[1].data_fim_mandato if c[1].data_fim_mandato else timezone.now( + ).date() if data_inicio_mandato1 and data_inicio_mandato2: exists = intervalos_tem_intersecao( @@ -1593,7 +1653,7 @@ class ListarParlMandatosIntersecaoView(PermissionRequiredMixin, ListView): page_obj.number, paginator.num_pages) context[ 'NO_ENTRIES_MSG' - ] = 'Nenhum encontrado.' + ] = 'Nenhum encontrado.' return context @@ -1612,7 +1672,7 @@ class ListarParlamentaresDuplicadosView(PermissionRequiredMixin, ListView): def get_queryset(self): return parlamentares_duplicados() - + def get_context_data(self, **kwargs): context = super( ListarParlamentaresDuplicadosView, self).get_context_data(**kwargs) @@ -1622,41 +1682,37 @@ class ListarParlamentaresDuplicadosView(PermissionRequiredMixin, ListView): page_obj.number, paginator.num_pages) context[ 'NO_ENTRIES_MSG' - ] = 'Nenhum encontrado.' + ] = 'Nenhum encontrado.' return context - + def mandato_sem_data_inicio(): return Mandato.objects.filter(data_inicio_mandato__isnull=True).order_by('parlamentar') def get_estatistica(request): + materias = MateriaLegislativa.objects.all() + normas = NormaJuridica.objects.all() + + datas = [ + materias.order_by( + '-data_ultima_atualizacao').values_list('data_ultima_atualizacao', flat=True) + .exclude(data_ultima_atualizacao__isnull=True).first(), + normas.order_by( + '-data_ultima_atualizacao').values_list('data_ultima_atualizacao', flat=True) + .exclude(data_ultima_atualizacao__isnull=True).first() + ] - json_dict = {} - - datas = [MateriaLegislativa.objects.all(). - order_by('-data_ultima_atualizacao'). - values_list('data_ultima_atualizacao', flat=True). - first(), - NormaJuridica.objects.all(). - order_by('-data_ultima_atualizacao'). - values_list('data_ultima_atualizacao', flat=True). - first()] # Retorna [None, None] se inexistem registros - - max_data = '' - - if datas[0] and datas[1]: - max_data = max(datas) - else: - max_data = next(iter([i for i in datas if i is not None]), '') - - json_dict["data_ultima_atualizacao"] = max_data - json_dict["num_materias_legislativas"] = MateriaLegislativa.objects.all().count() - json_dict["num_normas_juridicas "] = NormaJuridica.objects.all().count() - json_dict["num_parlamentares"] = Parlamentar.objects.all().count() - json_dict["num_sessoes_plenarias"] = SessaoPlenaria.objects.all().count() + max_data = max(datas) if datas[0] and datas[1] else next( + iter([i for i in datas if i is not None]), '') - return JsonResponse(json_dict) + return JsonResponse({ + "data_ultima_atualizacao": max_data, + "num_materias_legislativas": materias.count(), + "num_normas_juridicas ": normas.count(), + "num_parlamentares": Parlamentar.objects.all().count(), + "num_sessoes_plenarias": SessaoPlenaria.objects.all().count() + }) class ListarMandatoSemDataInicioView(PermissionRequiredMixin, ListView): @@ -1672,14 +1728,14 @@ class ListarMandatoSemDataInicioView(PermissionRequiredMixin, ListView): def get_context_data(self, **kwargs): context = super( ListarMandatoSemDataInicioView, self - ).get_context_data(**kwargs) + ).get_context_data(**kwargs) paginator = context['paginator'] page_obj = context['page_obj'] context['page_range'] = make_pagination( page_obj.number, paginator.num_pages) context[ 'NO_ENTRIES_MSG' - ] = 'Nenhum encontrado.' + ] = 'Nenhum encontrado.' return context @@ -1696,11 +1752,11 @@ class ListarFiliacoesSemDataFiliacaoView(PermissionRequiredMixin, ListView): def get_queryset(self): return filiacoes_sem_data_filiacao() - + def get_context_data(self, **kwargs): context = super( ListarFiliacoesSemDataFiliacaoView, self - ).get_context_data(**kwargs) + ).get_context_data(**kwargs) paginator = context['paginator'] page_obj = context['page_obj'] context['page_range'] = make_pagination( @@ -1735,27 +1791,27 @@ class ListarMatProtocoloInexistenteView(PermissionRequiredMixin, ListView): def get_context_data(self, **kwargs): context = super( ListarMatProtocoloInexistenteView, self - ).get_context_data(**kwargs) + ).get_context_data(**kwargs) paginator = context['paginator'] page_obj = context['page_obj'] context['page_range'] = make_pagination( page_obj.number, paginator.num_pages) context[ 'NO_ENTRIES_MSG' - ] = 'Nenhuma encontrada.' + ] = 'Nenhuma encontrada.' return context def protocolos_com_materias(): protocolos = {} - + for m in MateriaLegislativa.objects.filter(numero_protocolo__isnull=False).order_by('-ano', 'numero_protocolo'): if Protocolo.objects.filter(numero=m.numero_protocolo, ano=m.ano).exists(): key = "{}/{}".format(m.numero_protocolo, m.ano) val = protocolos.get(key, list()) val.append(m) protocolos[key] = val - + return [(v[0], len(v)) for (k, v) in protocolos.items() if len(v) > 1] @@ -1778,7 +1834,7 @@ class ListarProtocolosComMateriasView(PermissionRequiredMixin, ListView): page_obj.number, paginator.num_pages) context[ 'NO_ENTRIES_MSG' - ] = 'Nenhum encontrado.' + ] = 'Nenhum encontrado.' return context @@ -1808,211 +1864,121 @@ class ListarProtocolosDuplicadosView(PermissionRequiredMixin, ListView): page_obj.number, paginator.num_pages) context[ 'NO_ENTRIES_MSG' - ] = 'Nenhum encontrado.' - return context - - -class PesquisarUsuarioView(PermissionRequiredMixin, FilterView): - model = get_user_model() - filterset_class = UsuarioFilterSet - permission_required = ('base.list_appconfig',) - paginate_by = 10 - - def get_filterset_kwargs(self, filterset_class): - super(PesquisarUsuarioView, - self).get_filterset_kwargs(filterset_class) - - kwargs = {'data': self.request.GET or None} - - qs = self.get_queryset().order_by('username').distinct() - - kwargs.update({ - 'queryset': qs, - }) - return kwargs - - def get_context_data(self, **kwargs): - context = super(PesquisarUsuarioView, self).get_context_data(**kwargs) - - paginator = context['paginator'] - page_obj = context['page_obj'] - - context.update({ - "page_range": make_pagination(page_obj.number, paginator.num_pages), - "NO_ENTRIES_MSG": "Nenhum usuário encontrado!", - "title": _("Usuários") - }) - + ] = 'Nenhum encontrado.' return context - def get(self, request, *args, **kwargs): - super(PesquisarUsuarioView, self).get(request) - - data = self.filterset.data - url = '' - if data: - url = "&" + str(self.request.META['QUERY_STRING']) - if url.startswith("&page"): - ponto_comeco = url.find('username=') - 1 - url = url[ponto_comeco:] - - context = self.get_context_data(filter=self.filterset, - object_list=self.object_list, - filter_url=url, - numero_res=len(self.object_list) - ) - - context['show_results'] = show_results_filter_set( - self.request.GET.copy()) - - return self.render_to_response(context) - -class DetailUsuarioView(PermissionRequiredMixin, DetailView): +class UserCrud(Crud): model = get_user_model() - template_name = "base/usuario_detail.html" - permission_required = ('base.detail_appconfig',) - def get_context_data(self, **kwargs): - context = super().get_context_data(**kwargs) - user = get_user_model().objects.get(id=self.kwargs['pk']) - - context.update({ - "user": user, - "token": Token.objects.filter(user=user)[0], - "roles": [ - { - "checked": "checked" if g in user.groups.all() else "unchecked", - "group": g.name - } for g in Group.objects.all().order_by("name")] - }) - - return context + class BaseMixin(Crud.BaseMixin): + list_field_names = [ + 'usuario', 'groups', 'is_active' + ] + def resolve_url(self, suffix, args=None): + return reverse('sapl.base:%s' % self.url_name(suffix), + args=args) -class CreateUsuarioView(PermissionRequiredMixin, CreateView): - model = get_user_model() - form_class = UsuarioCreateForm - success_message = 'Usuário criado com sucesso!' - fail_message = 'Usuário não criado!' - permission_required = ('base.add_appconfig',) + def get_layout(self): + return super().get_layout( + 'base/layouts.yaml' + ) - def get_success_url(self, pk): - return reverse('sapl.base:user_detail', kwargs={"pk": pk}) + def get_context_object_name(self, *args, **kwargs): + return None - def form_valid(self, form): - data = form.cleaned_data - - new_user = get_user_model().objects.create( - username=data['username'], - email=data['email'], - first_name=data['firstname'], - last_name=data['lastname'], - is_superuser=False, - is_staff=False - ) - new_user.set_password(data['password1']) - new_user.save() + class CreateView(Crud.CreateView): + form_class = UserAdminForm + layout_key = None - groups = Group.objects.filter(id__in=data['roles']) - for g in groups: - g.user_set.add(new_user) + class UpdateView(Crud.UpdateView): + form_class = UserAdminForm + layout_key = None - messages.success(self.request, self.success_message) - return HttpResponseRedirect(self.get_success_url(new_user.pk)) + def get_form_kwargs(self): + kwargs = Crud.UpdateView.get_form_kwargs(self) + kwargs['user_session'] = self.request.user + granular = self.request.GET.get('granular', None) + if not granular is None: + kwargs['granular'] = granular + return kwargs + + class DetailView(Crud.DetailView): + layout_key = 'UserDetail' + + def hook_usuario(self, obj): + return 'Usuário', '{}
    {}'.format( + obj.get_full_name() or '...', + obj.email + ) - def form_invalid(self, form): - messages.error(self.request, self.fail_message) - return super().form_invalid(form) + def hook_auth_token(self, obj): + return 'Token', str(obj.auth_token) + def hook_username(self, obj): + return 'username', obj.username -class DeleteUsuarioView(PermissionRequiredMixin, DeleteView): - model = get_user_model() - template_name = "crud/confirm_delete.html" - permission_required = ('base.delete_appconfig',) - success_url = reverse_lazy('sapl.base:usuario') - success_message = "Usuário removido com sucesso!" + def get_context_data(self, **kwargs): + context = Crud.DetailView.get_context_data(self, **kwargs) + context['title'] = '{} ({})
    {}'.format( + self.object.get_full_name() or '...', + self.object.username, + self.object.email + ) + return context - def delete(self, request, *args, **kwargs): - try: - super(DeleteUsuarioView, self).delete(request, *args, **kwargs) - except ProtectedError as exception: - error_url = reverse_lazy('sapl.base:user_delete', kwargs={'pk': self.kwargs['pk']}) - error_message = "O usuário não pode ser removido, pois é referenciado por:
      " - - for e in exception.protected_objects: - error_message += '
    • {} - {}
    • '.format( - e._meta.verbose_name, e + @property + def extras_url(self): + btns = [ + ( + '{}?granular'.format(reverse('sapl.base:user_update', + kwargs={'pk': self.object.pk})), + 'btn-outline-primary', + _('Edição granular') ) - error_message += '
    ' - messages.error(self.request, error_message) - return HttpResponseRedirect(error_url) - - messages.success(self.request, self.success_message) - return HttpResponseRedirect(self.success_url) - - @property - def cancel_url(self): - return reverse('sapl.base:user_edit', - kwargs={'pk': self.kwargs['pk']}) + ] + return btns -class EditUsuarioView(PermissionRequiredMixin, UpdateView): - model = get_user_model() - form_class = UsuarioEditForm - template_name = "base/usuario_edit.html" - success_message = 'Usuário editado com sucesso!' - permission_required = ('base.change_appconfig',) - - def get_success_url(self): - return reverse('sapl.base:user_detail', kwargs={"pk": self.kwargs['pk']}) + class ListView(Crud.ListView): + form_search_class = ListWithSearchForm + paginate_by = 256 - def get_initial(self): - initial = super().get_initial() - - user = get_user_model().objects.get(id=self.kwargs['pk']) - roles = [str(g.id) for g in user.groups.all()] - - initial.update({ - "token": Token.objects.filter(user=user)[0], - "first_name": user.first_name, - "last_name": user.last_name, - "roles": roles, - "user_active": user.is_active - }) - - return initial - - def form_valid(self, form): - - user = form.save(commit=False) - data = form.cleaned_data - - if 'first_name' in data and data['first_name'] != user.first_name: - user.first_name = data['first_name'] - - if 'last_name' in data and data['last_name'] != user.last_name: - user.last_name = data['last_name'] + def get_context_data(self, **kwargs): + context = Crud.ListView.get_context_data(self, **kwargs) + context['subnav_template_name'] = None + context['title'] = _('Usuários') + return context - if data['password1']: - user.set_password(data['password1']) + def hook_header_usuario(self, *args, **kwargs): + return 'Usuário' - if data['user_active'] == 'True' and not user.is_active: - user.is_active = True - elif data['user_active'] == 'False' and user.is_active: - user.is_active = False + def hook_header_groups(self, *args, **kwargs): + return 'Grupos' - user.save() + def hook_header_is_active(self, *args, **kwargs): + return 'Ativo' - for g in user.groups.all(): - g.user_set.remove(user) + def hook_usuario(self, *args, **kwargs): + return '{} ({})
    {}'.format( + args[0].get_full_name() or '...', + args[0].username, + args[0].email + ), args[2] - groups = Group.objects.filter(id__in=data['roles']) - for g in groups: - g.user_set.add(user) + def get_queryset(self): + qs = self.model.objects.all() + q_param = self.request.GET.get('q', '') + if q_param: + q = Q(first_name__icontains=q_param) + q |= Q(last_name__icontains=q_param) + q |= Q(email__icontains=q_param) + q |= Q(username__icontains=q_param) + q |= Q(groups__name__icontains=q_param) + qs = qs.filter(q) - messages.success(self.request, self.success_message) - return super(EditUsuarioView, self).form_valid(form) + return qs.distinct('id').order_by('-id') class CasaLegislativaCrud(CrudAux): @@ -2072,29 +2038,32 @@ class AppConfigCrud(CrudAux): recibo_prop_atual = AppConfig.objects.last().receber_recibo_proposicao recibo_prop_novo = self.request.POST['receber_recibo_proposicao'] if recibo_prop_novo == 'False' and recibo_prop_atual: - props = Proposicao.objects.filter(hash_code='').exclude(data_envio__isnull=True) + props = Proposicao.objects.filter( + hash_code='', data_recebimento__isnull=True).exclude(data_envio__isnull=True) for prop in props: try: self.gerar_hash(prop) except ValidationError as e: - form.add_error('receber_recibo_proposicao',e) - msg = _("Não foi possível mudar a configuração porque a Proposição {} não possui texto original vinculado!".format(prop)) + form.add_error('receber_recibo_proposicao', e) + msg = _( + "Não foi possível mudar a configuração porque a Proposição {} não possui texto original vinculado!".format(prop)) messages.error(self.request, msg) return super().form_invalid(form) return super().form_valid(form) def gerar_hash(self, inst): - inst.save() if inst.texto_original: try: inst.hash_code = gerar_hash_arquivo( inst.texto_original.path, str(inst.pk)) + inst.save() except IOError: - raise ValidationError("Existem proposicoes com arquivos inexistentes.") + raise ValidationError( + "Existem proposicoes com arquivos inexistentes.") elif inst.texto_articulado.exists(): ta = inst.texto_articulado.first() inst.hash_code = 'P' + ta.hash() + SEPARADOR_HASH_PROPOSICAO + str(inst.pk) - inst.save() + inst.save() class CreateView(CrudAux.CreateView): @@ -2109,6 +2078,59 @@ class AppConfigCrud(CrudAux): reverse('sapl.base:appconfig_update', kwargs={'pk': app_config.pk})) + class UpdateView(CrudAux.UpdateView): + + template_name = 'base/AppConfig.html' + form_class = ConfiguracoesAppForm + + def form_valid(self, form): + numeracao = AppConfig.objects.last().sequencia_numeracao_protocolo + numeracao_antiga = AppConfig.objects.last().inicio_numeracao_protocolo + + self.object = form.save() + numeracao_nova = self.object.inicio_numeracao_protocolo + + if numeracao_nova != numeracao_antiga: + if numeracao == 'A': + numero_max = Protocolo.objects.filter( + ano=timezone.now().year + ).aggregate(Max('numero'))['numero__max'] + elif numeracao == 'L': + legislatura = Legislatura.objects.filter( + data_inicio__year__lte=timezone.now().year, + data_fim__year__gte=timezone.now().year + ).first() + + data_inicio = legislatura.data_inicio + data_fim = legislatura.data_fim + + data_inicio_utc = from_date_to_datetime_utc(data_inicio) + data_fim_utc = from_date_to_datetime_utc(data_fim) + + numero_max = Protocolo.objects.filter( + Q(data__isnull=False, data__gte=data_inicio, data__lte=data_fim) | + Q( + timestamp__isnull=False, timestamp__gte=data_inicio_utc, + timestamp__lte=data_fim_utc + ) | Q( + timestamp_data_hora_manual__isnull=False, + timestamp_data_hora_manual__gte=data_inicio_utc, + timestamp_data_hora_manual__lte=data_fim_utc, + ) + ).aggregate(Max('numero'))['numero__max'] + elif numeracao == 'U': + numero_max = Protocolo.objects.all().aggregate( + Max('numero') + )['numero__max'] + + ultimo_numero_cadastrado = int(numero_max) if numero_max else 0 + if numeracao_nova <= ultimo_numero_cadastrado and numeracao != 'U': + msg = "O novo início da numeração de protocolo entrará em vigor na " \ + "próxima sequência, pois já existe protocolo cadastrado com " \ + "número superior ou igual ao número inicial definido." + messages.warning(self.request, msg) + + return super().form_valid(form) class ListView(CrudAux.ListView): @@ -2177,6 +2199,7 @@ class LogotipoView(RedirectView): logo = casa and casa.logotipo and casa.logotipo.name return os.path.join(settings.MEDIA_URL, logo) if logo else STATIC_LOGO + def filtro_campos(dicionario): chaves_desejadas = ['ementa', @@ -2199,6 +2222,7 @@ def filtro_campos(dicionario): return dicionario + def pesquisa_textual(request): if 'q' not in request.GET: @@ -2218,17 +2242,17 @@ def pesquisa_textual(request): try: sec_dict['pk'] = e.object.pk except: - # Index and db are out of sync. Object has been deleted from database + # Index and db are out of sync. Object has been deleted from + # database continue dici = filtro_campos(e.object.__dict__) - sec_dict['objeto'] = str(dici) + sec_dict['objeto'] = str(dici) sec_dict['text'] = str(e.object.ementa) sec_dict['model'] = str(type(e.object)) json_dict['resultados'].append(sec_dict) - return JsonResponse(json_dict) @@ -2241,7 +2265,8 @@ class RelatorioHistoricoTramitacaoAdmView(RelatorioMixin, FilterView): def get_context_data(self, **kwargs): context = super(RelatorioHistoricoTramitacaoAdmView, self).get_context_data(**kwargs) - context['title'] = _('Histórico de Tramitações de Documento Administrativo') + context['title'] = _( + 'Histórico de Tramitações de Documento Administrativo') if not self.filterset.form.is_valid(): return context qr = self.request.GET.copy() @@ -2280,6 +2305,7 @@ class RelatorioHistoricoTramitacaoAdmView(RelatorioMixin, FilterView): return context + class RelatorioNormasPorAutorView(RelatorioMixin, FilterView): model = NormaJuridica filterset_class = RelatorioNormasPorAutorFilterSet @@ -2316,7 +2342,7 @@ class RelatorioNormasPorAutorView(RelatorioMixin, FilterView): str(TipoNormaJuridica.objects.get(id=tipo))) else: context['tipo'] = '' - + if self.request.GET['autorianorma__autor']: autor = int(self.request.GET['autorianorma__autor']) context['autor'] = (str(Autor.objects.get(id=autor))) diff --git a/sapl/comissoes/forms.py b/sapl/comissoes/forms.py index 2b2081432..76f511ed2 100644 --- a/sapl/comissoes/forms.py +++ b/sapl/comissoes/forms.py @@ -61,13 +61,13 @@ class ComposicaoForm(forms.ModelForm): if intersecao_periodo: if periodo.data_fim: - self.logger.warn( + self.logger.warning( 'O período informado ({} a {}) choca com períodos já cadastrados para esta comissão'.format( periodo.data_inicio, periodo.data_fim ) ) else: - self.logger.warn( + self.logger.warning( 'O período informado ({} - ) choca com períodos já cadastrados para esta comissão'.format( periodo.data_inicio ) @@ -95,7 +95,7 @@ class PeriodoForm(forms.ModelForm): data_fim = cleaned_data['data_fim'] if data_fim and data_fim < data_inicio: - self.logger.warn( + self.logger.warning( 'A Data Final ({}) é menor que ' 'a Data Inicial({}).'.format(data_fim, data_inicio) ) @@ -111,7 +111,7 @@ class PeriodoForm(forms.ModelForm): ) if not legislatura: - self.logger.warn( + self.logger.warning( 'O período informado ({} a {})' 'não está contido em uma única ' 'legislatura existente'.format(data_inicio, data_fim) @@ -175,7 +175,7 @@ class ParticipacaoCreateForm(forms.ModelForm): if data_desligamento and \ data_designacao > data_desligamento: - self.logger.warn( + self.logger.warning( 'Data de designação ({}) superior ' 'à data de desligamento ({})'.format(data_designacao, data_desligamento) ) @@ -188,7 +188,7 @@ class ParticipacaoCreateForm(forms.ModelForm): if cleaned_data['cargo'].nome in cargos_unicos: msg = _('Este cargo é único para esta Comissão.') - self.logger.warn( + self.logger.warning( 'Este cargo ({}) é único para esta Comissão.'.format( cleaned_data['cargo'].nome ) @@ -268,7 +268,7 @@ class ParticipacaoEditForm(forms.ModelForm): if data_desligamento and \ data_designacao > data_desligamento: - self.logger.warn( + self.logger.warning( 'Data de designação ({}) superior ' 'à data de desligamento ({})'.format(data_designacao, data_desligamento) ) @@ -283,7 +283,7 @@ class ParticipacaoEditForm(forms.ModelForm): if cleaned_data['cargo'].nome in cargos_unicos: msg = _('Este cargo é único para esta Comissão.') - self.logger.warn( + self.logger.warning( 'Este cargo ({}) é único para esta Comissão (id={}).'.format( cleaned_data['cargo'].nome, composicao_id ) @@ -321,7 +321,7 @@ class ComissaoForm(forms.ModelForm): if len(self.cleaned_data['nome']) > 100: msg = _('Nome da Comissão informado ({}) tem mais de 50 caracteres.'.format( self.cleaned_data['nome'])) - self.logger.warn( + self.logger.warning( 'Nome da Comissão deve ter no máximo 50 caracteres.' ) raise ValidationError(msg) @@ -329,7 +329,7 @@ class ComissaoForm(forms.ModelForm): self.cleaned_data['data_extincao'] < self.cleaned_data['data_criacao']): msg = _('Data de extinção não pode ser menor que a de criação') - self.logger.warn( + self.logger.warning( 'Data de extinção ({}) não pode ser menor que a de criação ({}).'.format( self.cleaned_data['data_extincao'], self.cleaned_data['data_criacao'] ) @@ -339,7 +339,7 @@ class ComissaoForm(forms.ModelForm): self.cleaned_data['data_final_prevista_temp'] < self.cleaned_data['data_criacao']): msg = _('Data Prevista para Término não pode ser menor que a de criação') - self.logger.warn( + self.logger.warning( 'Data Prevista para Término ({}) não pode ser menor que a de criação ({}).'.format( self.cleaned_data['data_final_prevista_temp'], self.cleaned_data['data_criacao'] ) @@ -349,7 +349,7 @@ class ComissaoForm(forms.ModelForm): self.cleaned_data['data_prorrogada_temp'] < self.cleaned_data['data_criacao']): msg = _('Data Novo Prazo não pode ser menor que a de criação') - self.logger.warn( + self.logger.warning( 'Data Novo Prazo ({}) não pode ser menor que a de criação ({}).'.format( self.cleaned_data['data_prorrogada_temp'], self.cleaned_data['data_criacao'] ) @@ -359,7 +359,7 @@ class ComissaoForm(forms.ModelForm): self.cleaned_data['data_instalacao_temp'] < self.cleaned_data['data_criacao']): msg = _('Data de Instalação não pode ser menor que a de criação') - self.logger.warn( + self.logger.warning( 'Data de Instalação ({}) não pode ser menor que a de criação ({}).'.format( self.cleaned_data['data_instalacao_temp'], self.cleaned_data['data_criacao'] ) @@ -370,7 +370,7 @@ class ComissaoForm(forms.ModelForm): self.cleaned_data['data_instalacao_temp']): msg = _( 'Data Prevista para Término não pode ser menor que a de Instalação.') - self.logger.warn( + self.logger.warning( 'Data Prevista para Término ({}) não pode ser menor que a de Instalação ({}).'.format( self.cleaned_data['data_final_prevista_temp'], self.cleaned_data['data_instalacao_temp'] ) @@ -380,7 +380,7 @@ class ComissaoForm(forms.ModelForm): self.cleaned_data['data_prorrogada_temp'] < self.cleaned_data['data_instalacao_temp']): msg = _('Data Novo Prazo não pode ser menor que a de Instalação.') - self.logger.warn( + self.logger.warning( 'Data Novo Prazo ({}) não pode ser menor que a de Instalação ({}).'.format( self.cleaned_data['data_prorrogada_temp'], self.cleaned_data['data_instalacao_temp'] ) @@ -430,7 +430,7 @@ class ReuniaoForm(ModelForm): self.cleaned_data['hora_inicio']): msg = _( 'A hora de término da reunião não pode ser menor que a de início') - self.logger.warn( + self.logger.warning( "A hora de término da reunião ({}) não pode ser menor que a de início ({}).".format( self.cleaned_data['hora_fim'], self.cleaned_data['hora_inicio'] ) @@ -514,10 +514,16 @@ class DocumentoAcessorioCreateForm(FileFieldCheckMixin, forms.ModelForm): if not self.is_valid(): return self.cleaned_data - arquivo = self.cleaned_data.get('arquivo', False) + arquivo = self.cleaned_data.get('arquivo') if arquivo: validar_arquivo(arquivo, "Texto Integral") + # else: + # ## TODO: definir arquivo no form e preservar o nome do campo + # ## que gerou a mensagem de erro. + # ## arquivo = forms.FileField(required=True, label="Texto Integral") + # nome_arquivo = self.fields['arquivo'].label + # raise ValidationError(f'Favor anexar arquivo em {nome_arquivo}') return self.cleaned_data @@ -540,9 +546,15 @@ class DocumentoAcessorioEditForm(FileFieldCheckMixin, forms.ModelForm): if not self.is_valid(): return self.cleaned_data - arquivo = self.cleaned_data.get('arquivo', False) + arquivo = self.cleaned_data.get('arquivo') if arquivo: validar_arquivo(arquivo, "Texto Integral") + # else: + # ## TODO: definir arquivo no form e preservar o nome do campo + # ## que gerou a mensagem de erro. + # ## arquivo = forms.FileField(required=True, label="Texto Integral") + # nome_arquivo = self.fields['arquivo'].label + # raise ValidationError(f'Favor anexar arquivo em {nome_arquivo}') return self.cleaned_data diff --git a/sapl/comissoes/migrations/0026_auto_20201009_0950.py b/sapl/comissoes/migrations/0026_auto_20201009_0950.py new file mode 100644 index 000000000..474e70312 --- /dev/null +++ b/sapl/comissoes/migrations/0026_auto_20201009_0950.py @@ -0,0 +1,25 @@ +# Generated by Django 2.2.13 on 2020-10-09 12:50 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('comissoes', '0025_auto_20200605_1051'), + ] + + operations = [ + migrations.AlterModelOptions( + name='documentoacessorio', + options={'ordering': ('data', '-data_ultima_atualizacao'), 'verbose_name': 'Documento Acessório', 'verbose_name_plural': 'Documentos Acessórios'}, + ), + migrations.AlterModelOptions( + name='reuniao', + options={'ordering': ('numero', 'comissao'), 'verbose_name': 'Reunião de Comissão', 'verbose_name_plural': 'Reuniões de Comissão'}, + ), + migrations.AlterModelOptions( + name='tipocomissao', + options={'ordering': ('id',), 'verbose_name': 'Tipo de Comissão', 'verbose_name_plural': 'Tipos de Comissão'}, + ), + ] diff --git a/sapl/comissoes/migrations/0027_auto_20210209_1047.py b/sapl/comissoes/migrations/0027_auto_20210209_1047.py new file mode 100644 index 000000000..09efbf0bf --- /dev/null +++ b/sapl/comissoes/migrations/0027_auto_20210209_1047.py @@ -0,0 +1,17 @@ +# Generated by Django 2.2.13 on 2021-02-09 13:47 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('comissoes', '0026_auto_20201009_0950'), + ] + + operations = [ + migrations.AlterModelOptions( + name='documentoacessorio', + options={'ordering': ('data', 'id'), 'verbose_name': 'Documento Acessório', 'verbose_name_plural': 'Documentos Acessórios'}, + ), + ] diff --git a/sapl/comissoes/models.py b/sapl/comissoes/models.py index bd46582ed..4bb1aa535 100644 --- a/sapl/comissoes/models.py +++ b/sapl/comissoes/models.py @@ -26,6 +26,7 @@ class TipoComissao(models.Model): class Meta: verbose_name = _('Tipo de Comissão') verbose_name_plural = _('Tipos de Comissão') + ordering = ('id',) def __str__(self): return self.nome @@ -265,6 +266,7 @@ class Reuniao(models.Model): class Meta: verbose_name = _('Reunião de Comissão') verbose_name_plural = _('Reuniões de Comissão') + ordering = ('numero', 'comissao') def __str__(self): return self.nome @@ -343,6 +345,7 @@ class DocumentoAcessorio(models.Model): class Meta: verbose_name = _('Documento Acessório') verbose_name_plural = _('Documentos Acessórios') + ordering = ('data', 'id') def __str__(self): return _('%(nome)s por %(autor)s') % { diff --git a/sapl/comissoes/tests/test_comissoes.py b/sapl/comissoes/tests/test_comissoes.py index 705ff8a57..72b839a66 100644 --- a/sapl/comissoes/tests/test_comissoes.py +++ b/sapl/comissoes/tests/test_comissoes.py @@ -1,5 +1,5 @@ import pytest -from django.core.urlresolvers import reverse +from django.urls import reverse from django.utils.translation import ugettext as _ from model_bakery import baker @@ -88,12 +88,13 @@ def test_incluir_comissao_submit(admin_client): {'tipo': tipo.pk, 'nome': 'Comissão Teste', 'sigla': 'CT', + 'ativa': True, 'data_criacao': '2016-03-22', 'unidade_deliberativa': True, 'salvar': 'salvar'}, follow=True) assert response.status_code == 200 - + comissao = Comissao.objects.first() assert comissao.nome == 'Comissão Teste' assert comissao.tipo == tipo diff --git a/sapl/comissoes/views.py b/sapl/comissoes/views.py index 019cca739..48a19ddf6 100644 --- a/sapl/comissoes/views.py +++ b/sapl/comissoes/views.py @@ -2,7 +2,7 @@ import logging from django.contrib import messages from django.contrib.auth.mixins import PermissionRequiredMixin -from django.core.urlresolvers import reverse +from django.urls import reverse from django.db.models import F from django.http.response import HttpResponseRedirect, JsonResponse from django.views.decorators.clickjacking import xframe_options_exempt diff --git a/sapl/compilacao/apps.py b/sapl/compilacao/apps.py index fae56b631..0e8105a64 100644 --- a/sapl/compilacao/apps.py +++ b/sapl/compilacao/apps.py @@ -3,7 +3,6 @@ from django import apps from django.conf import settings from django.db import connection, models from django.db.utils import DEFAULT_DB_ALIAS, IntegrityError -from django.utils.translation import string_concat from django.utils.translation import ugettext_lazy as _ @@ -37,11 +36,7 @@ class AppConfig(apps.AppConfig): cursor.execute(line) except IntegrityError as e: if not settings.DEBUG: - print( - string_concat( - _('Ocorreu erro na importação: '), - line, - str(e))) + print("{} {} {}".format(_('Ocorreu erro na importação:'), line, str(e))) except Exception as ee: print(ee) @@ -72,9 +67,7 @@ class AppConfig(apps.AppConfig): tipo.save() except IntegrityError as e: if not settings.DEBUG: - print(string_concat( - _('Ocorreu erro na criação tipo de ta: '), - str(e))) + print("{} {}".format(_('Ocorreu erro na criação tipo de ta:'), str(e))) def init_compilacao_base(app_config, verbosity=2, interactive=True, @@ -86,9 +79,7 @@ def init_compilacao_base(app_config, verbosity=2, interactive=True, if not TipoDispositivo.objects.exists(): print('') - print(string_concat('\033[93m\033[1m', - _('Iniciando Textos Articulados...'), - '\033[0m')) + print("\033[93m\033[1m{}\033[0m".format(_('Iniciando Textos Articulados...'))) AppConfig.import_pattern() diff --git a/sapl/compilacao/forms.py b/sapl/compilacao/forms.py index 0a7542a46..18c24cf1f 100644 --- a/sapl/compilacao/forms.py +++ b/sapl/compilacao/forms.py @@ -13,6 +13,7 @@ from django.forms.forms import Form from django.forms.models import ModelForm from django.template import defaultfilters from django.utils.translation import ugettext_lazy as _ +from image_cropping.widgets import CropWidget, ImageCropWidget from model_utils.choices import Choices from sapl import utils @@ -24,9 +25,20 @@ from sapl.compilacao.models import (NOTAS_PUBLICIDADE_CHOICES, VeiculoPublicacao, Vide) from sapl.compilacao.utils import DISPOSITIVO_SELECT_RELATED from sapl.crispy_layout_mixin import SaplFormHelper -from sapl.crispy_layout_mixin import SaplFormLayout, to_column, to_row,\ - form_actions -from sapl.utils import YES_NO_CHOICES +from sapl.crispy_layout_mixin import SaplFormLayout, to_column, to_row +from sapl.utils import YES_NO_CHOICES, FileFieldCheckMixin + + +class CustomImageCropWidget(ImageCropWidget): + """ + Custom ImageCropWidget that doesn't show the initial value of the field. + We use this trick, and place it right under the CropWidget so that + it looks like the user is seeing the image and clearing the image. + """ + template_with_initial = ( + # '%(initial_text)s:
    %(initial)s ' + '%(clear_template)s
    %(input_text)s: %(input)s' + ) error_messages = { @@ -513,11 +525,16 @@ class DispositivoIntegerField(forms.IntegerField): min_value=0, *args, **kwargs) -class DispositivoEdicaoBasicaForm(ModelForm): +class DispositivoEdicaoBasicaForm(FileFieldCheckMixin, ModelForm): class Meta: model = Dispositivo - fields = [] + fields = ['imagem', 'imagem_cropping'] + + widgets = { + 'imagem': CustomImageCropWidget(), + 'imagem_cropping': CropWidget(), + } error_messages = { NON_FIELD_ERRORS: { @@ -670,13 +687,24 @@ class DispositivoEdicaoBasicaForm(ModelForm): DispositivoEdicaoBasicaForm.Meta.fields.remove( 'visibilidade') - fields = DispositivoEdicaoBasicaForm.Meta.fields - if fields: - self.base_fields.clear() - for f in fields: + if 'texto' in DispositivoEdicaoBasicaForm.Meta.fields and\ + not editor_type: + layout.append( + Fieldset('Anexar Imagem', + to_row([('imagem', 7), ('imagem_cropping', 5), ]), + css_class="col-md-12")) + DispositivoEdicaoBasicaForm.Meta.fields.append('imagem') + DispositivoEdicaoBasicaForm.Meta.fields.append('imagem_cropping') + + for f in DispositivoEdicaoBasicaForm.Meta.fields: + if hasattr(self, f): self.base_fields.update({f: getattr(self, f)}) + for f in set(self.base_fields.keys()) - set(DispositivoEdicaoBasicaForm.Meta.fields): + self.base_fields.pop(f) + self.helper = SaplFormHelper() + self.helper.include_media = False if not editor_type: cancel_label = _('Ir para o Editor Sequencial') @@ -689,6 +717,14 @@ class DispositivoEdicaoBasicaForm(ModelForm): super(DispositivoEdicaoBasicaForm, self).__init__(*args, **kwargs) + #imagem = self.fields['imagem'].widget + # imagem.attrs.update( + # get_attrs(self.instance.imagem, 'imagem') + #) + + # if 'class' in imagem.attrs: + # imagem.attrs.pop('class') + def actions_get_form_base(self, layout, inst, texto_articulado_do_editor=None): diff --git a/sapl/compilacao/migrations/0014_auto_20200521_1534.py b/sapl/compilacao/migrations/0014_auto_20200521_1534.py new file mode 100644 index 000000000..97d2dd3f9 --- /dev/null +++ b/sapl/compilacao/migrations/0014_auto_20200521_1534.py @@ -0,0 +1,105 @@ +# Generated by Django 2.2 on 2020-05-21 18:34 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('compilacao', '0013_auto_20190924_0830'), + ] + + operations = [ + migrations.AlterField( + model_name='dispositivo', + name='dispositivo_atualizador', + field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='dispositivos_alterados_set', to='compilacao.Dispositivo', verbose_name='Dispositivo Atualizador'), + ), + migrations.AlterField( + model_name='dispositivo', + name='dispositivo_pai', + field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='dispositivos_filhos_set', to='compilacao.Dispositivo', verbose_name='Dispositivo Pai'), + ), + migrations.AlterField( + model_name='dispositivo', + name='dispositivo_raiz', + field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='nodes', to='compilacao.Dispositivo', verbose_name='Dispositivo Raiz'), + ), + migrations.AlterField( + model_name='dispositivo', + name='publicacao', + field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.PROTECT, to='compilacao.Publicacao', verbose_name='Publicação'), + ), + migrations.AlterField( + model_name='nota', + name='dispositivo', + field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='dispositivo_nota_set', to='compilacao.Dispositivo', verbose_name='Dispositivo da Nota'), + ), + migrations.AlterField( + model_name='nota', + name='owner', + field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL, verbose_name='Dono da Nota'), + ), + migrations.AlterField( + model_name='nota', + name='tipo', + field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='compilacao.TipoNota', verbose_name='Tipo da Nota'), + ), + migrations.AlterField( + model_name='publicacao', + name='ta', + field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='compilacao.TextoArticulado', verbose_name='Texto Articulado'), + ), + migrations.AlterField( + model_name='publicacao', + name='tipo_publicacao', + field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='compilacao.TipoPublicacao', verbose_name='Tipo de Publicação'), + ), + migrations.AlterField( + model_name='publicacao', + name='veiculo_publicacao', + field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='compilacao.VeiculoPublicacao', verbose_name='Veículo de Publicação'), + ), + migrations.AlterField( + model_name='textoarticulado', + name='content_type', + field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.PROTECT, to='contenttypes.ContentType'), + ), + migrations.AlterField( + model_name='textoarticulado', + name='tipo_ta', + field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.PROTECT, to='compilacao.TipoTextoArticulado', verbose_name='Tipo de Texto Articulado'), + ), + migrations.AlterField( + model_name='tipodispositivorelationship', + name='filho_permitido', + field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='possiveis_pais', to='compilacao.TipoDispositivo'), + ), + migrations.AlterField( + model_name='tipodispositivorelationship', + name='pai', + field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='filhos_permitidos', to='compilacao.TipoDispositivo'), + ), + migrations.AlterField( + model_name='tipodispositivorelationship', + name='perfil', + field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='compilacao.PerfilEstruturalTextoArticulado'), + ), + migrations.AlterField( + model_name='vide', + name='dispositivo_base', + field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='dispositivo_base_set', to='compilacao.Dispositivo', verbose_name='Dispositivo Base'), + ), + migrations.AlterField( + model_name='vide', + name='dispositivo_ref', + field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='dispositivo_citado_set', to='compilacao.Dispositivo', verbose_name='Dispositivo Referido'), + ), + migrations.AlterField( + model_name='vide', + name='tipo', + field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='compilacao.TipoVide', verbose_name='Tipo do Vide'), + ), + ] diff --git a/sapl/compilacao/migrations/0015_auto_20200609_1501.py b/sapl/compilacao/migrations/0015_auto_20200609_1501.py new file mode 100644 index 000000000..dd1691839 --- /dev/null +++ b/sapl/compilacao/migrations/0015_auto_20200609_1501.py @@ -0,0 +1,18 @@ +# Generated by Django 2.2 on 2020-06-09 18:01 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('compilacao', '0014_auto_20200521_1534'), + ] + + operations = [ + migrations.AlterField( + model_name='textoarticulado', + name='participacao_social', + field=models.BooleanField(blank=True, choices=[(None, 'Padrão definido no Tipo'), (True, 'Sim'), (False, 'Não')], default=False, null=True, verbose_name='Participação Social'), + ), + ] diff --git a/sapl/compilacao/migrations/0016_auto_20201013_1159.py b/sapl/compilacao/migrations/0016_auto_20201013_1159.py new file mode 100644 index 000000000..93216bccc --- /dev/null +++ b/sapl/compilacao/migrations/0016_auto_20201013_1159.py @@ -0,0 +1,41 @@ +# Generated by Django 2.2.13 on 2020-10-13 14:59 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('compilacao', '0015_auto_20200609_1501'), + ] + + operations = [ + migrations.AlterModelOptions( + name='publicacao', + options={'ordering': ('id',), 'verbose_name': 'Publicação', 'verbose_name_plural': 'Publicações'}, + ), + migrations.AlterModelOptions( + name='tiponota', + options={'ordering': ('id',), 'verbose_name': 'Tipo de Nota', 'verbose_name_plural': 'Tipos de Nota'}, + ), + migrations.AlterModelOptions( + name='tipopublicacao', + options={'ordering': ('id',), 'verbose_name': 'Tipo de Publicação', 'verbose_name_plural': 'Tipos de Publicação'}, + ), + migrations.AlterModelOptions( + name='tipotextoarticulado', + options={'ordering': ('id',), 'verbose_name': 'Tipo de Texto Articulado', 'verbose_name_plural': 'Tipos de Texto Articulados'}, + ), + migrations.AlterModelOptions( + name='tipovide', + options={'ordering': ('id',), 'verbose_name': 'Tipo de Vide', 'verbose_name_plural': 'Tipos de Vide'}, + ), + migrations.AlterModelOptions( + name='veiculopublicacao', + options={'ordering': ('id',), 'verbose_name': 'Veículo de Publicação', 'verbose_name_plural': 'Veículos de Publicação'}, + ), + migrations.AlterModelOptions( + name='vide', + options={'ordering': ('id',), 'verbose_name': 'Vide', 'verbose_name_plural': 'Vides'}, + ), + ] diff --git a/sapl/compilacao/migrations/0017_auto_20210225_1127.py b/sapl/compilacao/migrations/0017_auto_20210225_1127.py new file mode 100644 index 000000000..df4ccca5a --- /dev/null +++ b/sapl/compilacao/migrations/0017_auto_20210225_1127.py @@ -0,0 +1,25 @@ +# Generated by Django 2.2.13 on 2021-02-25 14:27 + +from django.db import migrations +import image_cropping.fields +import sapl.compilacao.models + + +class Migration(migrations.Migration): + + dependencies = [ + ('compilacao', '0016_auto_20201013_1159'), + ] + + operations = [ + migrations.AddField( + model_name='dispositivo', + name='imagem', + field=image_cropping.fields.ImageCropField(blank=True, null=True, upload_to=sapl.compilacao.models.imagem_upload_path, verbose_name='Imagem'), + ), + migrations.AddField( + model_name='dispositivo', + name='imagem_cropping', + field=image_cropping.fields.ImageRatioField('imagem', '0x0', adapt_rotation=False, allow_fullsize=False, free_crop=False, help_text='O recorte de imagem é possível após a atualização.', hide_image_field=False, size_warning=True, verbose_name='Recorte de Imagem'), + ), + ] diff --git a/sapl/compilacao/migrations/0018_auto_20210227_2152.py b/sapl/compilacao/migrations/0018_auto_20210227_2152.py new file mode 100644 index 000000000..2630b5bca --- /dev/null +++ b/sapl/compilacao/migrations/0018_auto_20210227_2152.py @@ -0,0 +1,19 @@ +# Generated by Django 2.2.13 on 2021-02-28 00:52 + +from django.db import migrations +import image_cropping.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('compilacao', '0017_auto_20210225_1127'), + ] + + operations = [ + migrations.AlterField( + model_name='dispositivo', + name='imagem_cropping', + field=image_cropping.fields.ImageRatioField('imagem', '100x100', adapt_rotation=False, allow_fullsize=False, free_crop=True, help_text='O recorte de imagem é possível após a atualização.', hide_image_field=False, size_warning=True, verbose_name='Recorte de Imagem'), + ), + ] diff --git a/sapl/compilacao/models.py b/sapl/compilacao/models.py index 7161df37a..452d2a494 100644 --- a/sapl/compilacao/models.py +++ b/sapl/compilacao/models.py @@ -1,5 +1,3 @@ - -from bs4 import BeautifulSoup from django.contrib import messages from django.contrib.contenttypes.fields import GenericForeignKey from django.contrib.contenttypes.models import ContentType @@ -13,11 +11,13 @@ from django.utils import timezone from django.utils.decorators import classonlymethod from django.utils.encoding import force_text from django.utils.translation import ugettext_lazy as _ +from image_cropping.fields import ImageCropField, ImageRatioField import reversion from sapl.compilacao.utils import (get_integrations_view_names, int_to_letter, int_to_roman) -from sapl.utils import YES_NO_CHOICES, get_settings_auth_user_model +from sapl.utils import YES_NO_CHOICES, get_settings_auth_user_model,\ + texto_upload_path, restringe_tipos_de_arquivo_img @reversion.register() @@ -159,6 +159,7 @@ class TipoTextoArticulado(models.Model): class Meta: verbose_name = _('Tipo de Texto Articulado') verbose_name_plural = _('Tipos de Texto Articulados') + ordering = ('id',) def __str__(self): return self.descricao @@ -191,47 +192,81 @@ PRIVACIDADE_STATUS = ( @reversion.register() class TextoArticulado(TimestampedMixin): - data = models.DateField(blank=True, null=True, verbose_name=_('Data')) + data = models.DateField( + blank=True, + null=True, + verbose_name=_('Data') + ) + ementa = models.TextField(verbose_name=_('Ementa')) - observacao = models.TextField(blank=True, verbose_name=_('Observação')) + + observacao = models.TextField( + blank=True, + verbose_name=_('Observação') + ) + numero = models.CharField( - max_length=8, verbose_name=_('Número')) + max_length=8, + verbose_name=_('Número') + ) + ano = models.PositiveSmallIntegerField(verbose_name=_('Ano')) + tipo_ta = models.ForeignKey( TipoTextoArticulado, - blank=True, null=True, default=None, - verbose_name=_('Tipo de Texto Articulado')) - participacao_social = models.NullBooleanField( + blank=True, + null=True, default=None, - blank=True, null=True, + verbose_name=_('Tipo de Texto Articulado'), + on_delete=models.PROTECT + ) + + participacao_social = models.BooleanField( + blank=True, + null=True, + default=False, choices=PARTICIPACAO_SOCIAL_CHOICES, - verbose_name=_('Participação Social')) + verbose_name=_('Participação Social') + ) content_type = models.ForeignKey( ContentType, - blank=True, null=True, default=None) + blank=True, + null=True, + default=None, + on_delete=models.PROTECT + ) + object_id = models.PositiveIntegerField( - blank=True, null=True, default=None) + blank=True, + null=True, + default=None) + content_object = GenericForeignKey('content_type', 'object_id') owners = models.ManyToManyField( get_settings_auth_user_model(), - blank=True, verbose_name=_('Donos do Texto Articulado')) + blank=True, + verbose_name=_('Donos do Texto Articulado') + ) editable_only_by_owners = models.BooleanField( choices=YES_NO_CHOICES, default=True, - verbose_name=_('Editável apenas pelos donos do Texto Articulado?')) + verbose_name=_('Editável apenas pelos donos do Texto Articulado?') + ) editing_locked = models.BooleanField( choices=YES_NO_CHOICES, default=True, - verbose_name=_('Texto Articulado em Edição?')) + verbose_name=_('Texto Articulado em Edição?') + ) privacidade = models.IntegerField( _('Privacidade'), choices=PRIVACIDADE_STATUS, - default=STATUS_TA_PRIVATE) + default=STATUS_TA_PRIVATE + ) class Meta: verbose_name = _('Texto Articulado') @@ -544,6 +579,7 @@ class TipoNota(models.Model): class Meta: verbose_name = _('Tipo de Nota') verbose_name_plural = _('Tipos de Nota') + ordering = ('id',) def __str__(self): return '%s: %s' % (self.sigla, self.nome) @@ -558,6 +594,7 @@ class TipoVide(models.Model): class Meta: verbose_name = _('Tipo de Vide') verbose_name_plural = _('Tipos de Vide') + ordering = ('id',) def __str__(self): return '%s: %s' % (self.sigla, self.nome) @@ -775,23 +812,39 @@ class TipoDispositivo(BaseModel): @reversion.register() class TipoDispositivoRelationship(BaseModel): - pai = models.ForeignKey(TipoDispositivo, related_name='filhos_permitidos') + pai = models.ForeignKey( + TipoDispositivo, + related_name='filhos_permitidos', + on_delete=models.PROTECT + ) + filho_permitido = models.ForeignKey( TipoDispositivo, - related_name='possiveis_pais') - perfil = models.ForeignKey(PerfilEstruturalTextoArticulado) + related_name='possiveis_pais', + on_delete=models.PROTECT + ) + + perfil = models.ForeignKey( + PerfilEstruturalTextoArticulado, + on_delete=models.PROTECT + ) + filho_de_insercao_automatica = models.BooleanField( default=False, choices=YES_NO_CHOICES, - verbose_name=_('Filho de Inserção Automática')) + verbose_name=_('Filho de Inserção Automática') + ) + permitir_variacao = models.BooleanField( default=True, choices=YES_NO_CHOICES, - verbose_name=_('Permitir Variação Numérica')) + verbose_name=_('Permitir Variação Numérica') + ) quantidade_permitida = models.IntegerField( default=-1, - verbose_name=_('Quantidade permitida nesta relação')) + verbose_name=_('Quantidade permitida nesta relação') + ) class Meta: verbose_name = _('Relação Direta Permitida') @@ -815,6 +868,7 @@ class TipoPublicacao(models.Model): class Meta: verbose_name = _('Tipo de Publicação') verbose_name_plural = _('Tipos de Publicação') + ordering = ('id',) def __str__(self): return self.nome @@ -829,6 +883,7 @@ class VeiculoPublicacao(models.Model): class Meta: verbose_name = _('Veículo de Publicação') verbose_name_plural = _('Veículos de Publicação') + ordering = ('id',) def __str__(self): return '%s: %s' % (self.sigla, self.nome) @@ -837,37 +892,71 @@ class VeiculoPublicacao(models.Model): @reversion.register() class Publicacao(TimestampedMixin): ta = models.ForeignKey( - TextoArticulado, verbose_name=_('Texto Articulado')) + TextoArticulado, + verbose_name=_('Texto Articulado'), + on_delete=models.PROTECT + ) + veiculo_publicacao = models.ForeignKey( - VeiculoPublicacao, verbose_name=_('Veículo de Publicação')) + VeiculoPublicacao, + verbose_name=_('Veículo de Publicação'), + on_delete=models.PROTECT + ) + tipo_publicacao = models.ForeignKey( - TipoPublicacao, verbose_name=_('Tipo de Publicação')) + TipoPublicacao, + verbose_name=_('Tipo de Publicação'), + on_delete=models.PROTECT + ) data = models.DateField(verbose_name=_('Data de Publicação')) + hora = models.TimeField( - blank=True, null=True, verbose_name=_('Horário de Publicação')) + blank=True, + null=True, + verbose_name=_('Horário de Publicação') + ) numero = models.PositiveIntegerField( - blank=True, null=True, verbose_name=_('Número')) + blank=True, + null=True, + verbose_name=_('Número') + ) ano = models.PositiveIntegerField( - blank=True, null=True, verbose_name=_('Ano')) + blank=True, + null=True, + verbose_name=_('Ano') + ) edicao = models.PositiveIntegerField( - blank=True, null=True, verbose_name=_('Edição')) + blank=True, + null=True, + verbose_name=_('Edição') + ) url_externa = models.URLField( max_length=1024, blank=True, - verbose_name=_('Link para Versão Eletrônica')) + verbose_name=_('Link para Versão Eletrônica') + ) + pagina_inicio = models.PositiveIntegerField( - blank=True, null=True, verbose_name=_('Pg. Início')) + blank=True, + null=True, + verbose_name=_('Pg. Início') + ) + pagina_fim = models.PositiveIntegerField( - blank=True, null=True, verbose_name=_('Pg. Fim')) + blank=True, + null=True, + verbose_name=_('Pg. Fim') + ) class Meta: verbose_name = _('Publicação') verbose_name_plural = _('Publicações') + ordering = ('id',) def __str__(self): return _('%s realizada em %s \n %s') % ( @@ -876,154 +965,240 @@ class Publicacao(TimestampedMixin): self.ta) +def imagem_upload_path(instance, filename): + return texto_upload_path(instance, filename, subpath='') + + @reversion.register() class Dispositivo(BaseModel, TimestampedMixin): TEXTO_PADRAO_DISPOSITIVO_REVOGADO = force_text(_('(Revogado)')) INTERVALO_ORDEM = 1000 + ordem = models.PositiveIntegerField( default=0, - verbose_name=_('Ordem de Renderização')) + verbose_name=_('Ordem de Renderização') + ) + ordem_bloco_atualizador = models.PositiveIntegerField( default=0, - verbose_name=_('Ordem de Renderização no Bloco Atualizador')) + verbose_name=_('Ordem de Renderização no Bloco Atualizador') + ) # apenas articulacao recebe nivel zero nivel = models.PositiveIntegerField( default=0, blank=True, null=True, - verbose_name=_('Nível Estrutural')) + verbose_name=_('Nível Estrutural') + ) dispositivo0 = models.PositiveIntegerField( default=0, - verbose_name=_('Número do Dispositivo')) + verbose_name=_('Número do Dispositivo') + ) + dispositivo1 = models.PositiveIntegerField( default=0, blank=True, null=True, - verbose_name=_('Primeiro Nível de Variação')) + verbose_name=_('Primeiro Nível de Variação') + ) + dispositivo2 = models.PositiveIntegerField( default=0, blank=True, null=True, - verbose_name=_('Segundo Nível de Variação')) + verbose_name=_('Segundo Nível de Variação') + ) + dispositivo3 = models.PositiveIntegerField( default=0, blank=True, null=True, - verbose_name=_('Terceiro Nível de Variação')) + verbose_name=_('Terceiro Nível de Variação') + ) + dispositivo4 = models.PositiveIntegerField( default=0, blank=True, null=True, - verbose_name=_('Quarto Nível de Variação')) + verbose_name=_('Quarto Nível de Variação') + ) + dispositivo5 = models.PositiveIntegerField( default=0, blank=True, null=True, - verbose_name=_('Quinto Nível de Variação')) + verbose_name=_('Quinto Nível de Variação') + ) rotulo = models.CharField( max_length=50, blank=True, default='', - verbose_name=_('Rótulo')) + verbose_name=_('Rótulo') + ) + texto = models.TextField( blank=True, default='', - verbose_name=_('Texto do Dispositivo')) + verbose_name=_('Texto do Dispositivo') + ) + texto_atualizador = models.TextField( blank=True, default='', - verbose_name=_('Texto do Dispositivo no Dispositivo Atualizador')) + verbose_name=_('Texto do Dispositivo no Dispositivo Atualizador') + ) + + inicio_vigencia = models.DateField(verbose_name=_('Início de Vigência')) - inicio_vigencia = models.DateField( - verbose_name=_('Início de Vigência')) fim_vigencia = models.DateField( - blank=True, null=True, verbose_name=_('Fim de Vigência')) + blank=True, + null=True, + verbose_name=_('Fim de Vigência') + ) + + inicio_eficacia = models.DateField(verbose_name=_('Início de Eficácia')) - inicio_eficacia = models.DateField( - verbose_name=_('Início de Eficácia')) fim_eficacia = models.DateField( - blank=True, null=True, verbose_name=_('Fim de Eficácia')) + blank=True, + null=True, + verbose_name=_('Fim de Eficácia') + ) inconstitucionalidade = models.BooleanField( default=False, choices=YES_NO_CHOICES, - verbose_name=_('Declarado Inconstitucional')) + verbose_name=_('Declarado Inconstitucional') + ) + auto_inserido = models.BooleanField( default=False, choices=YES_NO_CHOICES, - verbose_name=_('Auto Inserido')) + verbose_name=_('Auto Inserido') + ) + visibilidade = models.BooleanField( default=False, choices=YES_NO_CHOICES, - verbose_name=_('Visibilidade no Texto Articulado Publicado')) + verbose_name=_('Visibilidade no Texto Articulado Publicado') + ) dispositivo_de_revogacao = models.BooleanField( default=False, choices=YES_NO_CHOICES, - verbose_name=_('Dispositivo de Revogação')) + verbose_name=_('Dispositivo de Revogação') + ) tipo_dispositivo = models.ForeignKey( TipoDispositivo, on_delete=models.PROTECT, related_name='dispositivos_do_tipo_set', - verbose_name=_('Tipo do Dispositivo')) + verbose_name=_('Tipo do Dispositivo') + ) publicacao = models.ForeignKey( Publicacao, - blank=True, null=True, default=None, verbose_name=_('Publicação')) + blank=True, + null=True, + default=None, + verbose_name=_('Publicação'), + on_delete=models.PROTECT + ) ta = models.ForeignKey( TextoArticulado, on_delete=models.CASCADE, related_name='dispositivos_set', - verbose_name=_('Texto Articulado')) + verbose_name=_('Texto Articulado'), + ) + ta_publicado = models.ForeignKey( TextoArticulado, on_delete=models.PROTECT, - blank=True, null=True, default=None, + blank=True, + null=True, + default=None, related_name='dispositivos_alterados_pelo_ta_set', - verbose_name=_('Texto Articulado Publicado')) + verbose_name=_('Texto Articulado Publicado') + ) dispositivo_subsequente = models.ForeignKey( 'self', - blank=True, null=True, default=None, + blank=True, + null=True, + default=None, related_name='dispositivo_subsequente_set', on_delete=models.SET_NULL, - verbose_name=_('Dispositivo Subsequente')) + verbose_name=_('Dispositivo Subsequente') + ) + dispositivo_substituido = models.ForeignKey( 'self', - blank=True, null=True, default=None, + blank=True, + null=True, + default=None, related_name='dispositivo_substituido_set', on_delete=models.SET_NULL, - verbose_name=_('Dispositivo Substituido')) + verbose_name=_('Dispositivo Substituido') + ) + dispositivo_pai = models.ForeignKey( 'self', - blank=True, null=True, default=None, + blank=True, + null=True, + default=None, related_name='dispositivos_filhos_set', - verbose_name=_('Dispositivo Pai')) + verbose_name=_('Dispositivo Pai'), + on_delete=models.PROTECT + ) + dispositivo_raiz = models.ForeignKey( 'self', - blank=True, null=True, default=None, + blank=True, + null=True, + default=None, related_name='nodes', - verbose_name=_('Dispositivo Raiz')) + verbose_name=_('Dispositivo Raiz'), + on_delete=models.PROTECT + ) + dispositivo_vigencia = models.ForeignKey( 'self', - blank=True, null=True, default=None, + blank=True, + null=True, + default=None, on_delete=models.SET_NULL, related_name='dispositivos_vigencias_set', - verbose_name=_('Dispositivo de Vigência')) + verbose_name=_('Dispositivo de Vigência') + ) + dispositivo_atualizador = models.ForeignKey( 'self', - blank=True, null=True, default=None, + blank=True, + null=True, + default=None, related_name='dispositivos_alterados_set', - verbose_name=_('Dispositivo Atualizador')) + verbose_name=_('Dispositivo Atualizador'), + on_delete=models.PROTECT + ) contagem_continua = models.BooleanField( default=False, - choices=YES_NO_CHOICES, verbose_name=_('Contagem contínua')) + choices=YES_NO_CHOICES, + verbose_name=_('Contagem contínua') + ) + + imagem = ImageCropField( + verbose_name=_('Imagem'), + upload_to=imagem_upload_path, null=True, blank=True) + + imagem_cropping = ImageRatioField( + 'imagem', '100x100', verbose_name=_('Recorte de Imagem'), + free_crop=True, size_warning=True, + help_text=_('O recorte de imagem ' + 'é possível após a atualização.')) class Meta: verbose_name = _('Dispositivo') @@ -1740,20 +1915,30 @@ class Dispositivo(BaseModel, TimestampedMixin): class Vide(TimestampedMixin): texto = models.TextField(verbose_name=_('Texto do Vide')) - tipo = models.ForeignKey(TipoVide, verbose_name=_('Tipo do Vide')) + tipo = models.ForeignKey( + TipoVide, + verbose_name=_('Tipo do Vide'), + on_delete=models.PROTECT + ) dispositivo_base = models.ForeignKey( Dispositivo, verbose_name=_('Dispositivo Base'), - related_name='dispositivo_base_set') + related_name='dispositivo_base_set', + on_delete=models.PROTECT + ) + dispositivo_ref = models.ForeignKey( Dispositivo, related_name='dispositivo_citado_set', - verbose_name=_('Dispositivo Referido')) + verbose_name=_('Dispositivo Referido'), + on_delete=models.PROTECT + ) class Meta: verbose_name = _('Vide') verbose_name_plural = _('Vides') + ordering = ('id',) unique_together = ['dispositivo_base', 'dispositivo_ref', 'tipo'] def __str__(self): @@ -1784,24 +1969,40 @@ class Nota(TimestampedMixin): verbose_name=_('Título'), max_length=100, default='', - blank=True) + blank=True + ) + texto = models.TextField(verbose_name=_('Texto')) + url_externa = models.URLField( max_length=1024, blank=True, - verbose_name=_('Url externa')) + verbose_name=_('Url externa') + ) publicacao = models.DateTimeField(verbose_name=_('Data de Publicação')) + efetividade = models.DateTimeField(verbose_name=_('Data de Efeito')) - tipo = models.ForeignKey(TipoNota, verbose_name=_('Tipo da Nota')) + tipo = models.ForeignKey( + TipoNota, + verbose_name=_('Tipo da Nota'), + on_delete=models.PROTECT + ) + dispositivo = models.ForeignKey( Dispositivo, verbose_name=_('Dispositivo da Nota'), - related_name='dispositivo_nota_set') + related_name='dispositivo_nota_set', + on_delete=models.PROTECT + ) owner = models.ForeignKey( - get_settings_auth_user_model(), verbose_name=_('Dono da Nota')) + get_settings_auth_user_model(), + verbose_name=_('Dono da Nota'), + on_delete=models.PROTECT + ) + publicidade = models.PositiveSmallIntegerField( choices=NOTAS_PUBLICIDADE_CHOICES, verbose_name=_('Nível de Publicidade')) diff --git a/sapl/compilacao/views.py b/sapl/compilacao/views.py index 9f0ed2b46..29c00952f 100644 --- a/sapl/compilacao/views.py +++ b/sapl/compilacao/views.py @@ -12,16 +12,15 @@ from django.contrib.auth.mixins import PermissionRequiredMixin from django.contrib.contenttypes.models import ContentType from django.core.exceptions import ValidationError, PermissionDenied from django.core.signing import Signer -from django.core.urlresolvers import reverse, reverse_lazy from django.db import transaction from django.db.models import Q from django.db.models.query import QuerySet from django.http.response import (HttpResponse, HttpResponseRedirect, JsonResponse, Http404) from django.shortcuts import get_object_or_404, redirect +from django.urls import reverse, reverse_lazy from django.utils.dateparse import parse_date from django.utils.encoding import force_text -from django.utils.translation import string_concat from django.utils.translation import ugettext_lazy as _ from django.views.generic.base import TemplateView from django.views.generic.detail import DetailView @@ -121,11 +120,8 @@ class IntegracaoTaView(TemplateView): tipo_ta.save() except Exception as e: - print( - string_concat( - _('Ocorreu erro na importação do arquivo base dos Tipos de' - 'Dispositivos, entre outras informações iniciais.'), - str(e))) + print("{} {}".format( + _('Ocorreu erro na importação do arquivo base dos Tipos de Dispositivos, entre outras informações iniciais.'), str(e))) return self.get_redirect_deactivated() assert hasattr(self, 'map_fields'), _( @@ -187,7 +183,7 @@ class IntegracaoTaView(TemplateView): if not ta_exists: if ta.editable_only_by_owners and\ - not self.request.user.is_anonymous(): + not self.request.user.is_anonymous: ta.owners.add(self.request.user) if not Dispositivo.objects.filter(ta_id=ta.pk).exists() and\ @@ -955,6 +951,10 @@ class TextView(CompMixin, ListView): self.inicio_vigencia = None self.fim_vigencia = None self.ta_vigencia = None + params = { + 'ordem__gt': 0, + 'ta_id': self.kwargs['ta_id'] + } if 'sign' in self.kwargs: signer = Signer() try: @@ -964,36 +964,34 @@ class TextView(CompMixin, ListView): self.fim_vigencia = parse_date(string[2]) except: return Dispositivo.objects.filter( - ordem__gt=0, - ta_id=self.kwargs['ta_id'], + **params ).select_related(*DISPOSITIVO_SELECT_RELATED) + if self.fim_vigencia: + params['inicio_vigencia__lte'] = self.fim_vigencia return Dispositivo.objects.filter( - inicio_vigencia__lte=self.fim_vigencia, - ordem__gt=0, - ta_id=self.kwargs['ta_id'], + **params ).select_related(*DISPOSITIVO_SELECT_RELATED) else: - r = Dispositivo.objects.filter( - ordem__gt=0, - ta_id=self.kwargs['ta_id'], + **params ).select_related(*DISPOSITIVO_SELECT_RELATED) return r def get_vigencias(self): itens = Dispositivo.objects.filter( - ta_id=self.kwargs['ta_id'], + ta_id=self.kwargs['ta_id'] ).order_by( - 'inicio_vigencia' + 'dispositivo_vigencia__inicio_vigencia', 'ta_publicado__id', 'ordem' ).distinct( - 'inicio_vigencia' + 'dispositivo_vigencia__inicio_vigencia', 'ta_publicado__id' ).select_related( 'ta_publicado', 'ta', 'ta_publicado__tipo_ta', - 'ta__tipo_ta',) + 'ta__tipo_ta', + ) ajuste_datas_vigencia = [] @@ -1003,8 +1001,20 @@ class TextView(CompMixin, ListView): lenLista = len(ajuste_datas_vigencia) for i in range(lenLista): if i + 1 < lenLista: - ajuste_datas_vigencia[ - i].fim_vigencia = ajuste_datas_vigencia[ + if ajuste_datas_vigencia[ + i].inicio_vigencia == ajuste_datas_vigencia[ + i + 1].inicio_vigencia: + + if i + 2 < lenLista: + ajuste_datas_vigencia[ + i].fim_vigencia = ajuste_datas_vigencia[ + i + 2].inicio_vigencia - timedelta(days=1) + else: + ajuste_datas_vigencia[i].fim_vigencia = None + + else: + ajuste_datas_vigencia[ + i].fim_vigencia = ajuste_datas_vigencia[ i + 1].inicio_vigencia - timedelta(days=1) else: ajuste_datas_vigencia[i].fim_vigencia = None @@ -1876,24 +1886,25 @@ class ActionDispositivoCreateMixin(ActionsCommonsMixin): base = Dispositivo.objects.get( pk=self.kwargs['dispositivo_id'] if not _base else _base) - result = [{'tipo_insert': force_text(string_concat( - _('Inserir Após'), - ' ', - base.tipo_dispositivo.nome)), - 'icone': '↷ ', - 'action': 'json_add_next', - 'itens': []}, - {'tipo_insert': force_text(string_concat( - _('Inserir em'), - ' ', - base.tipo_dispositivo.nome)), - 'icone': '⇲ ', - 'action': 'json_add_in', - 'itens': []}, - {'tipo_insert': force_text(_('Inserir Antes')), - 'icone': '↶ ', - 'action': 'json_add_prior', - 'itens': []}] + result = [ + { + 'tipo_insert': force_text("{} {}".format(_('Inserir Após'), base.tipo_dispositivo.nome)), + 'icone': '↷ ', + 'action': 'json_add_next', + 'itens': []}, + { + 'tipo_insert': force_text("{} {}".format(_('Inserir em'), base.tipo_dispositivo.nome)), + 'icone': '⇲ ', + 'action': 'json_add_in', + 'itens': [] + }, + { + 'tipo_insert': force_text(_('Inserir Antes')), + 'icone': '↶ ', + 'action': 'json_add_prior', + 'itens': [] + } + ] perfil_pk = request.session['perfil_estrutural'] @@ -2673,9 +2684,33 @@ class ActionsEditMixin(ActionDragAndMoveDispositivoAlteradoMixin, 'pai': [bloco_alteracao.pk, ]}) if isinstance(dsp_a_alterar, list): + + parents = map(lambda x: x.id, bloco_alteracao.get_parents()) + parents = set(map(lambda x: int(x), dsp_a_alterar)) & \ + set(parents) + + if parents: + self.set_message( + data, 'danger', + _('Não é possível incluir em um Bloco de Alteração ' + 'um dispositivo ao qual o próprio bloco pertence!'), time=10000) + return data + dsps = Dispositivo.objects.filter(id__in=dsp_a_alterar) dsps_ids = set() for d in dsps: + + if d.ta == bloco_alteracao.ta: + self.set_message( + data, 'danger', + _('Não é possível incluir em um Bloco de Alteração ' + 'um dispositivo do Texto Articulado ao qual o bloco ' + 'também é pertencente! ' + 'Blocos de Alteração ' + 'devem ser utilizados para registrar mudanças em ' + 'textos anteriores a este, não neste mesmo em simutâneo.'), time=20000) + return data + ds = d while ds.dispositivo_subsequente: ds = ds.dispositivo_subsequente diff --git a/sapl/context_processors.py b/sapl/context_processors.py index ad1a33d9b..046cd8ab0 100644 --- a/sapl/context_processors.py +++ b/sapl/context_processors.py @@ -3,11 +3,14 @@ import logging from django.conf import settings from django.utils.translation import ugettext_lazy as _ -from sapl.base.views import get_casalegislativa +from sapl.utils import google_recaptcha_configured as google_recaptcha_configured_utils,\ + sapl_as_sapn as sapl_as_sapn_utils from sapl.utils import mail_service_configured as mail_service_configured_utils def parliament_info(request): + + from sapl.base.views import get_casalegislativa casa = get_casalegislativa() if casa: return casa.__dict__ @@ -22,3 +25,21 @@ def mail_service_configured(request): logger.warning(_('Servidor de email não configurado.')) return {'mail_service_configured': False} return {'mail_service_configured': True} + + +def google_recaptcha_configured(request): + + if not google_recaptcha_configured_utils(): + logger = logging.getLogger(__name__) + logger.warning(_('Google Recaptcha não configurado.')) + return {'google_recaptcha_configured': False} + return {'google_recaptcha_configured': True} + + +def sapl_as_sapn(request): + return { + 'sapl_as_sapn': sapl_as_sapn_utils(), + 'nome_sistema': _('Sistema de Apoio ao Processo Legislativo') + if not sapl_as_sapn_utils() + else _('Sistema de Apoio a Publicação de Normas') + } diff --git a/sapl/crispy_layout_mixin.py b/sapl/crispy_layout_mixin.py index 2574a4a46..8c9763eef 100644 --- a/sapl/crispy_layout_mixin.py +++ b/sapl/crispy_layout_mixin.py @@ -4,10 +4,10 @@ from crispy_forms.bootstrap import FormActions from crispy_forms.helper import FormHelper from crispy_forms.layout import HTML, Div, Fieldset, Layout, Submit from django import template -from django.core.urlresolvers import reverse, reverse_lazy +from django.urls import reverse, reverse_lazy from django.utils import formats from django.utils.translation import ugettext as _ -import rtyaml +import yaml def heads_and_tails(list_of_lists): @@ -190,8 +190,9 @@ class CrispyLayoutFormMixin: return getattr(obj.model, obj.model_set).field.model.__name__ - def get_layout(self): - yaml_layout = '%s/layouts.yaml' % self.model._meta.app_config.label + def get_layout(self, yaml_layout=None): + if not yaml_layout: + yaml_layout = '%s/layouts.yaml' % self.model._meta.app_config.label return read_layout_from_yaml(yaml_layout, self.layout_key) def get_layout_set(self): @@ -330,12 +331,14 @@ class CrispyLayoutFormMixin: def read_yaml_from_file(yaml_layout): - # TODO cache this at application level + from django.utils.safestring import SafeText + t = template.loader.get_template(yaml_layout) - # aqui é importante converter para str pois, dependendo do ambiente, - # o rtyaml pode usar yaml.CSafeLoader, que exige str ou stream rendered = str(t.render()) - return rtyaml.load(rendered) + if isinstance(rendered, SafeText): + rendered = rendered.strip() + + return yaml.load(rendered, yaml.Loader) def read_layout_from_yaml(yaml_layout, key): diff --git a/sapl/crud/base.py b/sapl/crud/base.py index 4a9ab196c..389161f12 100644 --- a/sapl/crud/base.py +++ b/sapl/crud/base.py @@ -9,27 +9,26 @@ from django.conf.urls import url from django.contrib import messages from django.contrib.auth.mixins import PermissionRequiredMixin from django.core.exceptions import ObjectDoesNotExist -from django.core.urlresolvers import reverse from django.db import models from django.db.models.fields.related import ForeignKey, ManyToManyField from django.http.response import Http404 from django.shortcuts import redirect +from django.urls import reverse from django.utils.decorators import classonlymethod from django.utils.encoding import force_text -from django.utils.translation import string_concat from django.utils.translation import ugettext_lazy as _ from django.views.generic import (CreateView, DeleteView, DetailView, ListView, UpdateView) from django.views.generic.base import ContextMixin from django.views.generic.list import MultipleObjectMixin -from sapl.base.signals import post_delete_signal, post_save_signal from sapl.crispy_layout_mixin import CrispyLayoutFormMixin, get_field_display from sapl.crispy_layout_mixin import SaplFormHelper from sapl.rules.map_rules import (RP_ADD, RP_CHANGE, RP_DELETE, RP_DETAIL, RP_LIST) from sapl.utils import normalize + logger = logging.getLogger(settings.BASE_DIR.name) ACTION_LIST, ACTION_CREATE, ACTION_DETAIL, ACTION_UPDATE, ACTION_DELETE = \ @@ -80,6 +79,7 @@ def make_pagination(index, num_pages): head = from_to(1, PAGINATION_LENGTH - len(tail) - 1) return head + [None] + tail + """ variáveis do crud: help_topic @@ -157,7 +157,7 @@ class ListWithSearchForm(forms.Form): FieldWithButtons( Field('q', placeholder=_('Filtrar Lista'), - css_class='input-lg'), + css_class='form-control-lg'), StrictButton( _('Filtrar'), css_class='btn-outline-primary btn-lg', type='submit')) @@ -417,16 +417,18 @@ class CrudListView(PermissionRequiredContainerCrudMixin, ListView): for f in fn: if not f: continue - f = m._meta.get_field(f) - if hasattr(f, 'related_model') and f.related_model: - m = f.related_model - if f: - hook = 'hook_header_{}'.format(''.join(fn)) - if hasattr(self, hook): - header = getattr(self, hook)() - s.append(header) - else: - s.append(force_text(f.verbose_name)) + try: + f = m._meta.get_field(f) + if hasattr(f, 'related_model') and f.related_model: + m = f.related_model + except: + f = None + hook = 'hook_header_{}'.format(''.join(fn)) + if hasattr(self, hook): + header = getattr(self, hook)() + s.append(header) + elif f: + s.append(force_text(f.verbose_name)) s = ' / '.join(s) r.append(s) @@ -465,18 +467,21 @@ class CrudListView(PermissionRequiredContainerCrudMixin, ListView): break ss = '' - if m: - ss = get_field_display(m, n[-1])[1] - ss = ( - ('
    ' if '
      ' in ss else ' - ') + ss)\ - if ss and j != 0 and s else ss - - hook = 'hook_{}'.format(''.join(n)) - if hasattr(self, hook): - hs, url = getattr(self, hook)(obj, ss, url) - s += str(hs) - else: - s += ss + try: + if m: + ss = get_field_display(m, n[-1])[1] + ss = ( + ('
      ' if '
        ' in ss else ' - ') + ss)\ + if ss and j != 0 and s else ss + except: + pass + finally: + hook = 'hook_{}'.format(''.join(n)) + if hasattr(self, hook): + hs, url = getattr(self, hook)(obj, ss, url) + s += str(hs) + else: + s += ss r.append((s, url)) return r @@ -608,12 +613,11 @@ class CrudListView(PermissionRequiredContainerCrudMixin, ListView): # print(ordering) except Exception as e: - logger.warn( - string_concat(_('ERRO: construção da tupla de ordenação.'), str(e)) - ) + logger.warning( + _(f"ERRO: construção da tupla de ordenação. {e}")) # print(queryset.query) - if not self.request.user.is_authenticated(): + if not self.request.user.is_authenticated: return queryset if self.container_field: @@ -624,37 +628,8 @@ class CrudListView(PermissionRequiredContainerCrudMixin, ListView): return queryset -class AuditLogMixin(object): - - def delete(self, request, *args, **kwargs): - # Classe deve implementar um get_object(), i.e., deve ser uma View - deleted_object = self.get_object() - try: - return super(AuditLogMixin, self).delete(request, args, kwargs) - finally: - post_delete_signal.send(sender=None, - instance=deleted_object, - operation='D', - request=self.request) - - # SAVE/UPDATE method - def form_valid(self, form): - try: - if not form.instance.pk: - operation = 'C' - else: - operation = 'U' - return super(AuditLogMixin, self).form_valid(form) - finally: - post_save_signal.send(sender=None, - instance=form.instance, - operation=operation, - request=self.request - ) - - class CrudCreateView(PermissionRequiredContainerCrudMixin, - FormMessagesMixin, AuditLogMixin, CreateView): + FormMessagesMixin, CreateView): permission_required = (RP_ADD,) logger = logging.getLogger(__name__) @@ -816,7 +791,7 @@ class CrudDetailView(PermissionRequiredContainerCrudMixin, else: queryset = super().get_queryset() - if not self.request.user.is_authenticated(): + if not self.request.user.is_authenticated: return queryset if self.container_field_set: @@ -872,7 +847,7 @@ class CrudDetailView(PermissionRequiredContainerCrudMixin, class CrudUpdateView(PermissionRequiredContainerCrudMixin, - FormMessagesMixin, AuditLogMixin, UpdateView): + FormMessagesMixin, UpdateView): permission_required = (RP_CHANGE,) logger = logging.getLogger(__name__) @@ -903,7 +878,7 @@ class CrudUpdateView(PermissionRequiredContainerCrudMixin, class CrudDeleteView(PermissionRequiredContainerCrudMixin, - FormMessagesMixin, AuditLogMixin, DeleteView): + FormMessagesMixin, DeleteView): permission_required = (RP_DELETE,) logger = logging.getLogger(__name__) diff --git a/sapl/crud/tests/stub_app/templates/base.html b/sapl/crud/tests/stub_app/templates/base.html index fcf92e5eb..9dae745b2 100644 --- a/sapl/crud/tests/stub_app/templates/base.html +++ b/sapl/crud/tests/stub_app/templates/base.html @@ -1,6 +1,6 @@ {% load i18n %} - + diff --git a/sapl/crud/tests/test_base.py b/sapl/crud/tests/test_base.py index 89e485fae..bd5e0d95c 100644 --- a/sapl/crud/tests/test_base.py +++ b/sapl/crud/tests/test_base.py @@ -1,8 +1,6 @@ -import pytest from django.core.urlresolvers import reverse from model_bakery import baker -from sapl.crud.base import (CrispyLayoutFormMixin, CrudListView, from_to, get_field_display, make_pagination) from sapl.crud.tests.stub_app.models import Continent, Country from sapl.crud.tests.stub_app.views import CountryCrud diff --git a/sapl/crud/tests/test_masterdetail.py b/sapl/crud/tests/test_masterdetail.py index b9d0d8ade..781faea23 100644 --- a/sapl/crud/tests/test_masterdetail.py +++ b/sapl/crud/tests/test_masterdetail.py @@ -1,5 +1,5 @@ import pytest -from django.core.urlresolvers import reverse +from django.urls import reverse @pytest.mark.parametrize('path_name', [ diff --git a/sapl/legacy/migracao_usuarios.py b/sapl/legacy/migracao_usuarios.py index 7a5c9ebeb..ef5d3427e 100644 --- a/sapl/legacy/migracao_usuarios.py +++ b/sapl/legacy/migracao_usuarios.py @@ -75,7 +75,7 @@ def migrar_usuarios(dir_repo, primeira_migracao): ARQUIVO_USUARIOS = Path(dir_repo).child('usuarios.yaml') with open(ARQUIVO_USUARIOS, 'r') as f: - usuarios = yaml.load(f) + usuarios = yaml.load(f, yaml.Loader) # conferimos de que só há um nome de usuário assert all(nome == dados['name'] for nome, dados in usuarios.items()) usuarios = [ diff --git a/sapl/legacy/scripts/exporta_zope/exporta_zope.py b/sapl/legacy/scripts/exporta_zope/exporta_zope.py index c3c7c753a..21d476ca1 100755 --- a/sapl/legacy/scripts/exporta_zope/exporta_zope.py +++ b/sapl/legacy/scripts/exporta_zope/exporta_zope.py @@ -465,7 +465,9 @@ def dump_sapl(sigla): finalizado = False arq_mtimes = Path(repo.working_dir, 'mtimes.yaml') mtimes = yaml.load( - arq_mtimes.read_file()) if arq_mtimes.exists() else {} + arq_mtimes.read_file(), + yaml.Loader + ) if arq_mtimes.exists() else {} _dump_sapl(data_fs_path, documentos_fs_path, destino, salvar, mtimes) finalizado = True finally: diff --git a/sapl/legacy_migration_settings.py b/sapl/legacy_migration_settings.py index ce0029937..463fbb7a6 100644 --- a/sapl/legacy_migration_settings.py +++ b/sapl/legacy_migration_settings.py @@ -54,7 +54,7 @@ match = re.match('sapl_cm_(.*)', NOME_BANCO_LEGADO) SIGLA_CASA = match.group(1) _PATH_TABELA_TIMEZONES = DIR_DADOS_MIGRACAO.child('tabela_timezones.yaml') with open(_PATH_TABELA_TIMEZONES, 'r') as arq: - tabela_timezones = yaml.load(arq) + tabela_timezones = yaml.load(arq, yaml.Loader) municipio, uf, nome_timezone = tabela_timezones[SIGLA_CASA] if nome_timezone: PYTZ_TIMEZONE = pytz.timezone(nome_timezone) diff --git a/sapl/lexml/forms.py b/sapl/lexml/forms.py new file mode 100644 index 000000000..7904508af --- /dev/null +++ b/sapl/lexml/forms.py @@ -0,0 +1,57 @@ +from django.core.exceptions import ValidationError +from django.forms import ModelForm +from sapl.settings import PROJECT_DIR +from django.utils.translation import ugettext_lazy as _ + +from io import StringIO +from lxml import etree +import os +import re +import xml.dom.minidom as dom + +from .models import LexmlProvedor + + +class LexmlProvedorForm(ModelForm): + class Meta: + model = LexmlProvedor + fields = [ + "id_provedor", + "nome", + "id_responsavel", + "nome_responsavel", + "email_responsavel", + "xml" + ] + + def clean(self): + cd = super().clean() + + if not self.is_valid(): + return cd + + if cd["xml"]: + xml = re.sub("\n|\t", "", cd["xml"].strip()) + + validar_xml(xml) + validar_schema(xml) + + return cd + + +def validar_xml(xml): + xml = StringIO(xml) + try: + dom.parse(xml) + except Exception as e: + raise ValidationError(_(F"XML mal formatado. Error: {e}")) + +def validar_schema(xml): + xml_schema = open(os.path.join(PROJECT_DIR, 'sapl/templates/lexml/schema.xsd'), 'rb').read() + schema_root = etree.XML(xml_schema) + schema = etree.XMLSchema(schema_root) + parser = etree.XMLParser(schema=schema) + try: + root = etree.fromstring(xml.encode(), parser) + except Exception as e: + raise ValidationError(_(F"XML mal formatado. Error: {e}")) diff --git a/sapl/lexml/migrations/0002_auto_20201013_1201.py b/sapl/lexml/migrations/0002_auto_20201013_1201.py new file mode 100644 index 000000000..993f7630b --- /dev/null +++ b/sapl/lexml/migrations/0002_auto_20201013_1201.py @@ -0,0 +1,21 @@ +# Generated by Django 2.2.13 on 2020-10-13 15:01 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('lexml', '0001_initial'), + ] + + operations = [ + migrations.AlterModelOptions( + name='lexmlprovedor', + options={'ordering': ('id',), 'verbose_name': 'Provedor Lexml', 'verbose_name_plural': 'Provedores Lexml'}, + ), + migrations.AlterModelOptions( + name='lexmlpublicador', + options={'ordering': ('id',), 'verbose_name': 'Publicador Lexml', 'verbose_name_plural': 'Publicadores Lexml'}, + ), + ] diff --git a/sapl/lexml/models.py b/sapl/lexml/models.py index eeab71f73..bec1b52ec 100644 --- a/sapl/lexml/models.py +++ b/sapl/lexml/models.py @@ -32,6 +32,7 @@ class LexmlProvedor(models.Model): # LexmlRegistroProvedor class Meta: verbose_name = _('Provedor Lexml') verbose_name_plural = _('Provedores Lexml') + ordering = ('id',) def __str__(self): return self.nome @@ -62,6 +63,7 @@ class LexmlPublicador(models.Model): class Meta: verbose_name = _('Publicador Lexml') verbose_name_plural = _('Publicadores Lexml') + ordering = ('id',) def __str__(self): return self.nome diff --git a/sapl/lexml/views.py b/sapl/lexml/views.py index 92fee8310..e9b53a177 100644 --- a/sapl/lexml/views.py +++ b/sapl/lexml/views.py @@ -7,6 +7,8 @@ from sapl.rules import RP_DETAIL, RP_LIST from .models import LexmlProvedor, LexmlPublicador +from .forms import LexmlProvedorForm + LexmlPublicadorCrud = CrudAux.build(LexmlPublicador, 'lexml_publicador') @@ -15,6 +17,12 @@ class LexmlProvedorCrud(Crud): help_topic = 'lexml_provedor' public = [RP_LIST, RP_DETAIL] + class CreateView(Crud.CreateView): + form_class = LexmlProvedorForm + + class UpdateView(Crud.UpdateView): + form_class = LexmlProvedorForm + class DetailView(Crud.DetailView): layout_key = 'LexmlProvedorDetail' diff --git a/sapl/materia/apps.py b/sapl/materia/apps.py index 2cc3559ae..3ac053d1b 100644 --- a/sapl/materia/apps.py +++ b/sapl/materia/apps.py @@ -6,6 +6,3 @@ class AppConfig(apps.AppConfig): name = 'sapl.materia' label = 'materia' verbose_name = _('Matéria') - - def ready(self): - from sapl.base import receivers diff --git a/sapl/materia/forms.py b/sapl/materia/forms.py index 65d227894..856e7fa13 100644 --- a/sapl/materia/forms.py +++ b/sapl/materia/forms.py @@ -1,53 +1,49 @@ -import django_filters import logging import os -import sapl from crispy_forms.bootstrap import Alert, InlineRadios from crispy_forms.layout import (Button, Field, Fieldset, HTML, Layout, Row) - from django import forms from django.contrib.contenttypes.models import ContentType from django.core.exceptions import ObjectDoesNotExist, ValidationError from django.core.files.base import File -from django.core.urlresolvers import reverse -from django.db import models, transaction +from django.db import transaction from django.db.models import F, Max, Q from django.forms import ModelChoiceField, ModelForm, widgets from django.forms.forms import Form from django.forms.models import ModelMultipleChoiceField from django.forms.widgets import CheckboxSelectMultiple, HiddenInput, Select +from django.urls import reverse from django.utils import timezone -from django.utils.encoding import force_text -from django.utils.html import format_html -from django.utils.safestring import mark_safe from django.utils.translation import ugettext_lazy as _ +import django_filters +import sapl from sapl.base.models import AppConfig, Autor, TipoAutor -from sapl.base.signals import post_save_signal from sapl.comissoes.models import Comissao, Composicao, Participacao from sapl.compilacao.models import (STATUS_TA_IMMUTABLE_PUBLIC, STATUS_TA_PRIVATE) from sapl.crispy_layout_mixin import (form_actions, SaplFormHelper, SaplFormLayout, to_column, to_row) -from sapl.materia.models import (AssuntoMateria, Autoria, MateriaAssunto, +from sapl.materia.models import (AssuntoMateria, MateriaAssunto, MateriaLegislativa, Orgao, RegimeTramitacao, StatusTramitacao, TipoDocumento, TipoProposicao, - UnidadeTramitacao) -from sapl.norma.models import (LegislacaoCitada, NormaJuridica, + ConfigEtiquetaMateriaLegislativa, HistoricoProposicao) +from sapl.norma.models import (LegislacaoCitada, NormaJuridica, TipoNormaJuridica) -from sapl.parlamentares.models import Legislatura, Partido, Parlamentar -from sapl.protocoloadm.models import (Anexado, DocumentoAdministrativo, +from sapl.parlamentares.models import Legislatura, Partido +from sapl.protocoloadm.models import (DocumentoAdministrativo, Protocolo) -from sapl.utils import (autor_label, autor_modal, +from sapl.utils import (autor_label, autor_modal, timing, ChoiceWithoutValidationField, choice_anos_com_materias, FileFieldCheckMixin, FilterOverridesMetaMixin, gerar_hash_arquivo, lista_anexados, MateriaPesquisaOrderingFilter, models_with_gr_for_model, qs_override_django_filter, - RangeWidgetOverride, SEPARADOR_HASH_PROPOSICAO, - validar_arquivo, YES_NO_CHOICES) + SEPARADOR_HASH_PROPOSICAO, + validar_arquivo, YES_NO_CHOICES, + GoogleRecapthaMixin) from .models import (AcompanhamentoMateria, Anexada, Autoria, DespachoInicial, DocumentoAcessorio, Numeracao, @@ -211,8 +207,10 @@ class MateriaLegislativaForm(FileFieldCheckMixin, ModelForm): if protocolo: if not Protocolo.objects.filter(numero=protocolo, ano=ano).exists(): - self.logger.warning("Protocolo %s/%s não existe" % (protocolo, ano)) - raise ValidationError(_('Protocolo %s/%s não existe' % (protocolo, ano))) + self.logger.warning( + "Protocolo %s/%s não existe" % (protocolo, ano)) + raise ValidationError( + _('Protocolo %s/%s não existe' % (protocolo, ano))) if protocolo_antigo != protocolo: exist_materia = MateriaLegislativa.objects.filter( @@ -317,7 +315,7 @@ class UnidadeTramitacaoForm(ModelForm): return unidade -class AcompanhamentoMateriaForm(ModelForm): +class AcompanhamentoMateriaForm(GoogleRecapthaMixin, ModelForm): class Meta: model = AcompanhamentoMateria @@ -325,17 +323,10 @@ class AcompanhamentoMateriaForm(ModelForm): def __init__(self, *args, **kwargs): - row1 = to_row([('email', 12)]) + kwargs['title_label'] = _('Acompanhamento de Matéria por e-mail') + kwargs['action_label'] = _('Cadastrar') - self.helper = SaplFormHelper() - self.helper.layout = Layout( - Fieldset( - _('Acompanhamento de Matéria por e-mail'), - row1, - form_actions(label='Cadastrar') - ) - ) - super(AcompanhamentoMateriaForm, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) class DocumentoAcessorioForm(FileFieldCheckMixin, ModelForm): @@ -352,10 +343,16 @@ class DocumentoAcessorioForm(FileFieldCheckMixin, ModelForm): if not self.is_valid(): return self.cleaned_data - arquivo = self.cleaned_data.get('arquivo', False) + arquivo = self.cleaned_data.get('arquivo') if arquivo: validar_arquivo(arquivo, "Texto Integral") + else: + ## TODO: definir arquivo no form e preservar o nome do campo + ## que gerou a mensagem de erro. + ## arquivo = forms.FileField(required=True, label="Texto Integral") + nome_arquivo = self.fields['arquivo'].label + raise ValidationError(f'Favor anexar arquivo em {nome_arquivo}') return self.cleaned_data @@ -370,6 +367,10 @@ class RelatoriaForm(ModelForm): label=_('Composição') ) + tipo_unidade_tramitacao_destino = forms.CharField(required=False) + + unidade_tramitacao_destino = forms.CharField(required=False) + class Meta: model = Relatoria fields = [ @@ -381,7 +382,11 @@ class RelatoriaForm(ModelForm): 'parlamentar' ] - widgets = {'comissao': forms.Select(attrs={'disabled': 'disabled'})} + widgets = { + 'comissao': forms.Select(attrs={'disabled': 'disabled'}), + 'tipo_unidade_tramitacao_destino': forms.HiddenInput(), + 'unidade_tramitacao_destino': forms.HiddenInput(), + } def __init__(self, *args, **kwargs): row1 = to_row([('comissao', 12)]) @@ -464,7 +469,7 @@ class TramitacaoForm(ModelForm): 'user', 'ip', 'ultima_edicao'] - + widgets = {'user': forms.HiddenInput(), 'ip': forms.HiddenInput(), 'ultima_edicao': forms.HiddenInput()} @@ -517,7 +522,8 @@ class TramitacaoForm(ModelForm): if cleaned_data['data_tramitacao'] > timezone.now().date(): self.logger.warning('A data de tramitação informada ({}) não é menor ou igual a data de hoje!' .format(cleaned_data['data_tramitacao'])) - msg = _('A data de tramitação deve ser menor ou igual a data de hoje!') + msg = _( + 'A data de tramitação deve ser menor ou igual a data de hoje!') raise ValidationError(msg) if (ultima_tramitacao and @@ -531,9 +537,10 @@ class TramitacaoForm(ModelForm): if data_enc_form: if data_enc_form < data_tram_form: - msg = _('A data de encaminhamento deve ser maior que a data de tramitação!') + msg = _( + 'A data de encaminhamento deve ser maior que a data de tramitação!') self.logger.warning("A data de encaminhamento ({}) deve ser maior que a data de tramitação! ({})" - .format(data_enc_form, data_tram_form)) + .format(data_enc_form, data_tram_form)) raise ValidationError(msg) if data_prazo_form: @@ -547,6 +554,7 @@ class TramitacaoForm(ModelForm): return cleaned_data + @timing @transaction.atomic def save(self, commit=True): tramitacao = super(TramitacaoForm, self).save(commit) @@ -558,15 +566,19 @@ class TramitacaoForm(ModelForm): 'tramitacao_materia') if tramitar_anexadas: lista_tramitacao = [] - anexadas_list = lista_anexados(materia) - for ma in anexadas_list: - if not ma.tramitacao_set.all() \ - or ma.tramitacao_set.last().unidade_tramitacao_destino == tramitacao.unidade_tramitacao_local: - ma.em_tramitacao = False if tramitacao.status.indicador == "F" else True - ma.save() + materias_anexadas = lista_anexados(materia) + for mat in materias_anexadas: + ultima_tramitacao = mat.tramitacao_set.\ + select_related('unidade_tramitacao_destino').\ + order_by('-data_tramitacao', '-id').first() + if not ultima_tramitacao or \ + ultima_tramitacao.unidade_tramitacao_destino \ + == tramitacao.unidade_tramitacao_local: + mat.em_tramitacao = False if \ + tramitacao.status.indicador == "F" else True lista_tramitacao.append(Tramitacao( status=tramitacao.status, - materia=ma, + materia=mat, data_tramitacao=tramitacao.data_tramitacao, unidade_tramitacao_local=tramitacao.unidade_tramitacao_local, data_encaminhamento=tramitacao.data_encaminhamento, @@ -579,8 +591,10 @@ class TramitacaoForm(ModelForm): ip=tramitacao.ip, ultima_edicao=tramitacao.ultima_edicao )) + ## TODO: BULK UPDATE não envia Signal para Tramitacao Tramitacao.objects.bulk_create(lista_tramitacao) - + # Atualiza status 'em_tramitacao' + MateriaLegislativa.objects.bulk_update(materias_anexadas, ['em_tramitacao']) return tramitacao @@ -659,14 +673,15 @@ class TramitacaoUpdateForm(TramitacaoForm): 'Você não pode mudar a Unidade de Destino desta ' 'tramitação, pois irá conflitar com a Unidade ' 'Local da tramitação seguinte') - - if not (cd['data_tramitacao'] != obj.data_tramitacao or \ - cd['unidade_tramitacao_destino'] != obj.unidade_tramitacao_destino or \ - cd['status'] != obj.status or cd['texto'] != obj.texto or \ - cd['data_encaminhamento'] != obj.data_encaminhamento or \ - cd['data_fim_prazo'] != obj.data_fim_prazo or cd['urgente'] != str(obj.urgente) or \ - cd['turno'] != obj.turno): - ### Se não ocorreram alterações, o usuário, ip, data e hora da última edição (real) são mantidos + + if not (cd['data_tramitacao'] != obj.data_tramitacao or + cd['unidade_tramitacao_destino'] != obj.unidade_tramitacao_destino or + cd['status'] != obj.status or cd['texto'] != obj.texto or + cd['data_encaminhamento'] != obj.data_encaminhamento or + cd['data_fim_prazo'] != obj.data_fim_prazo or cd['urgente'] != str(obj.urgente) or + cd['turno'] != obj.turno): + # Se não ocorreram alterações, o usuário, ip, data e hora da última + # edição (real) são mantidos cd['user'] = obj.user cd['ip'] = obj.ip cd['ultima_edicao'] = obj.ultima_edicao @@ -676,6 +691,7 @@ class TramitacaoUpdateForm(TramitacaoForm): return cd + @timing @transaction.atomic def save(self, commit=True): ant_tram_principal = Tramitacao.objects.get(id=self.instance.id) @@ -689,7 +705,8 @@ class TramitacaoUpdateForm(TramitacaoForm): if tramitar_anexadas: anexadas_list = lista_anexados(materia) for ma in anexadas_list: - tram_anexada = ma.tramitacao_set.last() + tram_anexada = ma.tramitacao_set.order_by( + '-data_tramitacao', '-id').first() if compara_tramitacoes_mat(ant_tram_principal, tram_anexada): tram_anexada.status = nova_tram_principal.status tram_anexada.data_tramitacao = nova_tram_principal.data_tramitacao @@ -707,6 +724,7 @@ class TramitacaoUpdateForm(TramitacaoForm): ma.em_tramitacao = False if nova_tram_principal.status.indicador == "F" else True ma.save() + ## TODO: refatorar? return nova_tram_principal @@ -898,7 +916,8 @@ class AnexadaForm(ModelForm): except ObjectDoesNotExist: msg = _('A {} {}/{} não existe no cadastro de matérias legislativas.' .format(cleaned_data['tipo'], cleaned_data['numero'], cleaned_data['ano'])) - self.logger.warning("A matéria a ser anexada não existe no cadastro de matérias legislativas.") + self.logger.warning( + "A matéria a ser anexada não existe no cadastro de matérias legislativas.") raise ValidationError(msg) materia_principal = self.instance.materia_principal @@ -1109,7 +1128,7 @@ class MateriaLegislativaFilterSet(django_filters.FilterSet): ), Fieldset(_('Origem externa'), row10, row11 - ), + ), Fieldset(_('Pesquisa Avançada'), row3, HTML(autor_label), @@ -1635,7 +1654,6 @@ class TramitacaoEmLoteForm(ModelForm): widgets = {'user': forms.HiddenInput(), 'ip': forms.HiddenInput(), 'ultima_edicao': forms.HiddenInput()} - def __init__(self, *args, **kwargs): super(TramitacaoEmLoteForm, self).__init__(*args, **kwargs) @@ -1737,7 +1755,8 @@ class TramitacaoEmLoteForm(ModelForm): if data_enc_form < data_tram_form: self.logger.warning('A data de encaminhamento ({}) deve ser maior que a data de tramitação ({})!' .format(data_enc_form, data_tram_form)) - msg = _('A data de encaminhamento deve ser maior que a data de tramitação!') + msg = _( + 'A data de encaminhamento deve ser maior que a data de tramitação!') raise ValidationError(msg) if data_prazo_form: @@ -1754,7 +1773,7 @@ class TramitacaoEmLoteForm(ModelForm): @transaction.atomic def save(self, commit=True): cd = self.cleaned_data - + materias = self.initial['materias'] user = self.initial['user'] if 'user' in self.initial else None ip = self.initial['ip'] if 'ip' in self.initial else '' @@ -1785,9 +1804,9 @@ class TramitacaoEmLoteForm(ModelForm): lista_tramitacao = [] anexadas = lista_anexados(mat) for ml in anexadas: - if not ml.tramitacao_set.all() \ - or ml.tramitacao_set.last() \ - .unidade_tramitacao_destino == tramitacao.unidade_tramitacao_local: + if not ml.tramitacao_set.order_by('-data_tramitacao', '-id').all() or \ + ml.tramitacao_set.order_by('-data_tramitacao', '-id').first().unidade_tramitacao_destino \ + == tramitacao.unidade_tramitacao_local: ml.em_tramitacao = False if tramitacao.status.indicador == "F" else True ml.save() lista_tramitacao.append(Tramitacao( @@ -1805,6 +1824,7 @@ class TramitacaoEmLoteForm(ModelForm): ip=tramitacao.ip, ultima_edicao=tramitacao.ultima_edicao )) + ## TODO: BULK UPDATE não envia Signal para Tramitacao Tramitacao.objects.bulk_create(lista_tramitacao) return tramitacao @@ -1979,6 +1999,10 @@ class ProposicaoForm(FileFieldCheckMixin, forms.ModelForm): cd = self.cleaned_data + texto_original = cd.get('texto_original', False) + if texto_original: + validar_arquivo(texto_original, 'Texto Original') + tm, am, nm = (cd.get('tipo_materia', ''), cd.get('ano_materia', ''), cd.get('numero_materia', '')) @@ -2066,7 +2090,13 @@ class DevolverProposicaoForm(forms.ModelForm): fields = [ 'justificativa_devolucao', 'observacao', + 'user', + 'ip' ] + widgets = { + 'user': forms.HiddenInput(), + 'ip': forms.HiddenInput(), + } def __init__(self, *args, **kwargs): @@ -2121,6 +2151,13 @@ class DevolverProposicaoForm(forms.ModelForm): ta.editing_locked = False ta.save() + observacao = self.instance.justificativa_devolucao + HistoricoProposicao.objects.create(proposicao=self.instance, + status='D', + user=self.initial['user'], + ip=self.initial['ip'], + observacao=observacao) + self.instance.results = { 'messages': { 'success': [_('Devolução efetuada com sucesso.'), ] @@ -2163,13 +2200,17 @@ class ConfirmarProposicaoForm(ProposicaoForm): 'observacao', 'gerar_protocolo', 'numero_de_paginas', - 'numero_materia_futuro' + 'numero_materia_futuro', + 'user', + 'ip' ] widgets = { 'descricao': widgets.Textarea( attrs={'readonly': 'readonly', 'rows': 4}), 'data_envio': widgets.DateTimeInput( attrs={'readonly': 'readonly'}), + 'user': forms.HiddenInput(), + 'ip': forms.HiddenInput(), } def __init__(self, *args, **kwargs): @@ -2377,6 +2418,12 @@ class ConfirmarProposicaoForm(ProposicaoForm): proposicao = self.instance conteudo_gerado = None + HistoricoProposicao.objects.create(proposicao=proposicao, + status='R', + user=self.initial['user'], + ip=self.initial['ip'], + ) + if self.instance.tipo.content_type.model_class( ) == TipoMateriaLegislativa: @@ -2546,7 +2593,8 @@ class ConfirmarProposicaoForm(ProposicaoForm): data_fim__year__gte=timezone.now().year).first() ano_inicio = legislatura.data_inicio.year ano_fim = legislatura.data_fim.year - nm = Protocolo.objects.filter(ano__gte=ano_inicio, ano__lte=ano_fim).aggregate(Max('numero')) + nm = Protocolo.objects.filter( + ano__gte=ano_inicio, ano__lte=ano_fim).aggregate(Max('numero')) else: # numeracao == 'U' ou não informada nm = Protocolo.objects.all().aggregate(Max('numero')) @@ -2572,6 +2620,8 @@ class ConfirmarProposicaoForm(ProposicaoForm): protocolo.tipo_processo = '0' protocolo.save() + HistoricoProposicao.objects.create(proposicao=proposicao, + status='E') self.instance.results['messages']['success'].append(_( 'Protocolo realizado com sucesso')) @@ -2773,6 +2823,30 @@ class FichaSelecionaForm(forms.Form): ) +class StatusTramitacaoFilterSet(django_filters.FilterSet): + descricao = django_filters.CharFilter( + label=_("Descrição do Status"), method='multifield_filter') + + class Meta: + model = StatusTramitacao + fields = ["descricao"] + + def multifield_filter(self, queryset, name, value): + return queryset.filter(Q(sigla__icontains=value) | Q(descricao__icontains=value)) + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + row0 = to_row([("descricao", 12)]) + + self.form.helper = SaplFormHelper() + self.form.helper.form_method = "GET" + self.form.helper.layout = Layout( + Fieldset(_("Pesquisa de Status de Tramitacao"), + row0, form_actions(label="Pesquisar")) + ) + + class ExcluirTramitacaoEmLote(forms.Form): logger = logging.getLogger(__name__) @@ -2913,3 +2987,9 @@ class MateriaPesquisaSimplesForm(forms.Form): _('A Data Final não pode ser menor que a Data Inicial')) return cleaned_data + + +class ConfigEtiquetaMateriaLegislativaForms(ModelForm): + class Meta: + model = ConfigEtiquetaMateriaLegislativa + fields = '__all__' diff --git a/sapl/materia/migrations/0068_configetiquetamaterialegislativa.py b/sapl/materia/migrations/0068_configetiquetamaterialegislativa.py new file mode 100644 index 000000000..3dce8a3f3 --- /dev/null +++ b/sapl/materia/migrations/0068_configetiquetamaterialegislativa.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.29 on 2020-05-18 18:14 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('materia', '0067_auto_20200416_1538'), + ] + + operations = [ + migrations.CreateModel( + name='ConfigEtiquetaMateriaLegislativa', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('largura', models.FloatField(default=5)), + ('altura', models.FloatField(default=3)), + ], + ), + ] diff --git a/sapl/materia/migrations/0069_auto_20200518_1519.py b/sapl/materia/migrations/0069_auto_20200518_1519.py new file mode 100644 index 000000000..4251cb6e9 --- /dev/null +++ b/sapl/materia/migrations/0069_auto_20200518_1519.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.29 on 2020-05-18 18:19 +from __future__ import unicode_literals + +from django.db import migrations + + +def create_first(apps, schema_editor): + db_alias = schema_editor.connection.alias + Type = apps.get_model("materia", "ConfigEtiquetaMateriaLegislativa") + Type.objects.using(db_alias).create() + +class Migration(migrations.Migration): + dependencies = [ + ('materia', '0068_configetiquetamaterialegislativa'), + ] + + operations = [ + migrations.RunPython(create_first), + ] \ No newline at end of file diff --git a/sapl/materia/migrations/0070_auto_20200521_1534.py b/sapl/materia/migrations/0070_auto_20200521_1534.py new file mode 100644 index 000000000..cf5ef1839 --- /dev/null +++ b/sapl/materia/migrations/0070_auto_20200521_1534.py @@ -0,0 +1,19 @@ +# Generated by Django 2.2 on 2020-05-21 18:34 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('materia', '0069_auto_20200518_1519'), + ] + + operations = [ + migrations.AlterField( + model_name='proposicao', + name='content_type', + field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.PROTECT, to='contenttypes.ContentType', verbose_name='Tipo de Material Gerado'), + ), + ] diff --git a/sapl/materia/migrations/0071_auto_20200609_1503.py b/sapl/materia/migrations/0071_auto_20200609_1503.py new file mode 100644 index 000000000..9adec696f --- /dev/null +++ b/sapl/materia/migrations/0071_auto_20200609_1503.py @@ -0,0 +1,23 @@ +# Generated by Django 2.2 on 2020-06-09 18:03 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('materia', '0070_auto_20200521_1534'), + ] + + operations = [ + migrations.AlterField( + model_name='materialegislativa', + name='complementar', + field=models.BooleanField(blank=True, default=False, null=True, verbose_name='É Complementar?'), + ), + migrations.AlterField( + model_name='materialegislativa', + name='polemica', + field=models.BooleanField(blank=True, default=False, null=True, verbose_name='Matéria Polêmica?'), + ), + ] diff --git a/sapl/materia/migrations/0072_auto_20200902_1338.py b/sapl/materia/migrations/0072_auto_20200902_1338.py new file mode 100644 index 000000000..06cd6b208 --- /dev/null +++ b/sapl/materia/migrations/0072_auto_20200902_1338.py @@ -0,0 +1,17 @@ +# Generated by Django 2.2.13 on 2020-09-02 16:38 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('materia', '0071_auto_20200609_1503'), + ] + + operations = [ + migrations.AlterModelOptions( + name='materialegislativa', + options={'ordering': ['-ano', 'tipo', 'numero'], 'permissions': (('can_access_impressos', 'Can access impressos'),), 'verbose_name': 'Matéria Legislativa', 'verbose_name_plural': 'Matérias Legislativas'}, + ), + ] diff --git a/sapl/materia/migrations/0073_auto_20200910_1420.py b/sapl/materia/migrations/0073_auto_20200910_1420.py new file mode 100644 index 000000000..cc90f0f27 --- /dev/null +++ b/sapl/materia/migrations/0073_auto_20200910_1420.py @@ -0,0 +1,17 @@ +# Generated by Django 2.2.13 on 2020-09-10 17:20 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('materia', '0072_auto_20200902_1338'), + ] + + operations = [ + migrations.AlterModelOptions( + name='tramitacao', + options={'ordering': ('-data_tramitacao', '-id'), 'verbose_name': 'Tramitação', 'verbose_name_plural': 'Tramitações'}, + ), + ] diff --git a/sapl/materia/migrations/0074_auto_20201006_0734.py b/sapl/materia/migrations/0074_auto_20201006_0734.py new file mode 100644 index 000000000..63397f721 --- /dev/null +++ b/sapl/materia/migrations/0074_auto_20201006_0734.py @@ -0,0 +1,17 @@ +# Generated by Django 2.2.13 on 2020-10-06 10:34 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('materia', '0073_auto_20200910_1420'), + ] + + operations = [ + migrations.AlterModelOptions( + name='documentoacessorio', + options={'ordering': ('data', '-data_ultima_atualizacao'), 'verbose_name': 'Documento Acessório', 'verbose_name_plural': 'Documentos Acessórios'}, + ), + ] diff --git a/sapl/materia/migrations/0075_auto_20201013_0854.py b/sapl/materia/migrations/0075_auto_20201013_0854.py new file mode 100644 index 000000000..d2c2260c2 --- /dev/null +++ b/sapl/materia/migrations/0075_auto_20201013_0854.py @@ -0,0 +1,65 @@ +# Generated by Django 2.2.13 on 2020-10-13 11:54 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('materia', '0074_auto_20201006_0734'), + ] + + operations = [ + migrations.AlterModelOptions( + name='acompanhamentomateria', + options={'ordering': ('id',), 'verbose_name': 'Acompanhamento de Matéria', 'verbose_name_plural': 'Acompanhamentos de Matéria'}, + ), + migrations.AlterModelOptions( + name='anexada', + options={'ordering': ('id',), 'verbose_name': 'Anexada', 'verbose_name_plural': 'Anexadas'}, + ), + migrations.AlterModelOptions( + name='configetiquetamaterialegislativa', + options={'ordering': ('id',)}, + ), + migrations.AlterModelOptions( + name='despachoinicial', + options={'ordering': ('id',), 'verbose_name': 'Despacho Inicial', 'verbose_name_plural': 'Despachos Iniciais'}, + ), + migrations.AlterModelOptions( + name='materiaemtramitacao', + options={'managed': False, 'ordering': ('-id',)}, + ), + migrations.AlterModelOptions( + name='origem', + options={'ordering': ('id',), 'verbose_name': 'Origem', 'verbose_name_plural': 'Origens'}, + ), + migrations.AlterModelOptions( + name='parecer', + options={'ordering': ('id',), 'verbose_name': 'Parecer', 'verbose_name_plural': 'Pareceres'}, + ), + migrations.AlterModelOptions( + name='pautareuniao', + options={'ordering': ('id',), 'verbose_name': 'Matéria da Pauta', 'verbose_name_plural': 'Matérias da Pauta'}, + ), + migrations.AlterModelOptions( + name='regimetramitacao', + options={'ordering': ('id',), 'verbose_name': 'Regime de Tramitação', 'verbose_name_plural': 'Regimes de Tramitação'}, + ), + migrations.AlterModelOptions( + name='relatoria', + options={'ordering': ('id',), 'verbose_name': 'Relatoria', 'verbose_name_plural': 'Relatorias'}, + ), + migrations.AlterModelOptions( + name='tipofimrelatoria', + options={'ordering': ('id',), 'verbose_name': 'Tipo Fim de Relatoria', 'verbose_name_plural': 'Tipos Fim de Relatoria'}, + ), + migrations.AlterModelOptions( + name='tipoproposicao', + options={'ordering': ('id',), 'verbose_name': 'Tipo de Proposição', 'verbose_name_plural': 'Tipos de Proposições'}, + ), + migrations.AlterModelOptions( + name='unidadetramitacao', + options={'ordering': ('orgao__nome', 'comissao__sigla', 'parlamentar__nome_parlamentar'), 'verbose_name': 'Unidade de Tramitação', 'verbose_name_plural': 'Unidades de Tramitação'}, + ), + ] diff --git a/sapl/materia/migrations/0076_auto_20210107_1408.py b/sapl/materia/migrations/0076_auto_20210107_1408.py new file mode 100644 index 000000000..ac5cdf8ac --- /dev/null +++ b/sapl/materia/migrations/0076_auto_20210107_1408.py @@ -0,0 +1,33 @@ +# Generated by Django 2.2.13 on 2021-01-07 17:08 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('materia', '0075_auto_20201013_0854'), + ] + + operations = [ + migrations.AlterField( + model_name='materialegislativa', + name='ano', + field=models.PositiveSmallIntegerField(choices=[(2022, 2022), (2021, 2021), (2020, 2020), (2019, 2019), (2018, 2018), (2017, 2017), (2016, 2016), (2015, 2015), (2014, 2014), (2013, 2013), (2012, 2012), (2011, 2011), (2010, 2010), (2009, 2009), (2008, 2008), (2007, 2007), (2006, 2006), (2005, 2005), (2004, 2004), (2003, 2003), (2002, 2002), (2001, 2001), (2000, 2000), (1999, 1999), (1998, 1998), (1997, 1997), (1996, 1996), (1995, 1995), (1994, 1994), (1993, 1993), (1992, 1992), (1991, 1991), (1990, 1990), (1989, 1989), (1988, 1988), (1987, 1987), (1986, 1986), (1985, 1985), (1984, 1984), (1983, 1983), (1982, 1982), (1981, 1981), (1980, 1980), (1979, 1979), (1978, 1978), (1977, 1977), (1976, 1976), (1975, 1975), (1974, 1974), (1973, 1973), (1972, 1972), (1971, 1971), (1970, 1970), (1969, 1969), (1968, 1968), (1967, 1967), (1966, 1966), (1965, 1965), (1964, 1964), (1963, 1963), (1962, 1962), (1961, 1961), (1960, 1960), (1959, 1959), (1958, 1958), (1957, 1957), (1956, 1956), (1955, 1955), (1954, 1954), (1953, 1953), (1952, 1952), (1951, 1951), (1950, 1950), (1949, 1949), (1948, 1948), (1947, 1947), (1946, 1946), (1945, 1945), (1944, 1944), (1943, 1943), (1942, 1942), (1941, 1941), (1940, 1940), (1939, 1939), (1938, 1938), (1937, 1937), (1936, 1936), (1935, 1935), (1934, 1934), (1933, 1933), (1932, 1932), (1931, 1931), (1930, 1930), (1929, 1929), (1928, 1928), (1927, 1927), (1926, 1926), (1925, 1925), (1924, 1924), (1923, 1923), (1922, 1922), (1921, 1921), (1920, 1920), (1919, 1919), (1918, 1918), (1917, 1917), (1916, 1916), (1915, 1915), (1914, 1914), (1913, 1913), (1912, 1912), (1911, 1911), (1910, 1910), (1909, 1909), (1908, 1908), (1907, 1907), (1906, 1906), (1905, 1905), (1904, 1904), (1903, 1903), (1902, 1902), (1901, 1901), (1900, 1900), (1899, 1899), (1898, 1898), (1897, 1897), (1896, 1896), (1895, 1895), (1894, 1894), (1893, 1893), (1892, 1892), (1891, 1891), (1890, 1890)], verbose_name='Ano'), + ), + migrations.AlterField( + model_name='materialegislativa', + name='ano_origem_externa', + field=models.PositiveSmallIntegerField(blank=True, choices=[(2022, 2022), (2021, 2021), (2020, 2020), (2019, 2019), (2018, 2018), (2017, 2017), (2016, 2016), (2015, 2015), (2014, 2014), (2013, 2013), (2012, 2012), (2011, 2011), (2010, 2010), (2009, 2009), (2008, 2008), (2007, 2007), (2006, 2006), (2005, 2005), (2004, 2004), (2003, 2003), (2002, 2002), (2001, 2001), (2000, 2000), (1999, 1999), (1998, 1998), (1997, 1997), (1996, 1996), (1995, 1995), (1994, 1994), (1993, 1993), (1992, 1992), (1991, 1991), (1990, 1990), (1989, 1989), (1988, 1988), (1987, 1987), (1986, 1986), (1985, 1985), (1984, 1984), (1983, 1983), (1982, 1982), (1981, 1981), (1980, 1980), (1979, 1979), (1978, 1978), (1977, 1977), (1976, 1976), (1975, 1975), (1974, 1974), (1973, 1973), (1972, 1972), (1971, 1971), (1970, 1970), (1969, 1969), (1968, 1968), (1967, 1967), (1966, 1966), (1965, 1965), (1964, 1964), (1963, 1963), (1962, 1962), (1961, 1961), (1960, 1960), (1959, 1959), (1958, 1958), (1957, 1957), (1956, 1956), (1955, 1955), (1954, 1954), (1953, 1953), (1952, 1952), (1951, 1951), (1950, 1950), (1949, 1949), (1948, 1948), (1947, 1947), (1946, 1946), (1945, 1945), (1944, 1944), (1943, 1943), (1942, 1942), (1941, 1941), (1940, 1940), (1939, 1939), (1938, 1938), (1937, 1937), (1936, 1936), (1935, 1935), (1934, 1934), (1933, 1933), (1932, 1932), (1931, 1931), (1930, 1930), (1929, 1929), (1928, 1928), (1927, 1927), (1926, 1926), (1925, 1925), (1924, 1924), (1923, 1923), (1922, 1922), (1921, 1921), (1920, 1920), (1919, 1919), (1918, 1918), (1917, 1917), (1916, 1916), (1915, 1915), (1914, 1914), (1913, 1913), (1912, 1912), (1911, 1911), (1910, 1910), (1909, 1909), (1908, 1908), (1907, 1907), (1906, 1906), (1905, 1905), (1904, 1904), (1903, 1903), (1902, 1902), (1901, 1901), (1900, 1900), (1899, 1899), (1898, 1898), (1897, 1897), (1896, 1896), (1895, 1895), (1894, 1894), (1893, 1893), (1892, 1892), (1891, 1891), (1890, 1890)], null=True, verbose_name='Ano'), + ), + migrations.AlterField( + model_name='numeracao', + name='ano_materia', + field=models.PositiveSmallIntegerField(choices=[(2022, 2022), (2021, 2021), (2020, 2020), (2019, 2019), (2018, 2018), (2017, 2017), (2016, 2016), (2015, 2015), (2014, 2014), (2013, 2013), (2012, 2012), (2011, 2011), (2010, 2010), (2009, 2009), (2008, 2008), (2007, 2007), (2006, 2006), (2005, 2005), (2004, 2004), (2003, 2003), (2002, 2002), (2001, 2001), (2000, 2000), (1999, 1999), (1998, 1998), (1997, 1997), (1996, 1996), (1995, 1995), (1994, 1994), (1993, 1993), (1992, 1992), (1991, 1991), (1990, 1990), (1989, 1989), (1988, 1988), (1987, 1987), (1986, 1986), (1985, 1985), (1984, 1984), (1983, 1983), (1982, 1982), (1981, 1981), (1980, 1980), (1979, 1979), (1978, 1978), (1977, 1977), (1976, 1976), (1975, 1975), (1974, 1974), (1973, 1973), (1972, 1972), (1971, 1971), (1970, 1970), (1969, 1969), (1968, 1968), (1967, 1967), (1966, 1966), (1965, 1965), (1964, 1964), (1963, 1963), (1962, 1962), (1961, 1961), (1960, 1960), (1959, 1959), (1958, 1958), (1957, 1957), (1956, 1956), (1955, 1955), (1954, 1954), (1953, 1953), (1952, 1952), (1951, 1951), (1950, 1950), (1949, 1949), (1948, 1948), (1947, 1947), (1946, 1946), (1945, 1945), (1944, 1944), (1943, 1943), (1942, 1942), (1941, 1941), (1940, 1940), (1939, 1939), (1938, 1938), (1937, 1937), (1936, 1936), (1935, 1935), (1934, 1934), (1933, 1933), (1932, 1932), (1931, 1931), (1930, 1930), (1929, 1929), (1928, 1928), (1927, 1927), (1926, 1926), (1925, 1925), (1924, 1924), (1923, 1923), (1922, 1922), (1921, 1921), (1920, 1920), (1919, 1919), (1918, 1918), (1917, 1917), (1916, 1916), (1915, 1915), (1914, 1914), (1913, 1913), (1912, 1912), (1911, 1911), (1910, 1910), (1909, 1909), (1908, 1908), (1907, 1907), (1906, 1906), (1905, 1905), (1904, 1904), (1903, 1903), (1902, 1902), (1901, 1901), (1900, 1900), (1899, 1899), (1898, 1898), (1897, 1897), (1896, 1896), (1895, 1895), (1894, 1894), (1893, 1893), (1892, 1892), (1891, 1891), (1890, 1890)], verbose_name='Ano'), + ), + migrations.AlterField( + model_name='proposicao', + name='ano', + field=models.PositiveSmallIntegerField(blank=True, choices=[(2022, 2022), (2021, 2021), (2020, 2020), (2019, 2019), (2018, 2018), (2017, 2017), (2016, 2016), (2015, 2015), (2014, 2014), (2013, 2013), (2012, 2012), (2011, 2011), (2010, 2010), (2009, 2009), (2008, 2008), (2007, 2007), (2006, 2006), (2005, 2005), (2004, 2004), (2003, 2003), (2002, 2002), (2001, 2001), (2000, 2000), (1999, 1999), (1998, 1998), (1997, 1997), (1996, 1996), (1995, 1995), (1994, 1994), (1993, 1993), (1992, 1992), (1991, 1991), (1990, 1990), (1989, 1989), (1988, 1988), (1987, 1987), (1986, 1986), (1985, 1985), (1984, 1984), (1983, 1983), (1982, 1982), (1981, 1981), (1980, 1980), (1979, 1979), (1978, 1978), (1977, 1977), (1976, 1976), (1975, 1975), (1974, 1974), (1973, 1973), (1972, 1972), (1971, 1971), (1970, 1970), (1969, 1969), (1968, 1968), (1967, 1967), (1966, 1966), (1965, 1965), (1964, 1964), (1963, 1963), (1962, 1962), (1961, 1961), (1960, 1960), (1959, 1959), (1958, 1958), (1957, 1957), (1956, 1956), (1955, 1955), (1954, 1954), (1953, 1953), (1952, 1952), (1951, 1951), (1950, 1950), (1949, 1949), (1948, 1948), (1947, 1947), (1946, 1946), (1945, 1945), (1944, 1944), (1943, 1943), (1942, 1942), (1941, 1941), (1940, 1940), (1939, 1939), (1938, 1938), (1937, 1937), (1936, 1936), (1935, 1935), (1934, 1934), (1933, 1933), (1932, 1932), (1931, 1931), (1930, 1930), (1929, 1929), (1928, 1928), (1927, 1927), (1926, 1926), (1925, 1925), (1924, 1924), (1923, 1923), (1922, 1922), (1921, 1921), (1920, 1920), (1919, 1919), (1918, 1918), (1917, 1917), (1916, 1916), (1915, 1915), (1914, 1914), (1913, 1913), (1912, 1912), (1911, 1911), (1910, 1910), (1909, 1909), (1908, 1908), (1907, 1907), (1906, 1906), (1905, 1905), (1904, 1904), (1903, 1903), (1902, 1902), (1901, 1901), (1900, 1900), (1899, 1899), (1898, 1898), (1897, 1897), (1896, 1896), (1895, 1895), (1894, 1894), (1893, 1893), (1892, 1892), (1891, 1891), (1890, 1890)], default=None, null=True, verbose_name='Ano'), + ), + ] diff --git a/sapl/materia/migrations/0077_auto_20210209_1047.py b/sapl/materia/migrations/0077_auto_20210209_1047.py new file mode 100644 index 000000000..0bdd2c53b --- /dev/null +++ b/sapl/materia/migrations/0077_auto_20210209_1047.py @@ -0,0 +1,17 @@ +# Generated by Django 2.2.13 on 2021-02-09 13:47 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('materia', '0076_auto_20210107_1408'), + ] + + operations = [ + migrations.AlterModelOptions( + name='documentoacessorio', + options={'ordering': ('data', 'id'), 'verbose_name': 'Documento Acessório', 'verbose_name_plural': 'Documentos Acessórios'}, + ), + ] diff --git a/sapl/materia/migrations/0078_historicoproposicao.py b/sapl/materia/migrations/0078_historicoproposicao.py new file mode 100644 index 000000000..cf764b43c --- /dev/null +++ b/sapl/materia/migrations/0078_historicoproposicao.py @@ -0,0 +1,34 @@ +# Generated by Django 2.2.13 on 2021-03-02 17:17 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion +import django.utils.timezone + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('materia', '0077_auto_20210209_1047'), + ] + + operations = [ + migrations.CreateModel( + name='HistoricoProposicao', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('status', models.CharField(choices=[('E', 'Enviada'), ('R', 'Recebida'), ('T', 'Retornada'), ('D', 'Devolvida')], db_index=True, max_length=1, verbose_name='Status de Proposição')), + ('data_hora', models.DateTimeField(blank=True, db_index=True, default=django.utils.timezone.now, null=True, verbose_name='Data/Hora')), + ('observacao', models.CharField(blank=True, max_length=200, verbose_name='Observação')), + ('ip', models.CharField(blank=True, default='', max_length=60, verbose_name='IP')), + ('proposicao', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='materia.Proposicao', verbose_name='Proposição')), + ('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL, verbose_name='Usuário')), + ], + options={ + 'verbose_name': 'Histórico de Proposição', + 'verbose_name_plural': 'Histórico de Proposições', + 'ordering': ('-data_hora', '-proposicao'), + }, + ), + ] diff --git a/sapl/materia/migrations/0079_auto_20210311_1711.py b/sapl/materia/migrations/0079_auto_20210311_1711.py new file mode 100644 index 000000000..fb11c8446 --- /dev/null +++ b/sapl/materia/migrations/0079_auto_20210311_1711.py @@ -0,0 +1,23 @@ +# Generated by Django 2.2.13 on 2021-03-11 20:11 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('materia', '0078_historicoproposicao'), + ] + + operations = [ + migrations.AlterField( + model_name='orgao', + name='nome', + field=models.CharField(max_length=256, verbose_name='Nome'), + ), + migrations.AlterField( + model_name='orgao', + name='sigla', + field=models.CharField(max_length=15, verbose_name='Sigla'), + ), + ] diff --git a/sapl/materia/models.py b/sapl/materia/models.py index b94ea78ff..6e9a01fe4 100644 --- a/sapl/materia/models.py +++ b/sapl/materia/models.py @@ -74,6 +74,7 @@ class TipoProposicao(models.Model): class Meta: verbose_name = _('Tipo de Proposição') verbose_name_plural = _('Tipos de Proposições') + ordering = ('id',) def __str__(self): return self.descricao @@ -154,6 +155,7 @@ class RegimeTramitacao(models.Model): class Meta: verbose_name = _('Regime de Tramitação') verbose_name_plural = _('Regimes de Tramitação') + ordering = ('id',) def __str__(self): return self.descricao @@ -167,6 +169,7 @@ class Origem(models.Model): class Meta: verbose_name = _('Origem') verbose_name_plural = _('Origens') + ordering = ('id',) def __str__(self): return self.nome @@ -234,12 +237,20 @@ class MateriaLegislativa(models.Model): verbose_name=_('Em Tramitação?'), default=False, choices=YES_NO_CHOICES) - polemica = models.NullBooleanField( - blank=True, verbose_name=_('Matéria Polêmica?')) + polemica = models.BooleanField( + null=True, + blank=True, + default=False, + verbose_name=_('Matéria Polêmica?') + ) objeto = models.CharField( max_length=150, blank=True, verbose_name=_('Objeto')) - complementar = models.NullBooleanField( - blank=True, verbose_name=_('É Complementar?')) + complementar = models.BooleanField( + null=True, + blank=True, + default=False, + verbose_name=_('É Complementar?') + ) ementa = models.TextField(verbose_name=_('Ementa')) indexacao = models.TextField( blank=True, verbose_name=_('Indexação')) @@ -304,7 +315,7 @@ class MateriaLegislativa(models.Model): verbose_name = _('Matéria Legislativa') verbose_name_plural = _('Matérias Legislativas') unique_together = (("tipo", "numero", "ano"),) - ordering = ['-id'] + ordering = ['-ano', 'tipo', 'numero'] permissions = (("can_access_impressos", "Can access impressos"),) def __str__(self): @@ -409,6 +420,7 @@ class AcompanhamentoMateria(models.Model): class Meta: verbose_name = _('Acompanhamento de Matéria') verbose_name_plural = _('Acompanhamentos de Matéria') + ordering = ('id',) def __str__(self): if self.data_cadastro is None: @@ -440,6 +452,7 @@ class PautaReuniao(models.Model): class Meta: verbose_name = _('Matéria da Pauta') verbose_name_plural = ('Matérias da Pauta') + ordering = ('id',) def __str__(self): return _('Reunião: %(reuniao)s' @@ -466,6 +479,7 @@ class Anexada(models.Model): class Meta: verbose_name = _('Anexada') verbose_name_plural = _('Anexadas') + ordering = ('id',) def __str__(self): return _('Principal: %(materia_principal)s' @@ -502,6 +516,7 @@ class DespachoInicial(models.Model): class Meta: verbose_name = _('Despacho Inicial') verbose_name_plural = _('Despachos Iniciais') + ordering = ('id',) def __str__(self): return _('%(materia)s - %(comissao)s') % { @@ -533,11 +548,9 @@ class TipoDocumento(models.Model): @reversion.register() class DocumentoAcessorio(models.Model): materia = models.ForeignKey(MateriaLegislativa, on_delete=models.CASCADE) - tipo = models.ForeignKey(TipoDocumento, - on_delete=models.PROTECT, - verbose_name=_('Tipo')) + tipo = models.ForeignKey( + TipoDocumento, on_delete=models.PROTECT, verbose_name=_('Tipo')) nome = models.CharField(max_length=50, verbose_name=_('Nome')) - data = models.DateField(blank=True, null=True, default=None, verbose_name=_('Data')) autor = models.CharField( @@ -552,18 +565,14 @@ class DocumentoAcessorio(models.Model): verbose_name=_('Texto Integral'), storage=OverwriteStorage(), validators=[restringe_tipos_de_arquivo_txt]) - - proposicao = GenericRelation( - 'Proposicao', related_query_name='proposicao') - + proposicao = GenericRelation('Proposicao', related_query_name='proposicao') data_ultima_atualizacao = models.DateTimeField( - blank=True, null=True, - auto_now=True, - verbose_name=_('Data')) + blank=True, null=True, auto_now=True, verbose_name=_('Data')) class Meta: verbose_name = _('Documento Acessório') verbose_name_plural = _('Documentos Acessórios') + ordering = ('data', 'id') def __str__(self): return _('%(tipo)s - %(nome)s de %(data)s por %(autor)s') % { @@ -656,8 +665,8 @@ class Numeracao(models.Model): @reversion.register() class Orgao(models.Model): - nome = models.CharField(max_length=60, verbose_name=_('Nome')) - sigla = models.CharField(max_length=10, verbose_name=_('Sigla')) + nome = models.CharField(max_length=256, verbose_name=_('Nome')) + sigla = models.CharField(max_length=15, verbose_name=_('Sigla')) unidade_deliberativa = models.BooleanField( choices=YES_NO_CHOICES, verbose_name=(_('Unidade Deliberativa')), @@ -692,6 +701,7 @@ class TipoFimRelatoria(models.Model): class Meta: verbose_name = _('Tipo Fim de Relatoria') verbose_name_plural = _('Tipos Fim de Relatoria') + ordering = ('id',) def __str__(self): return self.descricao @@ -720,6 +730,7 @@ class Relatoria(models.Model): class Meta: verbose_name = _('Relatoria') verbose_name_plural = _('Relatorias') + ordering = ('id',) def __str__(self): if self.tipo_fim_relatoria: @@ -745,6 +756,7 @@ class Parecer(models.Model): class Meta: verbose_name = _('Parecer') verbose_name_plural = _('Pareceres') + ordering = ('id',) def __str__(self): return _('%(relatoria)s - %(tipo)s') % { @@ -754,42 +766,73 @@ class Parecer(models.Model): @reversion.register() class Proposicao(models.Model): - autor = models.ForeignKey(Autor, - null=True, - blank=True, - on_delete=models.PROTECT) - tipo = models.ForeignKey(TipoProposicao, on_delete=models.PROTECT, - blank=False, - null=True, - verbose_name=_('Tipo')) + autor = models.ForeignKey( + Autor, + null=True, + blank=True, + on_delete=models.PROTECT + ) + + tipo = models.ForeignKey( + TipoProposicao, + on_delete=models.PROTECT, + blank=False, + null=True, + verbose_name=_('Tipo') + ) # XXX data_envio was not null, but actual data said otherwise!!! data_envio = models.DateTimeField( - blank=False, null=True, verbose_name=_('Data de Envio')) + blank=False, + null=True, + verbose_name=_('Data de Envio') + ) + data_recebimento = models.DateTimeField( - blank=True, null=True, verbose_name=_('Data de Recebimento')) + blank=True, + null=True, + verbose_name=_('Data de Recebimento') + ) + data_devolucao = models.DateTimeField( - blank=True, null=True, verbose_name=_('Data de Devolução')) + blank=True, + null=True, + verbose_name=_('Data de Devolução') + ) descricao = models.TextField(verbose_name=_('Ementa')) + justificativa_devolucao = models.CharField( max_length=200, blank=True, - verbose_name=_('Justificativa da Devolução')) + verbose_name=_('Justificativa da Devolução') + ) - ano = models.PositiveSmallIntegerField(verbose_name=_('Ano'), - default=None, blank=True, null=True, - choices=RANGE_ANOS) + ano = models.PositiveSmallIntegerField( + verbose_name=_('Ano'), + default=None, + blank=True, + null=True, + choices=RANGE_ANOS + ) numero_proposicao = models.PositiveIntegerField( - blank=True, null=True, verbose_name=_('Número')) + blank=True, + null=True, + verbose_name=_('Número') + ) numero_materia_futuro = models.PositiveIntegerField( - blank=True, null=True, verbose_name=_('Número Matéria')) + blank=True, + null=True, + verbose_name=_('Número Matéria') + ) - hash_code = models.CharField(verbose_name=_('Código do Documento'), - max_length=200, - blank=True) + hash_code = models.CharField( + verbose_name=_('Código do Documento'), + max_length=200, + blank=True + ) """ FIXME Campo não é necessário na modelagem e implementação atual para o @@ -807,12 +850,15 @@ class Proposicao(models.Model): sua proposição ou resolva excluir. """ # ind_enviado and ind_devolvido collapsed as char field (status) - status = models.CharField(blank=True, - max_length=1, - choices=(('E', 'Enviada'), - ('R', 'Recebida'), - ('I', 'Incorporada')), - verbose_name=_('Status Proposição')) + status = models.CharField( + blank=True, + max_length=1, + choices=(('E', 'Enviada'), + ('R', 'Recebida'), + ('I', 'Incorporada')), + verbose_name=_('Status Proposição') + ) + texto_original = models.FileField( max_length=300, upload_to=materia_upload_path, @@ -820,37 +866,70 @@ class Proposicao(models.Model): null=True, verbose_name=_('Texto Original'), storage=OverwriteStorage(), - validators=[restringe_tipos_de_arquivo_txt]) + validators=[restringe_tipos_de_arquivo_txt] + ) texto_articulado = GenericRelation( - TextoArticulado, related_query_name='texto_articulado') + TextoArticulado, + related_query_name='texto_articulado' + ) materia_de_vinculo = models.ForeignKey( - MateriaLegislativa, blank=True, null=True, + MateriaLegislativa, + blank=True, + null=True, on_delete=models.CASCADE, verbose_name=_('Matéria anexadora'), - related_name=_('proposicao_set')) + related_name=_('proposicao_set') + ) content_type = models.ForeignKey( - ContentType, default=None, blank=True, null=True, - verbose_name=_('Tipo de Material Gerado')) + ContentType, + default=None, + blank=True, + null=True, + verbose_name=_('Tipo de Material Gerado'), + on_delete=models.PROTECT + ) + object_id = models.PositiveIntegerField( - blank=True, null=True, default=None) + blank=True, + null=True, + default=None + ) + conteudo_gerado_related = SaplGenericForeignKey( - 'content_type', 'object_id', verbose_name=_('Conteúdo Gerado')) + 'content_type', + 'object_id', + verbose_name=_('Conteúdo Gerado') + ) + observacao = models.TextField( - blank=True, verbose_name=_('Observação')) - cancelado = models.BooleanField(verbose_name=_('Cancelada ?'), - choices=YES_NO_CHOICES, - default=False) + blank=True, + verbose_name=_('Observação') + ) - """# Ao ser recebida, irá gerar uma nova matéria ou um documento acessorio - # de uma já existente + cancelado = models.BooleanField( + verbose_name=_('Cancelada ?'), + choices=YES_NO_CHOICES, + default=False + ) + + """ + Ao ser recebida, irá gerar uma nova matéria ou um documento acessorio de uma já existente + materia_gerada = models.ForeignKey( - MateriaLegislativa, blank=True, null=True, - related_name=_('materia_gerada')) + MateriaLegislativa, + blank=True, + null=True, + related_name=_('materia_gerada') + ) documento_gerado = models.ForeignKey( - DocumentoAcessorio, blank=True, null=True)""" + DocumentoAcessorio, + blank=True, + null=True + ) + """ user = models.ForeignKey( get_settings_auth_user_model(), @@ -859,15 +938,18 @@ class Proposicao(models.Model): null=True, blank=True ) + ip = models.CharField( verbose_name=_('IP'), max_length=60, blank=True, default='' ) + ultima_edicao = models.DateTimeField( verbose_name=_('Data e Hora da Edição'), - blank=True, null=True + blank=True, + null=True ) @property @@ -947,6 +1029,51 @@ class Proposicao(models.Model): update_fields=update_fields) +class HistoricoProposicao(models.Model): + STATUS_PROPOSICAO = Choices(('E', 'ENVIADA', _('Enviada')), + ('R', 'RECEBIDA', _('Recebida')), + ('T', 'RETORNADA', _('Retornada')), + ('D', 'DEVOLVIDA', _('Devolvida'))) + + proposicao = models.ForeignKey(Proposicao, + verbose_name=_('Proposição'), + db_index=True, + on_delete=models.CASCADE) + status = models.CharField(max_length=1, + verbose_name=_('Status de Proposição'), + db_index=True, + choices=STATUS_PROPOSICAO) + data_hora = models.DateTimeField(null=True, + blank=True, + default=timezone.now, + db_index=True, + verbose_name=_('Data/Hora')) + observacao = models.CharField(max_length=200, + blank=True, + verbose_name=_('Observação')) + user = models.ForeignKey(get_settings_auth_user_model(), + verbose_name=_('Usuário'), + on_delete=models.PROTECT, + null=True, + blank=True) + ip = models.CharField(verbose_name=_('IP'), + max_length=60, + blank=True, + default='') + + @property + def status_descricao(self): + return self.STATUS_PROPOSICAO[self.status] + + class Meta: + verbose_name = _('Histórico de Proposição') + verbose_name_plural = _('Histórico de Proposições') + ordering = ('-data_hora', '-proposicao') + + def __str__(self): + return f'{self.data_hora} - {self.STATUS_PROPOSICAO[self.status]} - {str(self.proposicao)}' + + @reversion.register() class StatusTramitacao(models.Model): INDICADOR_CHOICES = Choices(('F', 'fim', _('Fim')), @@ -1000,6 +1127,8 @@ class UnidadeTramitacao(models.Model): class Meta: verbose_name = _('Unidade de Tramitação') verbose_name_plural = _('Unidades de Tramitação') + ordering = ('orgao__nome', 'comissao__sigla', + 'parlamentar__nome_parlamentar') def __str__(self): if self.orgao and self.comissao and self.parlamentar: @@ -1098,6 +1227,7 @@ class Tramitacao(models.Model): class Meta: verbose_name = _('Tramitação') verbose_name_plural = _('Tramitações') + ordering = ('-data_tramitacao', '-id') def __str__(self): return _('%(materia)s | %(status)s | %(data)s') % { @@ -1107,12 +1237,26 @@ class Tramitacao(models.Model): class MateriaEmTramitacao(models.Model): - materia = models.ForeignKey(MateriaLegislativa, on_delete=models.DO_NOTHING) + materia = models.ForeignKey( + MateriaLegislativa, on_delete=models.DO_NOTHING) tramitacao = models.ForeignKey(Tramitacao, on_delete=models.DO_NOTHING) class Meta: managed = False db_table = "materia_materiaemtramitacao" + ordering = ('-id',) def __str__(self): return '{}/{}'.format(self.materia, self.tramitacao) + + +class ConfigEtiquetaMateriaLegislativa(models.Model): + largura = models.FloatField(default=5) + altura = models.FloatField(default=3) + + class Meta: + ordering = ('id',) + + def save(self, *args, **kwargs): + self.id = 1 + return super().save(*args, **kwargs) diff --git a/sapl/materia/tests/test_materia.py b/sapl/materia/tests/test_materia.py index e9c7ae2db..fab1742e0 100644 --- a/sapl/materia/tests/test_materia.py +++ b/sapl/materia/tests/test_materia.py @@ -1,22 +1,23 @@ from datetime import date + from django.contrib.auth import get_user_model from django.contrib.contenttypes.models import ContentType from django.core.files.uploadedfile import SimpleUploadedFile -from django.core.urlresolvers import reverse from django.db.models import Max +from django.urls import reverse from model_bakery import baker import pytest from sapl.base.models import Autor, TipoAutor, AppConfig from sapl.comissoes.models import Comissao, TipoComissao +from sapl.materia.forms import (TramitacaoForm, compara_tramitacoes_mat, + TramitacaoUpdateForm) from sapl.materia.models import (Anexada, Autoria, DespachoInicial, DocumentoAcessorio, MateriaLegislativa, Numeracao, Proposicao, RegimeTramitacao, StatusTramitacao, TipoDocumento, TipoMateriaLegislativa, TipoProposicao, Tramitacao, UnidadeTramitacao) -from sapl.materia.forms import (TramitacaoForm, compara_tramitacoes_mat, - TramitacaoUpdateForm) from sapl.norma.models import (LegislacaoCitada, NormaJuridica, TipoNormaJuridica) from sapl.parlamentares.models import Legislatura @@ -25,57 +26,57 @@ from sapl.utils import models_with_gr_for_model, lista_anexados @pytest.mark.django_db(transaction=False) def test_lista_materias_anexadas(): - tipo_materia = baker.make( - TipoMateriaLegislativa, - descricao="Tipo_Teste" - ) - regime_tramitacao = baker.make( - RegimeTramitacao, - descricao="Regime_Teste" - ) - materia_principal = baker.make( - MateriaLegislativa, - numero=20, - ano=2018, - data_apresentacao="2018-01-04", - regime_tramitacao=regime_tramitacao, - tipo=tipo_materia - ) - materia_anexada = baker.make( - MateriaLegislativa, - numero=21, - ano=2019, - data_apresentacao="2019-05-04", - regime_tramitacao=regime_tramitacao, - tipo=tipo_materia - ) - materia_anexada_anexada = baker.make( - MateriaLegislativa, - numero=22, - ano=2020, - data_apresentacao="2020-01-05", - regime_tramitacao=regime_tramitacao, - tipo=tipo_materia - ) - - baker.make( - Anexada, - materia_principal=materia_principal, - materia_anexada=materia_anexada, - data_anexacao="2019-05-11" - ) - baker.make( - Anexada, - materia_principal=materia_anexada, - materia_anexada=materia_anexada_anexada, - data_anexacao="2020-11-05" - ) - - lista = lista_anexados(materia_principal) - - assert len(lista) == 2 - assert lista[0] == materia_anexada - assert lista[1] == materia_anexada_anexada + tipo_materia = baker.make( + TipoMateriaLegislativa, + descricao="Tipo_Teste" + ) + regime_tramitacao = baker.make( + RegimeTramitacao, + descricao="Regime_Teste" + ) + materia_principal = baker.make( + MateriaLegislativa, + numero=20, + ano=2018, + data_apresentacao="2018-01-04", + regime_tramitacao=regime_tramitacao, + tipo=tipo_materia + ) + materia_anexada = baker.make( + MateriaLegislativa, + numero=21, + ano=2019, + data_apresentacao="2019-05-04", + regime_tramitacao=regime_tramitacao, + tipo=tipo_materia + ) + materia_anexada_anexada = baker.make( + MateriaLegislativa, + numero=22, + ano=2020, + data_apresentacao="2020-01-05", + regime_tramitacao=regime_tramitacao, + tipo=tipo_materia + ) + + baker.make( + Anexada, + materia_principal=materia_principal, + materia_anexada=materia_anexada, + data_anexacao="2019-05-11" + ) + baker.make( + Anexada, + materia_principal=materia_anexada, + materia_anexada=materia_anexada_anexada, + data_anexacao="2020-11-05" + ) + + lista = lista_anexados(materia_principal) + + assert len(lista) == 2 + assert lista[0] == materia_anexada + assert lista[1] == materia_anexada_anexada @pytest.mark.django_db(transaction=False) @@ -123,6 +124,7 @@ def test_lista_materias_anexadas_ciclo(): assert len(lista) == 1 assert lista[0] == materia_anexada + @pytest.mark.django_db(transaction=False) def make_unidade_tramitacao(descricao): # Cria uma comissão para ser a unidade de tramitação @@ -324,6 +326,10 @@ def test_documento_acessorio_submit(admin_client): tipo = baker.make(TipoDocumento, descricao='Teste') + arquivo = SimpleUploadedFile("file.pdf", + b'conteudo do arquivo', + content_type="application/pdf") + # Testa POST response = admin_client.post(reverse( 'sapl.materia:documentoacessorio_create', @@ -332,6 +338,7 @@ def test_documento_acessorio_submit(admin_client): 'nome': 'teste_nome', 'data_materia': '2016-03-21', 'autor': autor, + 'arquivo': arquivo, 'ementa': 'teste_ementa', 'data': '2016-03-21', 'salvar': 'salvar'}, @@ -521,7 +528,7 @@ def test_form_errors_tramitacao(admin_client): ['Este campo é obrigatório.']) assert (response.context_data['form'].errors[ 'unidade_tramitacao_destino'] == ['Este campo é obrigatório.']) - + @pytest.mark.django_db(transaction=False) def test_form_errors_relatoria(admin_client): @@ -546,9 +553,9 @@ def test_proposicao_submit(admin_client): autor = baker.make( Autor, - user=user, tipo=tipo_autor, nome='Autor Teste') + autor.operadores.add(user) file_content = 'file_content' texto = SimpleUploadedFile("file.txt", file_content.encode('UTF-8')) @@ -592,9 +599,9 @@ def test_form_errors_proposicao(admin_client): autor = baker.make( Autor, - user=user, tipo=tipo_autor, nome='Autor Teste') + autor.operadores.add(user) file_content = 'file_content' texto = SimpleUploadedFile("file.txt", file_content.encode('UTF-8')) @@ -690,42 +697,41 @@ def test_tramitacoes_materias_anexadas(admin_client): config = baker.make(AppConfig, tramitacao_materia=True) tipo_materia = baker.make( - TipoMateriaLegislativa, - descricao="Tipo_Teste" + TipoMateriaLegislativa, + descricao="Tipo_Teste" ) materia_principal = baker.make( - MateriaLegislativa, - ano=2018, - data_apresentacao="2018-01-04", - tipo=tipo_materia + MateriaLegislativa, + ano=2018, + data_apresentacao="2018-01-04", + tipo=tipo_materia ) materia_anexada = baker.make( - MateriaLegislativa, - ano=2019, - data_apresentacao="2019-05-04", - tipo=tipo_materia + MateriaLegislativa, + ano=2019, + data_apresentacao="2019-05-04", + tipo=tipo_materia ) materia_anexada_anexada = baker.make( - MateriaLegislativa, - ano=2020, - data_apresentacao="2020-01-05", - tipo=tipo_materia + MateriaLegislativa, + ano=2020, + data_apresentacao="2020-01-05", + tipo=tipo_materia ) baker.make( - Anexada, - materia_principal=materia_principal, - materia_anexada=materia_anexada, - data_anexacao="2019-05-11" + Anexada, + materia_principal=materia_principal, + materia_anexada=materia_anexada, + data_anexacao="2019-05-11" ) baker.make( - Anexada, - materia_principal=materia_anexada, - materia_anexada=materia_anexada_anexada, - data_anexacao="2020-11-05" + Anexada, + materia_principal=materia_anexada, + materia_anexada=materia_anexada_anexada, + data_anexacao="2020-11-05" ) - unidade_tramitacao_local_1 = make_unidade_tramitacao(descricao="Teste 1") unidade_tramitacao_destino_1 = make_unidade_tramitacao(descricao="Teste 2") unidade_tramitacao_destino_2 = make_unidade_tramitacao(descricao="Teste 3") @@ -736,131 +742,146 @@ def test_tramitacoes_materias_anexadas(admin_client): # Teste criação de Tramitacao form = TramitacaoForm(data={}) - form.data = {'data_tramitacao':date(2019, 5, 6), - 'unidade_tramitacao_local':unidade_tramitacao_local_1.pk, - 'unidade_tramitacao_destino':unidade_tramitacao_destino_1.pk, - 'status':status.pk, - 'urgente': False, - 'texto': "Texto de teste"} - form.instance.materia_id=materia_principal.pk + form.data = {'data_tramitacao': date(2019, 5, 6), + 'unidade_tramitacao_local': unidade_tramitacao_local_1.pk, + 'unidade_tramitacao_destino': unidade_tramitacao_destino_1.pk, + 'status': status.pk, + 'urgente': False, + 'texto': "Texto de teste"} + form.instance.materia_id = materia_principal.pk assert form.is_valid() tramitacao_principal = form.save() - tramitacao_anexada = materia_anexada.tramitacao_set.last() - tramitacao_anexada_anexada = materia_anexada_anexada.tramitacao_set.last() - - # Verifica se foram criadas as tramitações para as matérias anexadas e anexadas às anexadas - assert materia_principal.tramitacao_set.last() == tramitacao_principal - assert tramitacao_principal.materia.em_tramitacao == (tramitacao_principal.status.indicador != "F") + tramitacao_anexada = materia_anexada.tramitacao_set.order_by( + '-data_tramitacao', '-id').first() + tramitacao_anexada_anexada = materia_anexada_anexada.tramitacao_set.order_by( + '-data_tramitacao', '-id').first() + + # Verifica se foram criadas as tramitações para as matérias anexadas e + # anexadas às anexadas + assert materia_principal.tramitacao_set.order_by( + '-data_tramitacao', '-id').first() == tramitacao_principal + assert tramitacao_principal.materia.em_tramitacao == ( + tramitacao_principal.status.indicador != "F") assert compara_tramitacoes_mat(tramitacao_principal, tramitacao_anexada) assert MateriaLegislativa.objects.get(id=materia_anexada.pk).em_tramitacao \ - == (tramitacao_anexada.status.indicador != "F") - assert compara_tramitacoes_mat(tramitacao_anexada_anexada, tramitacao_principal) + == (tramitacao_anexada.status.indicador != "F") + assert compara_tramitacoes_mat( + tramitacao_anexada_anexada, tramitacao_principal) assert MateriaLegislativa.objects.get(id=materia_anexada_anexada.pk).em_tramitacao \ - == (tramitacao_anexada_anexada.status.indicador != "F") - + == (tramitacao_anexada_anexada.status.indicador != "F") # Teste Edição de Tramitacao form = TramitacaoUpdateForm(data={}) # Alterando unidade_tramitacao_destino - form.data = {'data_tramitacao':tramitacao_principal.data_tramitacao, - 'unidade_tramitacao_local':tramitacao_principal.unidade_tramitacao_local.pk, - 'unidade_tramitacao_destino':unidade_tramitacao_destino_2.pk, - 'status':tramitacao_principal.status.pk, - 'urgente': tramitacao_principal.urgente, - 'texto': tramitacao_principal.texto} + form.data = {'data_tramitacao': tramitacao_principal.data_tramitacao, + 'unidade_tramitacao_local': tramitacao_principal.unidade_tramitacao_local.pk, + 'unidade_tramitacao_destino': unidade_tramitacao_destino_2.pk, + 'status': tramitacao_principal.status.pk, + 'urgente': tramitacao_principal.urgente, + 'texto': tramitacao_principal.texto} form.instance = tramitacao_principal assert form.is_valid() tramitacao_principal = form.save() - tramitacao_anexada = materia_anexada.tramitacao_set.last() - tramitacao_anexada_anexada = materia_anexada_anexada.tramitacao_set.last() + tramitacao_anexada = materia_anexada.tramitacao_set.order_by( + '-data_tramitacao', '-id').first() + tramitacao_anexada_anexada = materia_anexada_anexada.tramitacao_set.order_by( + '-data_tramitacao', '-id').first() assert tramitacao_principal.unidade_tramitacao_destino == unidade_tramitacao_destino_2 assert tramitacao_anexada.unidade_tramitacao_destino == unidade_tramitacao_destino_2 assert tramitacao_anexada_anexada.unidade_tramitacao_destino == unidade_tramitacao_destino_2 - # Teste Remoção de Tramitacao - url = reverse('sapl.materia:tramitacao_delete', - kwargs={'pk': tramitacao_principal.pk}) - response = admin_client.post(url, {'confirmar':'confirmar'} ,follow=True) + url = reverse('sapl.materia:tramitacao_delete', + kwargs={'pk': tramitacao_principal.pk}) + response = admin_client.post(url, {'confirmar': 'confirmar'}, follow=True) assert Tramitacao.objects.filter(id=tramitacao_principal.pk).count() == 0 assert Tramitacao.objects.filter(id=tramitacao_anexada.pk).count() == 0 - assert Tramitacao.objects.filter(id=tramitacao_anexada_anexada.pk).count() == 0 - + assert Tramitacao.objects.filter( + id=tramitacao_anexada_anexada.pk).count() == 0 # Testes para quando as tramitações das anexadas divergem form = TramitacaoForm(data={}) - form.data = {'data_tramitacao':date(2019, 5, 6), - 'unidade_tramitacao_local':unidade_tramitacao_local_1.pk, - 'unidade_tramitacao_destino':unidade_tramitacao_destino_1.pk, - 'status':status.pk, - 'urgente': False, - 'texto': "Texto de teste"} - form.instance.materia_id=materia_principal.pk + form.data = {'data_tramitacao': date(2019, 5, 6), + 'unidade_tramitacao_local': unidade_tramitacao_local_1.pk, + 'unidade_tramitacao_destino': unidade_tramitacao_destino_1.pk, + 'status': status.pk, + 'urgente': False, + 'texto': "Texto de teste"} + form.instance.materia_id = materia_principal.pk assert form.is_valid() tramitacao_principal = form.save() - tramitacao_anexada = materia_anexada.tramitacao_set.last() - tramitacao_anexada_anexada = materia_anexada_anexada.tramitacao_set.last() + tramitacao_anexada = materia_anexada.tramitacao_set.order_by( + '-data_tramitacao', '-id').first() + tramitacao_anexada_anexada = materia_anexada_anexada.tramitacao_set.order_by( + '-data_tramitacao', '-id').first() form = TramitacaoUpdateForm(data={}) # Alterando unidade_tramitacao_destino - form.data = {'data_tramitacao':tramitacao_anexada.data_tramitacao, - 'unidade_tramitacao_local':tramitacao_anexada.unidade_tramitacao_local.pk, - 'unidade_tramitacao_destino':unidade_tramitacao_destino_2.pk, - 'status':tramitacao_anexada.status.pk, - 'urgente': tramitacao_anexada.urgente, - 'texto': tramitacao_anexada.texto} + form.data = {'data_tramitacao': tramitacao_anexada.data_tramitacao, + 'unidade_tramitacao_local': tramitacao_anexada.unidade_tramitacao_local.pk, + 'unidade_tramitacao_destino': unidade_tramitacao_destino_2.pk, + 'status': tramitacao_anexada.status.pk, + 'urgente': tramitacao_anexada.urgente, + 'texto': tramitacao_anexada.texto} form.instance = tramitacao_anexada assert form.is_valid() tramitacao_anexada = form.save() - tramitacao_anexada_anexada = materia_anexada_anexada.tramitacao_set.last() + tramitacao_anexada_anexada = materia_anexada_anexada.tramitacao_set.order_by( + '-data_tramitacao', '-id').first() assert tramitacao_principal.unidade_tramitacao_destino == unidade_tramitacao_destino_1 assert tramitacao_anexada.unidade_tramitacao_destino == unidade_tramitacao_destino_2 assert tramitacao_anexada_anexada.unidade_tramitacao_destino == unidade_tramitacao_destino_2 - # Editando a tramitação principal, as tramitações anexadas não devem ser editadas + # Editando a tramitação principal, as tramitações anexadas não devem ser + # editadas form = TramitacaoUpdateForm(data={}) # Alterando o texto - form.data = {'data_tramitacao':tramitacao_principal.data_tramitacao, - 'unidade_tramitacao_local':tramitacao_principal.unidade_tramitacao_local.pk, - 'unidade_tramitacao_destino':tramitacao_principal.unidade_tramitacao_destino.pk, - 'status':tramitacao_principal.status.pk, - 'urgente': tramitacao_principal.urgente, - 'texto': "Testando a alteração"} + form.data = {'data_tramitacao': tramitacao_principal.data_tramitacao, + 'unidade_tramitacao_local': tramitacao_principal.unidade_tramitacao_local.pk, + 'unidade_tramitacao_destino': tramitacao_principal.unidade_tramitacao_destino.pk, + 'status': tramitacao_principal.status.pk, + 'urgente': tramitacao_principal.urgente, + 'texto': "Testando a alteração"} form.instance = tramitacao_principal assert form.is_valid() tramitacao_principal = form.save() - tramitacao_anexada = materia_anexada.tramitacao_set.last() - tramitacao_anexada_anexada = materia_anexada_anexada.tramitacao_set.last() + tramitacao_anexada = materia_anexada.tramitacao_set.order_by( + '-data_tramitacao', '-id').first() + tramitacao_anexada_anexada = materia_anexada_anexada.tramitacao_set.order_by( + '-data_tramitacao', '-id').first() assert tramitacao_principal.texto == "Testando a alteração" assert not tramitacao_anexada.texto == "Testando a alteração" assert not tramitacao_anexada_anexada.texto == "Testando a alteração" - # Removendo a tramitação pricipal, as tramitações anexadas não devem ser removidas, pois divergiram - url = reverse('sapl.materia:tramitacao_delete', - kwargs={'pk': tramitacao_principal.pk}) - response = admin_client.post(url, {'confirmar':'confirmar'} ,follow=True) + # Removendo a tramitação pricipal, as tramitações anexadas não devem ser + # removidas, pois divergiram + url = reverse('sapl.materia:tramitacao_delete', + kwargs={'pk': tramitacao_principal.pk}) + response = admin_client.post(url, {'confirmar': 'confirmar'}, follow=True) assert Tramitacao.objects.filter(id=tramitacao_principal.pk).count() == 0 assert Tramitacao.objects.filter(id=tramitacao_anexada.pk).count() == 1 - assert Tramitacao.objects.filter(id=tramitacao_anexada_anexada.pk).count() == 1 - - # Removendo a tramitação anexada, a tramitação anexada à anexada deve ser removida - url = reverse('sapl.materia:tramitacao_delete', - kwargs={'pk': tramitacao_anexada.pk}) - response = admin_client.post(url, {'confirmar':'confirmar'} ,follow=True) + assert Tramitacao.objects.filter( + id=tramitacao_anexada_anexada.pk).count() == 1 + + # Removendo a tramitação anexada, a tramitação anexada à anexada deve ser + # removida + url = reverse('sapl.materia:tramitacao_delete', + kwargs={'pk': tramitacao_anexada.pk}) + response = admin_client.post(url, {'confirmar': 'confirmar'}, follow=True) assert Tramitacao.objects.filter(id=tramitacao_anexada.pk).count() == 0 - assert Tramitacao.objects.filter(id=tramitacao_anexada_anexada.pk).count() == 0 - + assert Tramitacao.objects.filter( + id=tramitacao_anexada_anexada.pk).count() == 0 # Agora testando para caso não seja desejado tramitar as matérias anexadas # junto com as matérias principais @@ -872,62 +893,71 @@ def test_tramitacoes_materias_anexadas(admin_client): # Teste criação de Tramitacao form = TramitacaoForm(data={}) - form.data = {'data_tramitacao':date(2019, 5, 6), - 'unidade_tramitacao_local':unidade_tramitacao_local_1.pk, - 'unidade_tramitacao_destino':unidade_tramitacao_destino_1.pk, - 'status':status.pk, - 'urgente': False, - 'texto': "Texto de teste"} - form.instance.materia_id=materia_principal.pk + form.data = {'data_tramitacao': date(2019, 5, 6), + 'unidade_tramitacao_local': unidade_tramitacao_local_1.pk, + 'unidade_tramitacao_destino': unidade_tramitacao_destino_1.pk, + 'status': status.pk, + 'urgente': False, + 'texto': "Texto de teste"} + form.instance.materia_id = materia_principal.pk assert form.is_valid() tramitacao_principal = form.save() - tramitacao_anexada = materia_anexada.tramitacao_set.last() - tramitacao_anexada_anexada = materia_anexada_anexada.tramitacao_set.last() + tramitacao_anexada = materia_anexada.tramitacao_set.order_by( + '-data_tramitacao', '-id').first() + tramitacao_anexada_anexada = materia_anexada_anexada.tramitacao_set.order_by( + '-data_tramitacao', '-id').first() # Deve ser criada tramitação apenas para a matéria principal - assert materia_principal.tramitacao_set.last() == tramitacao_principal + assert materia_principal.tramitacao_set.order_by( + '-data_tramitacao', '-id').first() == tramitacao_principal assert not tramitacao_anexada assert not tramitacao_anexada_anexada - - # Criação de uma tramitação igual para a anexada à principal para testar a edição + # Criação de uma tramitação igual para a anexada à principal para testar a + # edição form = TramitacaoForm(data={}) - form.data = {'data_tramitacao':date(2019, 5, 6), - 'unidade_tramitacao_local':unidade_tramitacao_local_1.pk, - 'unidade_tramitacao_destino':unidade_tramitacao_destino_1.pk, - 'status':status.pk, - 'urgente': False, - 'texto': "Texto de teste"} - form.instance.materia_id=materia_anexada.pk + form.data = {'data_tramitacao': date(2019, 5, 6), + 'unidade_tramitacao_local': unidade_tramitacao_local_1.pk, + 'unidade_tramitacao_destino': unidade_tramitacao_destino_1.pk, + 'status': status.pk, + 'urgente': False, + 'texto': "Texto de teste"} + form.instance.materia_id = materia_anexada.pk assert form.is_valid() tramitacao_anexada = form.save() - tramitacao_principal = materia_principal.tramitacao_set.last() - tramitacao_anexada_anexada = materia_anexada_anexada.tramitacao_set.last() - - assert materia_anexada.tramitacao_set.last() == tramitacao_anexada - assert materia_principal.tramitacao_set.all().count() == 1 + tramitacao_principal = materia_principal.tramitacao_set.order_by( + '-data_tramitacao', '-id').first() + tramitacao_anexada_anexada = materia_anexada_anexada.tramitacao_set.order_by( + '-data_tramitacao', '-id').first() + + assert materia_anexada.tramitacao_set.order_by( + '-data_tramitacao', '-id').first() == tramitacao_anexada + assert materia_principal.tramitacao_set.order_by( + '-data_tramitacao', '-id').all().count() == 1 assert compara_tramitacoes_mat(tramitacao_principal, tramitacao_anexada) assert not tramitacao_anexada_anexada # Teste Edição de Tramitacao form = TramitacaoUpdateForm(data={}) # Alterando unidade_tramitacao_destino - form.data = {'data_tramitacao':tramitacao_principal.data_tramitacao, - 'unidade_tramitacao_local':tramitacao_principal.unidade_tramitacao_local.pk, - 'unidade_tramitacao_destino':unidade_tramitacao_destino_2.pk, - 'status':tramitacao_principal.status.pk, - 'urgente': tramitacao_principal.urgente, - 'texto': tramitacao_principal.texto} + form.data = {'data_tramitacao': tramitacao_principal.data_tramitacao, + 'unidade_tramitacao_local': tramitacao_principal.unidade_tramitacao_local.pk, + 'unidade_tramitacao_destino': unidade_tramitacao_destino_2.pk, + 'status': tramitacao_principal.status.pk, + 'urgente': tramitacao_principal.urgente, + 'texto': tramitacao_principal.texto} form.instance = tramitacao_principal assert form.is_valid() tramitacao_principal = form.save() - tramitacao_anexada = materia_anexada.tramitacao_set.last() - tramitacao_anexada_anexada = materia_anexada_anexada.tramitacao_set.last() + tramitacao_anexada = materia_anexada.tramitacao_set.order_by( + '-data_tramitacao', '-id').first() + tramitacao_anexada_anexada = materia_anexada_anexada.tramitacao_set.order_by( + '-data_tramitacao', '-id').first() assert tramitacao_principal.unidade_tramitacao_destino == unidade_tramitacao_destino_2 assert tramitacao_anexada.unidade_tramitacao_destino == unidade_tramitacao_destino_1 @@ -936,18 +966,20 @@ def test_tramitacoes_materias_anexadas(admin_client): # Alterando a tramitação anexada para testar a remoção de tramitações # Alterando unidade_tramitacao_destino form = TramitacaoUpdateForm(data={}) - form.data = {'data_tramitacao':tramitacao_principal.data_tramitacao, - 'unidade_tramitacao_local':tramitacao_principal.unidade_tramitacao_local.pk, - 'unidade_tramitacao_destino':unidade_tramitacao_destino_2.pk, - 'status':tramitacao_principal.status.pk, - 'urgente': tramitacao_principal.urgente, - 'texto': tramitacao_principal.texto} + form.data = {'data_tramitacao': tramitacao_principal.data_tramitacao, + 'unidade_tramitacao_local': tramitacao_principal.unidade_tramitacao_local.pk, + 'unidade_tramitacao_destino': unidade_tramitacao_destino_2.pk, + 'status': tramitacao_principal.status.pk, + 'urgente': tramitacao_principal.urgente, + 'texto': tramitacao_principal.texto} form.instance = tramitacao_anexada assert form.is_valid() tramitacao_anexada = form.save() - tramitacao_principal = materia_principal.tramitacao_set.last() - tramitacao_anexada_anexada = materia_anexada_anexada.tramitacao_set.last() + tramitacao_principal = materia_principal.tramitacao_set.order_by( + '-data_tramitacao', '-id').first() + tramitacao_anexada_anexada = materia_anexada_anexada.tramitacao_set.order_by( + '-data_tramitacao', '-id').first() assert tramitacao_principal.unidade_tramitacao_destino == unidade_tramitacao_destino_2 assert tramitacao_anexada.unidade_tramitacao_destino == unidade_tramitacao_destino_2 @@ -955,9 +987,10 @@ def test_tramitacoes_materias_anexadas(admin_client): assert compara_tramitacoes_mat(tramitacao_principal, tramitacao_anexada) # Testando a remoção - # Removendo a tramitação pricipal, as tramitações anexadas não devem ser removidas - url = reverse('sapl.materia:tramitacao_delete', - kwargs={'pk': tramitacao_principal.pk}) - response = admin_client.post(url, {'confirmar':'confirmar'} ,follow=True) + # Removendo a tramitação pricipal, as tramitações anexadas não devem ser + # removidas + url = reverse('sapl.materia:tramitacao_delete', + kwargs={'pk': tramitacao_principal.pk}) + response = admin_client.post(url, {'confirmar': 'confirmar'}, follow=True) assert Tramitacao.objects.filter(id=tramitacao_principal.pk).count() == 0 - assert Tramitacao.objects.filter(id=tramitacao_anexada.pk).count() == 1 \ No newline at end of file + assert Tramitacao.objects.filter(id=tramitacao_anexada.pk).count() == 1 diff --git a/sapl/materia/tests/test_materia_form.py b/sapl/materia/tests/test_materia_form.py index 6e1d7b3ba..435d9dde6 100644 --- a/sapl/materia/tests/test_materia_form.py +++ b/sapl/materia/tests/test_materia_form.py @@ -82,8 +82,8 @@ def test_valida_campos_obrigatorios_materialegislativa_form(): assert errors['numero'] == [_('Este campo é obrigatório.')] assert errors['ementa'] == [_('Este campo é obrigatório.')] assert errors['regime_tramitacao'] == [_('Este campo é obrigatório.')] - - assert len(errors) == 6 + assert errors['em_tramitacao'] == [_('Este campo é obrigatório.')] + assert len(errors) == 7 @pytest.mark.django_db(transaction=False) @@ -104,8 +104,8 @@ def test_valida_campos_obrigatorios_orgao_form(): assert errors['nome'] == [_('Este campo é obrigatório.')] assert errors['sigla'] == [_('Este campo é obrigatório.')] - - assert len(errors) == 2 + assert errors['unidade_deliberativa'] == [_('Este campo é obrigatório.')] + assert len(errors) == 3 @pytest.mark.django_db(transaction=False) diff --git a/sapl/materia/tests/test_materia_urls.py b/sapl/materia/tests/test_materia_urls.py index a2f0fa667..84a421e1b 100644 --- a/sapl/materia/tests/test_materia_urls.py +++ b/sapl/materia/tests/test_materia_urls.py @@ -1,5 +1,5 @@ import pytest -from django.core.urlresolvers import reverse +from django.urls import reverse @pytest.mark.parametrize("test_input,kwargs,expected", [ diff --git a/sapl/materia/urls.py b/sapl/materia/urls.py index 05733599c..272970b82 100644 --- a/sapl/materia/urls.py +++ b/sapl/materia/urls.py @@ -25,12 +25,17 @@ from sapl.materia.views import (AcompanhamentoConfirmarView, TipoProposicaoCrud, TramitacaoCrud, TramitacaoEmLoteView, UnidadeTramitacaoCrud, proposicao_texto, recuperar_materia, - ExcluirTramitacaoEmLoteView, RetornarProposicao, + ExcluirTramitacaoEmLoteView, + RetornarProposicao, MateriaPesquisaSimplesView, - DespachoInicialMultiCreateView, get_zip_docacessorios, get_pdf_docacessorios) + DespachoInicialMultiCreateView, + get_zip_docacessorios, get_pdf_docacessorios, + configEtiquetaMateriaLegislativaCrud, + PesquisarStatusTramitacaoView, HistoricoProposicaoView) from sapl.norma.views import NormaPesquisaSimplesView from sapl.protocoloadm.views import ( - FichaPesquisaAdmView, FichaSelecionaAdmView) + FichaPesquisaAdmView, FichaSelecionaAdmView +) from .apps import AppConfig @@ -151,6 +156,8 @@ urlpatterns_proposicao = [ name='proposicao_texto'), url(r'^proposicao/(?P\d+)/retornar', RetornarProposicao.as_view(), name='retornar-proposicao'), + url(r'^proposicao/historico', HistoricoProposicaoView.as_view(), + name='historico-proposicao'), ] @@ -169,9 +176,18 @@ urlpatterns_sistema = [ url(r'^sistema/materia/unidade-tramitacao/', include(UnidadeTramitacaoCrud.get_urls())), url(r'^sistema/materia/origem/', include(OrigemCrud.get_urls())), - url(r'^sistema/materia/status-tramitacao/', - include(StatusTramitacaoCrud.get_urls())), + + url(r'^sistema/materia/status-tramitacao/', include( + StatusTramitacaoCrud.get_urls() + )), + url( + r'^sistema/materia/pesquisar-status-tramitacao/', + PesquisarStatusTramitacaoView.as_view(), + name="pesquisar_statustramitacao" + ), + url(r'^sistema/materia/orgao/', include(OrgaoCrud.get_urls())), + url(r'^sistema/materia/config-etiqueta-materia-legislativas/',configEtiquetaMateriaLegislativaCrud, name="configEtiquetaMateriaLegislativaCrud"), ] urlpatterns = urlpatterns_impressos + urlpatterns_materia + \ diff --git a/sapl/materia/views.py b/sapl/materia/views.py index 773ca0eaf..3a350441d 100644 --- a/sapl/materia/views.py +++ b/sapl/materia/views.py @@ -1,44 +1,40 @@ -import itertools +from datetime import datetime +from io import BytesIO import logging import os -import sapl -import shutil -import tempfile -import weasyprint -import time - -from crispy_forms.layout import HTML -from datetime import datetime from random import choice +import shutil from string import ascii_letters, digits -from datetime import datetime -from PyPDF4 import PdfFileReader, PdfFileMerger +import time import zipfile +from PyPDF4 import PdfFileReader, PdfFileMerger +from crispy_forms.layout import HTML from django.conf import settings from django.contrib import messages from django.contrib.auth.decorators import permission_required from django.contrib.auth.mixins import PermissionRequiredMixin from django.core.exceptions import ObjectDoesNotExist, MultipleObjectsReturned, ValidationError -from django.core.urlresolvers import reverse from django.db.models import Max, Q from django.http import HttpResponse, JsonResponse from django.http.response import Http404, HttpResponseRedirect from django.shortcuts import get_object_or_404, redirect -from django.template import loader, RequestContext +from django.shortcuts import render +from django.template import loader +from django.urls import reverse from django.utils import formats, timezone from django.utils.translation import ugettext_lazy as _ from django.views.generic import CreateView, ListView, TemplateView, UpdateView from django.views.generic.base import RedirectView from django.views.generic.edit import FormView - from django_filters.views import FilterView +import weasyprint +import sapl from sapl.base.email_utils import do_envia_email_confirmacao from sapl.base.models import Autor, CasaLegislativa, AppConfig as BaseAppConfig -from sapl.base.signals import tramitacao_signal, post_delete_signal, post_save_signal -from sapl.comissoes.models import Comissao, Participacao, Composicao +from sapl.comissoes.models import Participacao from sapl.compilacao.models import STATUS_TA_IMMUTABLE_RESTRICT, STATUS_TA_PRIVATE from sapl.compilacao.views import IntegracaoTaView from sapl.crispy_layout_mixin import form_actions, SaplFormHelper, SaplFormLayout @@ -48,7 +44,7 @@ from sapl.materia.forms import (AnexadaForm, AutoriaForm, AutoriaMultiCreateForm ConfirmarProposicaoForm, DevolverProposicaoForm, DespachoInicialCreateForm, LegislacaoCitadaForm, MateriaPesquisaSimplesForm, OrgaoForm, ProposicaoForm, - TipoProposicaoForm, TramitacaoForm, TramitacaoUpdateForm) + TipoProposicaoForm, TramitacaoForm, TramitacaoUpdateForm, ConfigEtiquetaMateriaLegislativaForms) from sapl.norma.models import LegislacaoCitada from sapl.parlamentares.models import Legislatura from sapl.protocoloadm.models import Protocolo @@ -56,23 +52,27 @@ from sapl.settings import MAX_DOC_UPLOAD_SIZE, MEDIA_ROOT from sapl.utils import (autor_label, autor_modal, gerar_hash_arquivo, get_base_url, get_client_ip, get_mime_type_from_file_extension, lista_anexados, mail_service_configured, montar_row_autor, SEPARADOR_HASH_PROPOSICAO, - show_results_filter_set, YES_NO_CHOICES,get_tempfile_dir) + show_results_filter_set, get_tempfile_dir, + google_recaptcha_configured) from .forms import (AcessorioEmLoteFilterSet, AcompanhamentoMateriaForm, AnexadaEmLoteFilterSet, AdicionarVariasAutoriasFilterSet, - compara_tramitacoes_mat, DespachoInicialForm, DocumentoAcessorioForm, - EtiquetaPesquisaForm, ExcluirTramitacaoEmLote, FichaPesquisaForm, + compara_tramitacoes_mat, DespachoInicialForm, + DocumentoAcessorioForm, EtiquetaPesquisaForm, + ExcluirTramitacaoEmLote, FichaPesquisaForm, FichaSelecionaForm, filtra_tramitacao_destino, - filtra_tramitacao_destino_and_status, filtra_tramitacao_status, - MateriaAssuntoForm, MateriaLegislativaFilterSet, MateriaLegislativaForm, + filtra_tramitacao_destino_and_status, + filtra_tramitacao_status, MateriaAssuntoForm, + MateriaLegislativaFilterSet, MateriaLegislativaForm, MateriaSimplificadaForm, PrimeiraTramitacaoEmLoteFilterSet, - ReceberProposicaoForm, RelatoriaForm, TramitacaoEmLoteFilterSet, - TramitacaoEmLoteForm, UnidadeTramitacaoForm) + ReceberProposicaoForm, RelatoriaForm, + TramitacaoEmLoteFilterSet, TramitacaoEmLoteForm, + UnidadeTramitacaoForm, StatusTramitacaoFilterSet) from .models import (AcompanhamentoMateria, Anexada, AssuntoMateria, Autoria, DespachoInicial, DocumentoAcessorio, MateriaAssunto, MateriaLegislativa, Numeracao, Orgao, Origem, Proposicao, RegimeTramitacao, Relatoria, StatusTramitacao, TipoDocumento, TipoFimRelatoria, TipoMateriaLegislativa, TipoProposicao, - Tramitacao, UnidadeTramitacao) + Tramitacao, UnidadeTramitacao, ConfigEtiquetaMateriaLegislativa, HistoricoProposicao) AssuntoMateriaCrud = CrudAux.build(AssuntoMateria, 'assunto_materia') @@ -104,7 +104,10 @@ def proposicao_texto(request, pk): if proposicao.texto_original: if (not proposicao.data_recebimento and - proposicao.autor.user_id != request.user.id): + not proposicao.autor.operadores.filter( + id=request.user.id + ).exists() + ): logger.error("user=" + username + ". Usuário ({}) não tem permissão para acessar o texto original." .format(request.user.id)) messages.error(request, _( @@ -227,16 +230,16 @@ class CriarProtocoloMateriaView(CreateView): return context def form_valid(self, form): - materia = form.save() + materia = form.save() materia.user = self.request.user materia.ip = get_client_ip(self.request) - + tz = timezone.get_current_timezone() materia.ultima_edicao = tz.localize(datetime.now()) - + materia.save() - + username = self.request.user.username try: @@ -318,8 +321,9 @@ class ProposicaoTaView(IntegracaoTaView): proposicao = get_object_or_404(self.model, pk=kwargs['pk']) - if not proposicao.data_envio and\ - request.user != proposicao.autor.user: + if not proposicao.data_envio and \ + not proposicao.autor.operadores.filter( + id=request.user.id).exists(): raise Http404() return IntegracaoTaView.get(self, request, *args, **kwargs) @@ -334,6 +338,9 @@ def recuperar_materia(request): tipo = TipoMateriaLegislativa.objects.get(pk=request.GET['tipo']) ano = request.GET.get('ano', '') + if not (tipo and ano): + return JsonResponse({'numero': '', 'ano': ''}) + numeracao = None try: logger.debug("user=" + username + @@ -376,7 +383,70 @@ def recuperar_materia(request): return response -StatusTramitacaoCrud = CrudAux.build(StatusTramitacao, 'status_tramitacao') +class StatusTramitacaoCrud(CrudAux): + model = StatusTramitacao + + class DeleteView(CrudAux.DeleteView): + def get_success_url(self): + return reverse('sapl.materia:pesquisar_statustramitacao') + + +class PesquisarStatusTramitacaoView(FilterView): + model = StatusTramitacao + filterset_class = StatusTramitacaoFilterSet + paginate_by = 10 + + def get_filterset_kwargs(self, filterset_class): + super(PesquisarStatusTramitacaoView, self).get_filterset_kwargs( + filterset_class + ) + + return ({ + "data": self.request.GET or None, + "queryset": self.get_queryset().order_by("sigla").distinct() + }) + + def get_context_data(self, **kwargs): + context = super(PesquisarStatusTramitacaoView, self).get_context_data( + **kwargs + ) + + paginator = context["paginator"] + page_obj = context["page_obj"] + + context.update({ + "page_range": make_pagination( + page_obj.number, paginator.num_pages + ), + "NO_ENTRIES_MSG": "Nenhum status de tramitacao encontrado!", + "title": _("Status de Tramitação") + }) + + return context + + def get(self, request, *args, **kwargs): + super(PesquisarStatusTramitacaoView, self).get(request) + + data = self.filterset.data + + url = '' + + if data: + url = '&' + str(self.request.META["QUERY_STRING"]) + if url.startswith("&page"): + ponto_comeco = url.find("descricao=") - 1 + url = url[ponto_comeco:] + + context = self.get_context_data( + filter=self.filterset, object_list=self.object_list, + filter_url=url, numero_res=len(self.object_list) + ) + + context["show_results"] = show_results_filter_set( + self.request.GET.copy() + ) + + return self.render_to_response(context) class OrgaoCrud(CrudAux): @@ -591,7 +661,7 @@ class RetornarProposicao(UpdateView): "user=" + username + ". Objeto Proposicao com id={} não encontrado.".format(kwargs['pk'])) raise Http404() - if p.autor.user != request.user: + if not p.autor.operadores.filter(id=request.user.id).exists(): self.logger.error( "user=" + username + ". Usuário ({}) sem acesso a esta opção.".format(request.user)) messages.error( @@ -611,6 +681,12 @@ class ConfirmarProposicao(PermissionRequiredForAppCrudMixin, UpdateView): form_class = ConfirmarProposicaoForm, DevolverProposicaoForm logger = logging.getLogger(__name__) + def get_initial(self): + initial = super().get_initial() + initial['ip'] = get_client_ip(self.request) + initial['user'] = self.request.user + return initial + def get_success_url(self): msgs = self.object.results['messages'] @@ -733,7 +809,7 @@ class UnidadeTramitacaoCrud(CrudAux): class ProposicaoCrud(Crud): model = Proposicao help_topic = 'proposicao' - container_field = 'autor__user' + container_field = 'autor__operadores' class BaseMixin(Crud.BaseMixin): list_field_names = [ @@ -784,7 +860,7 @@ class ProposicaoCrud(Crud): context['title'] = '%s (%s)' % ( self.object, self.object.autor) - + context['user'] = self.request.user context['proposicao'] = Proposicao.objects.get( pk=self.kwargs['pk'] @@ -802,14 +878,15 @@ class ProposicaoCrud(Crud): p = Proposicao.objects.get(id=kwargs['pk']) msg_error = '' - if p and p.autor.user == user: + if p and p.autor.operadores.filter(id=request.user.id).exists(): if action == 'send': if p.data_envio and p.data_recebimento: msg_error = _('Proposição já foi enviada e recebida.') elif p.data_envio: msg_error = _('Proposição já foi enviada.') elif not p.texto_original and not p.texto_articulado.exists(): - msg_error = _('Proposição não possui nenhum tipo de Texto associado.') + msg_error = _( + 'Proposição não possui nenhum tipo de Texto associado.') else: if p.texto_articulado.exists(): ta = p.texto_articulado.first() @@ -817,7 +894,8 @@ class ProposicaoCrud(Crud): ta.editing_locked = True ta.save() - receber_recibo = BaseAppConfig.attr('receber_recibo_proposicao') + receber_recibo = BaseAppConfig.attr( + 'receber_recibo_proposicao') if not receber_recibo: ta = p.texto_articulado.first() @@ -826,8 +904,14 @@ class ProposicaoCrud(Crud): p.data_devolucao = None p.data_envio = timezone.now() p.save() - - messages.success(request, _('Proposição enviada com sucesso.')) + HistoricoProposicao.objects.create( + proposicao=p, + status='E', + ip=get_client_ip(self.request), + user=self.request.user) + + messages.success(request, _( + 'Proposição enviada com sucesso.')) try: self.logger.debug("User={}. Tentando obter número do objeto MateriaLegislativa " "com atributos tipo={} e ano={}." @@ -837,18 +921,21 @@ class ProposicaoCrud(Crud): numero = p.numero_materia_futuro else: numero = MateriaLegislativa.objects.filter(tipo=p.tipo.tipo_conteudo_related, - ano=p.ano).last().numero + 1 + ano=p.ano).order_by('numero').last().numero + 1 messages.success(request, _("{}: nº {} de {}
        Atenção! Este número é apenas um provável " "número que pode não corresponder com a realidade" .format(p.tipo, numero, p.ano))) except ValueError as e: - self.logger.warning("User=" + username + ". " + str(e)) + self.logger.warning( + "User=" + username + ". " + str(e)) pass except AttributeError as e: - self.logger.warning("User=" + username + ". " + str(e)) + self.logger.warning( + "User=" + username + ". " + str(e)) pass except TypeError as e: - self.logger.warning("User=" + username + ". " + str(e)) + self.logger.warning( + "User=" + username + ". " + str(e)) pass elif action == 'return': @@ -859,10 +946,17 @@ class ProposicaoCrud(Crud): elif p.data_recebimento: self.logger.warning("User={}. Proposição (numero={}) já foi recebida, " "não é possível retorná-la.".format(username, p.numero_proposicao)) - msg_error = _('Proposição já foi recebida, não é possível retorná-la.') + msg_error = _( + 'Proposição já foi recebida, não é possível retorná-la.') else: p.data_envio = None p.save() + HistoricoProposicao.objects.create( + proposicao=p, + status='T', + ip=get_client_ip(self.request), + user=self.request.user) + if p.texto_articulado.exists(): ta = p.texto_articulado.first() ta.privacidade = STATUS_TA_PRIVATE @@ -870,7 +964,8 @@ class ProposicaoCrud(Crud): ta.save() self.logger.info("User={}. Proposição (numero={}) Retornada com sucesso." .format(username, p.numero_proposicao)) - messages.success(request, _('Proposição Retornada com sucesso.')) + messages.success(request, _( + 'Proposição Retornada com sucesso.')) if msg_error: messages.error(request, msg_error) @@ -881,7 +976,8 @@ class ProposicaoCrud(Crud): def dispatch(self, request, *args, **kwargs): username = request.user.username try: - self.logger.debug("User={}. Tentando obter objeto Proposicao com pk={}".format(username, kwargs['pk'])) + self.logger.debug("User={}. Tentando obter objeto Proposicao com pk={}".format( + username, kwargs['pk'])) p = Proposicao.objects.get(id=kwargs['pk']) except Exception as e: self.logger.warning("User={}. Erro ao obter proposicao com pk={}. Retornando 404. {}" @@ -891,7 +987,7 @@ class ProposicaoCrud(Crud): if not self.has_permission(): return self.handle_no_permission() - if p.autor.user != request.user: + if not p.autor.operadores.filter(id=request.user.id).exists(): if not p.data_envio and not p.data_devolucao: raise Http404() @@ -912,15 +1008,18 @@ class ProposicaoCrud(Crud): logger = logging.getLogger(__name__) def _action_is_valid(self, request, *args, **kwargs): - proposicao = Proposicao.objects.filter(id=kwargs['pk']).values_list('data_envio', 'data_recebimento') + proposicao = Proposicao.objects.filter( + id=kwargs['pk']).values_list('data_envio', 'data_recebimento') username = request.user.username if proposicao: + msg = '' if proposicao[0][0] and proposicao[0][1]: self.logger.warning("User={}. Proposição (id={}) já foi enviada e recebida." "Não pode mais ser excluida.".format(username, kwargs['pk'])) - msg = _('Proposição já foi enviada e recebida. Não pode mais ser excluida.') + msg = _( + 'Proposição já foi enviada e recebida. Não pode mais ser excluida.') elif proposicao[0][0] and not proposicao[0][1]: self.logger.warning("""\ User={}. Proposição (id={}) já foi enviada, mas ainda não recebida pelo protocolo. \ @@ -969,11 +1068,12 @@ class ProposicaoCrud(Crud): self.object.ultima_edicao = tz.localize(datetime.now()) self.object.save() break - + return super().form_valid(form) def _action_is_valid(self, request, *args, **kwargs): - proposicao = Proposicao.objects.filter(id=kwargs['pk']).values_list('data_envio', 'data_recebimento') + proposicao = Proposicao.objects.filter( + id=kwargs['pk']).values_list('data_envio', 'data_recebimento') username = request.user.username @@ -982,7 +1082,8 @@ class ProposicaoCrud(Crud): if proposicao[0][0] and proposicao[0][1]: self.logger.warning('User={}. Proposição (id={}) já foi enviada e recebida. ' 'Não pode mais ser editada'.format(username, kwargs['pk'])) - msg = _('Proposição já foi enviada e recebida. Não pode mais ser editada') + msg = _( + 'Proposição já foi enviada e recebida. Não pode mais ser editada') elif proposicao[0][0] and not proposicao[0][1]: self.logger.warning("""\ User={}. Proposição (id={}) já foi enviada, mas ainda não recebida pelo protocolo. \ @@ -1020,7 +1121,7 @@ class ProposicaoCrud(Crud): initial['user'] = self.request.user initial['ip'] = get_client_ip(self.request) - + tz = timezone.get_current_timezone() initial['ultima_edicao'] = tz.localize(datetime.now()) @@ -1061,14 +1162,17 @@ class ProposicaoCrud(Crud): if obj.data_recebimento is None: obj.data_recebimento = 'Não recebida' if obj.data_envio else 'Não enviada' else: - obj.data_recebimento = timezone.localtime(obj.data_recebimento) - obj.data_recebimento = formats.date_format(obj.data_recebimento, "DATETIME_FORMAT") + obj.data_recebimento = timezone.localtime( + obj.data_recebimento) + obj.data_recebimento = formats.date_format( + obj.data_recebimento, "DATETIME_FORMAT") if obj.data_envio is None: obj.data_envio = 'Em elaboração...' else: obj.data_envio = timezone.localtime(obj.data_envio) - obj.data_envio = formats.date_format(obj.data_envio, "DATETIME_FORMAT") + obj.data_envio = formats.date_format( + obj.data_envio, "DATETIME_FORMAT") return [self._as_row(obj) for obj in object_list] @@ -1085,7 +1189,7 @@ class ReciboProposicaoView(TemplateView): return (Proposicao.objects.filter( id=self.kwargs['pk'], - autor__user_id=self.request.user.id).exists()) + autor__operadores=self.request.user).exists()) def get_context_data(self, **kwargs): context = super(ReciboProposicaoView, self).get_context_data( @@ -1131,6 +1235,35 @@ class ReciboProposicaoView(TemplateView): kwargs={'pk': proposicao.pk})) +class HistoricoProposicaoView(PermissionRequiredMixin, ListView): + logger = logging.getLogger(__name__) + template_name = "materia/historico_proposicao.html" + ordering = ['-data_hora'] + paginate_by = 10 + model = HistoricoProposicao + permission_required = ('materia.detail_proposicao', ) + + def get_queryset(self): + qs = super().get_queryset() + user = self.request.user + if not user.is_superuser: + autores = Autor.objects.filter(user=user) + qs = qs.filter(proposicao__autor__in=autores) + return qs + + def get_context_data(self, **kwargs): + context = super(HistoricoProposicaoView, + self).get_context_data(**kwargs) + paginator = context['paginator'] + page_obj = context['page_obj'] + context['page_range'] = make_pagination( + page_obj.number, paginator.num_pages) + context['NO_ENTRIES_MSG'] = 'Nenhuma proposição' + if self.request.user.is_superuser: + context['subnav_template_name'] = 'materia/subnav_prop.yaml' + return context + + class RelatoriaCrud(MasterDetailCrud): model = Relatoria parent_field = 'materia' @@ -1145,16 +1278,30 @@ class RelatoriaCrud(MasterDetailCrud): def get_initial(self): materia = MateriaLegislativa.objects.get(id=self.kwargs['pk']) - loc_atual = Tramitacao.objects.filter(materia=materia).last() + loc_atual = Tramitacao.objects.\ + filter(materia=materia).order_by( + '-data_tramitacao', '-id').first() if loc_atual is None: - localizacao = 0 + localizacao = -1 else: comissao = loc_atual.unidade_tramitacao_destino.comissao if comissao: localizacao = comissao.pk else: localizacao = 0 + if loc_atual.unidade_tramitacao_destino.orgao: + # 0 = Orgão + tipo_unidade_tramitacao_destino = "Orgão" + elif loc_atual.unidade_tramitacao_destino.parlamentar: + # 1 = Parlamentar + tipo_unidade_tramitacao_destino = "Parlamentar" + + unidade_tramitacao_destino = loc_atual.unidade_tramitacao_destino + return { + 'comissao': localizacao, 'tipo_unidade_tramitacao_destino': tipo_unidade_tramitacao_destino, + 'unidade_tramitacao_destino': unidade_tramitacao_destino + } return {'comissao': localizacao} @@ -1206,10 +1353,8 @@ class TramitacaoCrud(MasterDetailCrud): def get_initial(self): initial = super(CreateView, self).get_initial() - local = MateriaLegislativa.objects.get( - pk=self.kwargs['pk']).tramitacao_set.order_by( - '-data_tramitacao', - '-id').first() + local = MateriaLegislativa.objects.get(pk=self.kwargs['pk'])\ + .tramitacao_set.order_by('-data_tramitacao', '-id').first() if local: initial['unidade_tramitacao_local' @@ -1232,7 +1377,6 @@ class TramitacaoCrud(MasterDetailCrud): ultima_tramitacao = Tramitacao.objects.filter( materia_id=self.kwargs['pk']).order_by( '-data_tramitacao', - '-timestamp', '-id').first() # TODO: Esta checagem foi inserida na issue #2027, mas é mesmo @@ -1261,28 +1405,6 @@ class TramitacaoCrud(MasterDetailCrud): return context - def form_valid(self, form): - - self.object = form.save() - username = self.request.user.username - - try: - self.logger.debug("user=" + username + ". Tentando enviar Tramitacao (sender={}, post={}, request={})." - .format(Tramitacao, self.object, self.request)) - tramitacao_signal.send(sender=Tramitacao, - post=self.object, - request=self.request) - except Exception as e: - msg = _('Tramitação criada, mas e-mail de acompanhamento ' - 'de matéria não enviado. Há problemas na configuração ' - 'do e-mail.') - self.logger.warning('user=' + username + '. Tramitação criada, mas e-mail de acompanhamento ' - 'de matéria não enviado. Há problemas na configuração ' - 'do e-mail. ' + str(e)) - messages.add_message(self.request, messages.WARNING, msg) - return HttpResponseRedirect(self.get_success_url()) - return super().form_valid(form) - class UpdateView(MasterDetailCrud.UpdateView): form_class = TramitacaoUpdateForm logger = logging.getLogger(__name__) @@ -1291,7 +1413,7 @@ class TramitacaoCrud(MasterDetailCrud): def get_initial(self): initial = super(UpdateView, self).get_initial() - + initial['ip'] = get_client_ip(self.request) initial['user'] = self.request.user @@ -1300,27 +1422,6 @@ class TramitacaoCrud(MasterDetailCrud): return initial - def form_valid(self, form): - self.object = form.save() - user = self.request.user - - try: - self.logger.debug("user=" + user.username + ". Tentando enviar Tramitacao (sender={}, post={}, request={}" - .format(Tramitacao, self.object, self.request)) - tramitacao_signal.send(sender=Tramitacao, - post=self.object, - request=self.request) - except Exception: - msg = _('Tramitação atualizada, mas e-mail de acompanhamento ' - 'de matéria não enviado. Há problemas na configuração ' - 'do e-mail.') - self.logger.warning('user=' + user.username + '. Tramitação atualizada, mas e-mail de acompanhamento ' - 'de matéria não enviado. Há problemas na configuração ' - 'do e-mail.') - messages.add_message(self.request, messages.WARNING, msg) - return HttpResponseRedirect(self.get_success_url()) - return super().form_valid(form) - class ListView(MasterDetailCrud.ListView): def get_queryset(self): @@ -1335,15 +1436,14 @@ class TramitacaoCrud(MasterDetailCrud): logger = logging.getLogger(__name__) def delete(self, request, *args, **kwargs): - tramitacao = Tramitacao.objects.get(id=self.kwargs['pk']) + tramitacao = Tramitacao.objects.select_related( + 'materia').get(id=self.kwargs['pk']) materia = tramitacao.materia url = reverse('sapl.materia:tramitacao_list', kwargs={'pk': materia.id}) ultima_tramitacao = materia.tramitacao_set.order_by( - '-data_tramitacao', - '-timestamp', - '-id').first() + '-data_tramitacao', '-id').first() if tramitacao.pk != ultima_tramitacao.pk: username = request.user.username @@ -1354,29 +1454,43 @@ class TramitacaoCrud(MasterDetailCrud): messages.add_message(request, messages.ERROR, msg) return HttpResponseRedirect(url) else: - tramitacoes_deletar = [tramitacao] - if materia.tramitacao_set.count() == 0: + + # recupera últimas duas tramitacoes + penultima_tramitacao = materia.tramitacao_set.order_by( + '-data_tramitacao', '-id').exclude( + id=ultima_tramitacao.id).first() + if not penultima_tramitacao or \ + penultima_tramitacao.status.indicador == "F": materia.em_tramitacao = False - materia.save() + else: + materia.em_tramitacao = True + materia.save() + + tramitacoes_deletar = [tramitacao.id] + tramitar_anexadas = sapl.base.models.AppConfig.attr( 'tramitacao_materia') if tramitar_anexadas: - mat_anexadas = lista_anexados(materia) - for ma in mat_anexadas: - tram_anexada = ma.tramitacao_set.last() - if compara_tramitacoes_mat(tram_anexada, tramitacao): - tramitacoes_deletar.append(tram_anexada) - if ma.tramitacao_set.count() == 0: - ma.em_tramitacao = False - ma.save() - Tramitacao.objects.filter(id__in=[t.id for t in tramitacoes_deletar]).delete() - - # TODO: otimizar para passar a lista de matérias - for tramitacao in tramitacoes_deletar: - post_delete_signal.send(sender=None, - instance=tramitacao, - operation='C', - request=self.request) + materias_anexadas = lista_anexados(materia) + for materia in materias_anexadas: + ultima_tramitacao = materia.tramitacao_set.order_by( + '-data_tramitacao', '-id').first() + if compara_tramitacoes_mat(ultima_tramitacao, + tramitacao): + tramitacoes_deletar.append(ultima_tramitacao.id) + # recupera últimas duas tramitacoes + penultima_tramitacao = materia.tramitacao_set.order_by( + '-data_tramitacao', '-id').exclude( + id=ultima_tramitacao.id).first() + if not penultima_tramitacao or \ + penultima_tramitacao.status.indicador == "F": + materia.em_tramitacao = False + else: + materia.em_tramitacao = True + # Atualiza status 'em_tramitacao' + MateriaLegislativa.objects.\ + bulk_update(materias_anexadas, ['em_tramitacao']) + Tramitacao.objects.filter(id__in=tramitacoes_deletar).delete() return HttpResponseRedirect(url) @@ -1386,7 +1500,6 @@ class TramitacaoCrud(MasterDetailCrud): def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) - context['user'] = self.request.user return context @@ -1732,10 +1845,10 @@ class MateriaLegislativaCrud(Crud): if dict_objeto_antigo[atributo] != dict_objeto_novo[atributo]: self.object.user = self.request.user self.object.ip = get_client_ip(self.request) - + tz = timezone.get_current_timezone() self.object.ultima_edicao = tz.localize(datetime.now()) - + self.object.save() break @@ -1943,6 +2056,12 @@ class MateriaLegislativaPesquisaView(FilterView): "autoria_set__autor", "tipo",) + # retorna somente MateriaLegislativa sem MateriaAssunto se True + materia_assunto_null = self.request.GET.get( + "materiaassunto_null", False) + if materia_assunto_null: + qs = qs.filter(materiaassunto__isnull=True) + if 'o' in self.request.GET and not self.request.GET['o']: qs = qs.order_by('-ano', 'tipo__sigla', '-numero') @@ -1995,6 +2114,10 @@ class AcompanhamentoMateriaView(CreateView): messages.error(request, _('Serviço de Acompanhamento de ' 'Matérias não foi configurado')) return redirect('/') + if not google_recaptcha_configured(): + self.logger.warning(_('Google Recaptcha não configurado!')) + messages.error(request, _('Google Recaptcha não configurado!')) + return redirect(request.META.get('HTTP_REFERER', '/')) pk = self.kwargs['pk'] materia = MateriaLegislativa.objects.get(id=pk) @@ -2011,6 +2134,11 @@ class AcompanhamentoMateriaView(CreateView): 'Matérias não foi configurado')) return redirect('/') + if not google_recaptcha_configured(): + self.logger.warning(_('Google Recaptcha não configurado!')) + messages.error(request, _('Google Recaptcha não configurado!')) + return redirect(request.META.get('HTTP_REFERER', '/')) + form = AcompanhamentoMateriaForm(request.POST) pk = self.kwargs['pk'] materia = MateriaLegislativa.objects.get(id=pk) @@ -2155,8 +2283,8 @@ class DocumentoAcessorioEmLoteView(PermissionRequiredMixin, FilterView): if request.FILES['arquivo'].size > MAX_DOC_UPLOAD_SIZE: msg = _("O arquivo Anexo de Texto Integral deve ser menor que {0:.1f} MB, \ - o tamanho atual desse arquivo é {1:.1f} MB" \ - .format((MAX_DOC_UPLOAD_SIZE/1024)/1024, (request.FILES['arquivo'].size/1024)/1024)) + o tamanho atual desse arquivo é {1:.1f} MB" + .format((MAX_DOC_UPLOAD_SIZE / 1024) / 1024, (request.FILES['arquivo'].size / 1024) / 1024)) messages.add_message(request, messages.ERROR, msg) return self.get(request, self.kwargs) @@ -2347,7 +2475,6 @@ class PrimeiraTramitacaoEmLoteView(PermissionRequiredMixin, FilterView): logger = logging.getLogger(__name__) - def get_context_data(self, **kwargs): context = super(PrimeiraTramitacaoEmLoteView, self).get_context_data(**kwargs) @@ -2369,8 +2496,8 @@ class PrimeiraTramitacaoEmLoteView(PermissionRequiredMixin, FilterView): if self.primeira_tramitacao: context['title'] = _('Primeira Tramitação em Lote') # Pega somente documentos que não possuem tramitação - context['object_list'] = [obj for obj in context['object_list'] - if obj.tramitacao_set.all().count() == 0] + context['object_list'] = [obj for obj in context['object_list'] + if obj.tramitacao_set.order_by('-data_tramitacao', '-id').all().count() == 0] else: context['title'] = _('Tramitação em Lote') context['form'].fields['unidade_tramitacao_local'].initial = UnidadeTramitacao.objects.get( @@ -2385,9 +2512,9 @@ class PrimeiraTramitacaoEmLoteView(PermissionRequiredMixin, FilterView): def post(self, request, *args, **kwargs): user = request.user ip = get_client_ip(request) - + tz = timezone.get_current_timezone() - ultima_edicao = tz.localize(datetime.now()) + ultima_edicao = tz.localize(datetime.now()) materias_ids = request.POST.getlist('materias') if not materias_ids: @@ -2395,34 +2522,34 @@ class PrimeiraTramitacaoEmLoteView(PermissionRequiredMixin, FilterView): messages.add_message(request, messages.ERROR, msg) return self.get(request, self.kwargs) - form = TramitacaoEmLoteForm(request.POST, - initial= {'materias': materias_ids, - 'user': user, 'ip':ip, - 'ultima_edicao': ultima_edicao}) + form = TramitacaoEmLoteForm(request.POST, + initial={'materias': materias_ids, + 'user': user, 'ip': ip, + 'ultima_edicao': ultima_edicao}) if form.is_valid(): form.save() msg = _('Tramitação completa.') - self.logger.info('user=' + user.username + '. Tramitação completa.') + self.logger.info('user=' + user.username + + '. Tramitação completa.') messages.add_message(request, messages.SUCCESS, msg) return self.get_success_url() return self.form_invalid(form) - def get_success_url(self): return HttpResponseRedirect(reverse('sapl.materia:primeira_tramitacao_em_lote')) - def form_invalid(self, form, *args, **kwargs): for key, erros in form.errors.items(): - if not key=='__all__': - [messages.add_message(self.request, messages.ERROR, form.fields[key].label + ": " + e) for e in erros] + if not key == '__all__': + [messages.add_message( + self.request, messages.ERROR, form.fields[key].label + ": " + e) for e in erros] else: - [messages.add_message(self.request, messages.ERROR, e) for e in erros] - return self.get(self.request, kwargs, {'form':form}) - + [messages.add_message(self.request, messages.ERROR, e) + for e in erros] + return self.get(self.request, kwargs, {'form': form}) class TramitacaoEmLoteView(PrimeiraTramitacaoEmLoteView): @@ -2623,7 +2750,7 @@ class ExcluirTramitacaoEmLoteView(PermissionRequiredMixin, FormView): status=form.cleaned_data['status']) for tramitacao in tramitacao_set: materia = tramitacao.materia - if tramitacao == materia.tramitacao_set.last(): + if tramitacao == materia.tramitacao_set.order_by('-data_tramitacao', '-id').first(): tramitacao.delete() return redirect(self.get_success_url()) @@ -2644,7 +2771,7 @@ class MateriaPesquisaSimplesView(PermissionRequiredMixin, FormView): if form.cleaned_data.get('data_inicial'): kwargs.update({'data_apresentacao__gte': form.cleaned_data['data_inicial'], 'data_apresentacao__lte': form.cleaned_data['data_final']}) - + materias = MateriaLegislativa.objects.filter( **kwargs).order_by('-numero', 'ano') @@ -2703,58 +2830,67 @@ class TipoMateriaCrud(CrudAux): def create_zip_docacessorios(materia): + """ + Creates in memory zip files + """ logger = logging.getLogger(__name__) - docs = materia.documentoacessorio_set.\ - all().values_list('arquivo', flat=True) + docs = materia.documentoacessorio_set. \ + all().values_list('arquivo', flat=True) if not docs: return None, None docs_path = [os.path.join(MEDIA_ROOT, i) for i in docs] if not docs_path: - raise FileNotFoundError("Não há arquivos PDF cadastrados em documentos acessorios.") - logger.info("Gerando compilado PDF de documentos acessorios com {} documentos".format(docs_path)) - zipfilename = '{}/mat_{}_{}_docacessorios.zip'.format( - get_tempfile_dir(), - materia.pk, - time.mktime(datetime.now().timetuple())) - with zipfile.ZipFile(zipfilename, 'w', zipfile.ZIP_DEFLATED) as zipf: - for f in docs_path: - zipf.write(f, f.split(os.sep)[-1]) + raise FileNotFoundError( + "Não há arquivos PDF cadastrados em documentos acessorios.") + logger.info( + "Gerando compilado PDF de documentos acessorios com {} documentos".format(docs_path)) - external_name = "mat_{}_{}_docacessorios.zip".format(materia.numero, materia.ano) - return external_name, zipfilename + _zipfile = BytesIO() + + try: + with zipfile.ZipFile(_zipfile, 'w', zipfile.ZIP_DEFLATED) as zipf: + for f in docs_path: + zipf.write(f, f.split(os.sep)[-1]) + except Exception as e: + logger.error(e) + raise e + + external_name = "mat_{}_{}_docacessorios.zip".format( + materia.numero, materia.ano) + return external_name, _zipfile.getvalue() def get_zip_docacessorios(request, pk): logger = logging.getLogger(__name__) username = 'Usuário anônimo' if request.user.is_anonymous else request.user.username materia = get_object_or_404(MateriaLegislativa, pk=pk) + data = None try: - external_name, zipfilename = create_zip_docacessorios(materia) - logger.info("user= {}. Gerou o zip compilado de documento acessorios".format(username)) + external_name, data = create_zip_docacessorios(materia) + logger.info( + "user= {}. Gerou o zip compilado de documento acessorios".format(username)) except FileNotFoundError: logger.error("user= {}.Não há arquivos cadastrados".format(username)) - msg=_('Não há arquivos cadastrados nesses documentos acessórios.') + msg = _('Não há arquivos cadastrados nesses documentos acessórios.') messages.add_message(request, messages.ERROR, msg) return redirect(reverse('sapl.materia:documentoacessorio_list', kwargs={'pk': pk})) except Exception as e: logger.error("user={}. Um erro inesperado ocorreu na criação do pdf de documentos acessorios: {}" - .format(username,str(e))) - msg=_('Um erro inesperado ocorreu. Entre em contato com o suporte do SAPL.') + .format(username, str(e))) + msg = _('Um erro inesperado ocorreu. Entre em contato com o suporte do SAPL.') messages.add_message(request, messages.ERROR, msg) return redirect(reverse('sapl.materia:documentoacessorio_list', kwargs={'pk': pk})) - if not zipfilename: - msg=_('Não há nenhum documento acessório cadastrado.') + if not data: + msg = _('Não há nenhum documento acessório cadastrado.') messages.add_message(request, messages.ERROR, msg) return redirect(reverse('sapl.materia:documentoacessorio_list', kwargs={'pk': pk})) - with open(os.path.join(get_tempfile_dir(), zipfilename), 'rb') as f: - data = f.read() response = HttpResponse(data, content_type='application/zip') response['Content-Disposition'] = ('attachment; filename="%s"' % external_name) @@ -2762,6 +2898,9 @@ def get_zip_docacessorios(request, pk): def create_pdf_docacessorios(materia): + """ + Creates a unified in memory PDF file + """ logger = logging.getLogger(__name__) docs = materia.documentoacessorio_set. \ all().values_list('arquivo', flat=True) @@ -2770,9 +2909,11 @@ def create_pdf_docacessorios(materia): # TODO: o for-comprehension abaixo filtra os arquivos não PDF. # TODO: o que fazer com os arquivos não PDF? converter? ignorar? - docs_path = [os.path.join(MEDIA_ROOT, i) for i in docs if i.lower().endswith('pdf')] + docs_path = [os.path.join(MEDIA_ROOT, i) + for i in docs if i.lower().endswith('pdf')] if not docs_path: - raise FileNotFoundError("Não há arquivos PDF cadastrados em documentos acessorios.") + raise FileNotFoundError( + "Não há arquivos PDF cadastrados em documentos acessorios.") logger.info("Gerando compilado PDF de documentos acessorios com {} documentos" .format(docs_path)) merged_pdf = '{}/mat_{}_{}_docacessorios.pdf'.format( @@ -2783,11 +2924,14 @@ def create_pdf_docacessorios(materia): merger = PdfFileMerger() for f in docs_path: merger.append(fileobj=f) - merger.write(fileobj=open(merged_pdf, "wb")) + + data = BytesIO() + merger.write(data) merger.close() - external_name = "mat_{}_{}_docacessorios.pdf".format(materia.numero, materia.ano) - return external_name, merged_pdf + external_name = "mat_{}_{}_docacessorios.pdf".format( + materia.numero, materia.ano) + return external_name, data.getvalue() def get_pdf_docacessorios(request, pk): @@ -2795,32 +2939,45 @@ def get_pdf_docacessorios(request, pk): logger = logging.getLogger(__name__) username = 'Usuário anônimo' if request.user.is_anonymous else request.user.username try: - external_name, pdffilename = create_pdf_docacessorios(materia) - logger.info("user= {}. Gerou o pdf compilado de documento acessorios".format(username)) + external_name, data = create_pdf_docacessorios(materia) + logger.info( + "user= {}. Gerou o pdf compilado de documento acessorios".format(username)) except FileNotFoundError: logger.error("user= {}.Não há arquivos cadastrados".format(username)) - msg=_('Não há arquivos cadastrados nesses documentos acessórios.') + msg = _('Não há arquivos cadastrados nesses documentos acessórios.') messages.add_message(request, messages.ERROR, msg) return redirect(reverse('sapl.materia:documentoacessorio_list', kwargs={'pk': pk})) except Exception as e: logger.error("user= {}.Um erro inesperado ocorreu na criação do pdf de documentos acessorios: {}" - .format(username,str(e))) - msg=_('Um erro inesperado ocorreu. Entre em contato com o suporte do SAPL.') + .format(username, str(e))) + msg = _('Um erro inesperado ocorreu. Entre em contato com o suporte do SAPL.') messages.add_message(request, messages.ERROR, msg) return redirect(reverse('sapl.materia:documentoacessorio_list', kwargs={'pk': pk})) - if not pdffilename: - msg=_('Não há nenhum documento acessório PDF cadastrado.') + if not data: + msg = _('Não há nenhum documento acessório PDF cadastrado.') messages.add_message(request, messages.ERROR, msg) return redirect(reverse('sapl.materia:documentoacessorio_list', kwargs={'pk': pk})) - with open(os.path.join(get_tempfile_dir(), pdffilename), 'rb') as f: - data = f.read() response = HttpResponse(data, content_type='application/pdf') response['Content-Disposition'] = ('attachment; filename="%s"' % external_name) return response + +def configEtiquetaMateriaLegislativaCrud(request): + config = ConfigEtiquetaMateriaLegislativa.objects.last() + if request.method == "POST": + form = ConfigEtiquetaMateriaLegislativaForms( + request.POST, instance=config) + if form.is_valid(): + config = form.save(commit=False) + config.published_date = timezone.now() + config.save() + return redirect('materia/config_etiqueta_materia.html', {'form': form}) + else: + form = ConfigEtiquetaMateriaLegislativaForms(instance=config) + return render(request, 'materia/config_etiqueta_materia.html', {'form': form}) diff --git a/sapl/norma/forms.py b/sapl/norma/forms.py index 7feb3b3c3..6162aef26 100644 --- a/sapl/norma/forms.py +++ b/sapl/norma/forms.py @@ -1,8 +1,6 @@ -import django_filters import logging from crispy_forms.layout import Fieldset, Layout - from django import forms from django.core.exceptions import ObjectDoesNotExist, ValidationError from django.db import models @@ -10,12 +8,13 @@ from django.db.models import Q from django.forms import ModelChoiceField, ModelForm, widgets from django.utils import timezone from django.utils.translation import ugettext_lazy as _ +import django_filters from sapl.base.models import Autor, TipoAutor from sapl.crispy_layout_mixin import form_actions, SaplFormHelper, to_row from sapl.materia.forms import choice_anos_com_materias from sapl.materia.models import (MateriaLegislativa, - TipoMateriaLegislativa) + TipoMateriaLegislativa, Orgao) from sapl.utils import (ANO_CHOICES, choice_anos_com_normas, FileFieldCheckMixin, FilterOverridesMetaMixin, NormaPesquisaOrderingFilter, RangeWidgetOverride, @@ -40,6 +39,31 @@ ORDENACAO_CHOICES = [('', '---------'), ('data,tipo,ano,numero', _('Data/Tipo/Ano/Número'))] +class AssuntoNormaFilterSet(django_filters.FilterSet): + assunto = django_filters.CharFilter(label=_("Assunto"), + method='multifield_filter') + + class Meta: + model = AssuntoNorma + fields = ["assunto"] + + def multifield_filter(self, queryset, name, value): + return queryset.filter(Q(assunto__icontains=value) | Q(descricao__icontains=value)) + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + row0 = to_row([("assunto", 12)]) + + self.form.helper = SaplFormHelper() + self.form.helper.form_method = "GET" + self.form.helper.layout = Layout( + Fieldset( + _("Pesquisa de Assunto de Norma Jurídica"), + row0, form_actions(label="Pesquisar")) + ) + + class NormaFilterSet(django_filters.FilterSet): ano = django_filters.ChoiceFilter(required=False, @@ -60,7 +84,7 @@ class NormaFilterSet(django_filters.FilterSet): class Meta(FilterOverridesMetaMixin): model = NormaJuridica - fields = ['tipo', 'numero', 'ano', 'data', 'data_vigencia', + fields = ['orgao', 'tipo', 'numero', 'ano', 'data', 'data_vigencia', 'data_publicacao', 'ementa', 'assuntos'] def __init__(self, *args, **kwargs): @@ -69,7 +93,7 @@ class NormaFilterSet(django_filters.FilterSet): row1 = to_row([('tipo', 4), ('numero', 4), ('ano', 4)]) row2 = to_row([('data', 6), ('data_publicacao', 6)]) row3 = to_row([('ementa', 6), ('assuntos', 6)]) - row4 = to_row([('data_vigencia', 12)]) + row4 = to_row([('data_vigencia', 6), ('orgao', 6), ]) row5 = to_row([('o', 6), ('indexacao', 6)]) self.form.helper = SaplFormHelper() @@ -118,6 +142,7 @@ class NormaJuridicaForm(FileFieldCheckMixin, ModelForm): fields = ['tipo', 'numero', 'ano', + 'orgao', 'data', 'esfera_federacao', 'complemento', @@ -134,14 +159,14 @@ class NormaJuridicaForm(FileFieldCheckMixin, ModelForm): 'observacao', 'texto_integral', 'assuntos', - 'user', + 'user', 'ip', 'ultima_edicao'] widgets = {'assuntos': widgets.CheckboxSelectMultiple, - 'user': forms.HiddenInput(), - 'ip': forms.HiddenInput(), - 'ultima_edicao': forms.HiddenInput()} + 'user': forms.HiddenInput(), + 'ip': forms.HiddenInput(), + 'ultima_edicao': forms.HiddenInput()} def clean(self): @@ -159,14 +184,18 @@ class NormaJuridicaForm(FileFieldCheckMixin, ModelForm): 'Número de norma não pode conter somente letras') if self.instance.numero != cleaned_data['numero']: - norma = NormaJuridica.objects.filter(ano=cleaned_data['ano'], - numero=cleaned_data['numero'], - tipo=cleaned_data['tipo']).exists() + params = { + 'ano': cleaned_data['ano'], + 'numero': cleaned_data['numero'], + 'tipo': cleaned_data['tipo'], + } + params['orgao'] = cleaned_data['orgao'] + norma = NormaJuridica.objects.filter(**params).exists() if norma: self.logger.warning("Já existe uma norma de mesmo Tipo ({}), Ano ({}) " - "e Número ({}) no sistema." - .format(cleaned_data['tipo'], cleaned_data['ano'], cleaned_data['numero'])) - raise ValidationError("Já existe uma norma de mesmo Tipo, Ano " + "e Número ({}) no sistema." + .format(cleaned_data['tipo'], cleaned_data['ano'], cleaned_data['numero'])) + raise ValidationError("Já existe uma norma de mesmo Tipo, Ano, Órgão " "e Número no sistema") if (cleaned_data['tipo_materia'] and cleaned_data['numero_materia'] and @@ -269,9 +298,9 @@ class AutoriaNormaForm(ModelForm): class AnexoNormaJuridicaForm(FileFieldCheckMixin, ModelForm): - + logger = logging.getLogger(__name__) - + anexo_arquivo = forms.FileField( required=True, label="Arquivo Anexo" @@ -286,10 +315,10 @@ class AnexoNormaJuridicaForm(FileFieldCheckMixin, ModelForm): def clean(self): cleaned_data = super(AnexoNormaJuridicaForm, self).clean() - + if not self.is_valid(): return cleaned_data - + anexo_arquivo = self.cleaned_data.get('anexo_arquivo', False) if anexo_arquivo: @@ -309,6 +338,12 @@ class AnexoNormaJuridicaForm(FileFieldCheckMixin, ModelForm): class NormaRelacionadaForm(ModelForm): + orgao = forms.ModelChoiceField( + label='Órgão', + required=False, + queryset=Orgao.objects.all(), + empty_label='----------', + ) tipo = forms.ModelChoiceField( label='Tipo', required=True, @@ -325,7 +360,7 @@ class NormaRelacionadaForm(ModelForm): class Meta: model = NormaRelacionada - fields = ['tipo', 'numero', 'ano', 'ementa', 'tipo_vinculo'] + fields = ['orgao', 'tipo', 'numero', 'ano', 'ementa', 'tipo_vinculo'] def __init__(self, *args, **kwargs): super(NormaRelacionadaForm, self).__init__(*args, **kwargs) @@ -338,20 +373,21 @@ class NormaRelacionadaForm(ModelForm): cleaned_data = self.cleaned_data try: - self.logger.debug("Tentando obter objeto NormaJuridica com numero={}, ano={}, tipo={}.".format( - cleaned_data['numero'], cleaned_data['ano'], cleaned_data['tipo'])) + self.logger.debug("Tentando obter objeto NormaJuridica com numero={}, ano={}, tipo={}, orgao={}.".format( + cleaned_data['numero'], cleaned_data['ano'], cleaned_data['tipo'], cleaned_data['orgao'])) norma_relacionada = NormaJuridica.objects.get( numero=cleaned_data['numero'], ano=cleaned_data['ano'], - tipo=cleaned_data['tipo']) + tipo=cleaned_data['tipo'], + orgao=cleaned_data['orgao']) except ObjectDoesNotExist: - self.logger.info("NormaJuridica com numero={}, ano={}, tipo={} não existe.".format( - cleaned_data['numero'], cleaned_data['ano'], cleaned_data['tipo'])) + self.logger.info("NormaJuridica com numero={}, ano={}, tipo={}, orgao={} não existe.".format( + cleaned_data['numero'], cleaned_data['ano'], cleaned_data['tipo'], cleaned_data['orgao'])) msg = _('A norma a ser relacionada não existe.') raise ValidationError(msg) else: - self.logger.info("NormaJuridica com numero={}, ano={}, tipo={} obtida com sucesso.".format( - cleaned_data['numero'], cleaned_data['ano'], cleaned_data['tipo'])) + self.logger.info("NormaJuridica com numero={}, ano={}, tipo={} , orgao={} obtida com sucesso.".format( + cleaned_data['numero'], cleaned_data['ano'], cleaned_data['tipo'], cleaned_data['orgao'])) cleaned_data['norma_relacionada'] = norma_relacionada return cleaned_data @@ -429,7 +465,9 @@ class NormaPesquisaSimplesForm(forms.Form): raise ValidationError(_('Caso pesquise por data, os campos de Data Inicial e ' 'Data Final devem ser preenchidos obrigatoriamente')) elif data_inicial > data_final: - self.logger.error("Data Final ({}) menor que a Data Inicial ({}).".format(data_final, data_inicial)) - raise ValidationError(_('A Data Final não pode ser menor que a Data Inicial')) + self.logger.error("Data Final ({}) menor que a Data Inicial ({}).".format( + data_final, data_inicial)) + raise ValidationError( + _('A Data Final não pode ser menor que a Data Inicial')) return cleaned_data diff --git a/sapl/norma/migrations/0034_auto_20200609_1453.py b/sapl/norma/migrations/0034_auto_20200609_1453.py new file mode 100644 index 000000000..70be6325d --- /dev/null +++ b/sapl/norma/migrations/0034_auto_20200609_1453.py @@ -0,0 +1,18 @@ +# Generated by Django 2.2 on 2020-06-09 17:53 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('norma', '0033_auto_20200416_1538'), + ] + + operations = [ + migrations.AlterField( + model_name='normajuridica', + name='complemento', + field=models.BooleanField(blank=True, choices=[(True, 'Sim'), (False, 'Não')], default=None, null=True, verbose_name='Complementar ?'), + ), + ] diff --git a/sapl/norma/migrations/0035_auto_20200609_1501.py b/sapl/norma/migrations/0035_auto_20200609_1501.py new file mode 100644 index 000000000..401932e08 --- /dev/null +++ b/sapl/norma/migrations/0035_auto_20200609_1501.py @@ -0,0 +1,18 @@ +# Generated by Django 2.2 on 2020-06-09 18:01 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('norma', '0034_auto_20200609_1453'), + ] + + operations = [ + migrations.AlterField( + model_name='normajuridica', + name='complemento', + field=models.BooleanField(blank=True, choices=[(True, 'Sim'), (False, 'Não')], default=False, null=True, verbose_name='Complementar ?'), + ), + ] diff --git a/sapl/norma/migrations/0036_auto_20201009_1042.py b/sapl/norma/migrations/0036_auto_20201009_1042.py new file mode 100644 index 000000000..caf92a778 --- /dev/null +++ b/sapl/norma/migrations/0036_auto_20201009_1042.py @@ -0,0 +1,29 @@ +# Generated by Django 2.2.13 on 2020-10-09 13:42 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('norma', '0035_auto_20200609_1501'), + ] + + operations = [ + migrations.AlterModelOptions( + name='anexonormajuridica', + options={'ordering': ('id',), 'verbose_name': 'Anexo da Norma Juridica', 'verbose_name_plural': 'Anexos da Norma Juridica'}, + ), + migrations.AlterModelOptions( + name='legislacaocitada', + options={'ordering': ('id',), 'verbose_name': 'Legislação', 'verbose_name_plural': 'Legislações'}, + ), + migrations.AlterModelOptions( + name='normaestatisticas', + options={'ordering': ('id',)}, + ), + migrations.AlterModelOptions( + name='tipovinculonormajuridica', + options={'ordering': ('id',), 'verbose_name': 'Tipo de Vínculo entre Normas Jurídicas', 'verbose_name_plural': 'Tipos de Vínculos entre Normas Jurídicas'}, + ), + ] diff --git a/sapl/norma/migrations/0037_auto_20210107_1408.py b/sapl/norma/migrations/0037_auto_20210107_1408.py new file mode 100644 index 000000000..d4d477671 --- /dev/null +++ b/sapl/norma/migrations/0037_auto_20210107_1408.py @@ -0,0 +1,29 @@ +# Generated by Django 2.2.13 on 2021-01-07 17:08 + +from django.db import migrations, models +import sapl.norma.models + + +class Migration(migrations.Migration): + + dependencies = [ + ('norma', '0036_auto_20201009_1042'), + ] + + operations = [ + migrations.AlterField( + model_name='anexonormajuridica', + name='ano', + field=models.PositiveSmallIntegerField(choices=[(2022, 2022), (2021, 2021), (2020, 2020), (2019, 2019), (2018, 2018), (2017, 2017), (2016, 2016), (2015, 2015), (2014, 2014), (2013, 2013), (2012, 2012), (2011, 2011), (2010, 2010), (2009, 2009), (2008, 2008), (2007, 2007), (2006, 2006), (2005, 2005), (2004, 2004), (2003, 2003), (2002, 2002), (2001, 2001), (2000, 2000), (1999, 1999), (1998, 1998), (1997, 1997), (1996, 1996), (1995, 1995), (1994, 1994), (1993, 1993), (1992, 1992), (1991, 1991), (1990, 1990), (1989, 1989), (1988, 1988), (1987, 1987), (1986, 1986), (1985, 1985), (1984, 1984), (1983, 1983), (1982, 1982), (1981, 1981), (1980, 1980), (1979, 1979), (1978, 1978), (1977, 1977), (1976, 1976), (1975, 1975), (1974, 1974), (1973, 1973), (1972, 1972), (1971, 1971), (1970, 1970), (1969, 1969), (1968, 1968), (1967, 1967), (1966, 1966), (1965, 1965), (1964, 1964), (1963, 1963), (1962, 1962), (1961, 1961), (1960, 1960), (1959, 1959), (1958, 1958), (1957, 1957), (1956, 1956), (1955, 1955), (1954, 1954), (1953, 1953), (1952, 1952), (1951, 1951), (1950, 1950), (1949, 1949), (1948, 1948), (1947, 1947), (1946, 1946), (1945, 1945), (1944, 1944), (1943, 1943), (1942, 1942), (1941, 1941), (1940, 1940), (1939, 1939), (1938, 1938), (1937, 1937), (1936, 1936), (1935, 1935), (1934, 1934), (1933, 1933), (1932, 1932), (1931, 1931), (1930, 1930), (1929, 1929), (1928, 1928), (1927, 1927), (1926, 1926), (1925, 1925), (1924, 1924), (1923, 1923), (1922, 1922), (1921, 1921), (1920, 1920), (1919, 1919), (1918, 1918), (1917, 1917), (1916, 1916), (1915, 1915), (1914, 1914), (1913, 1913), (1912, 1912), (1911, 1911), (1910, 1910), (1909, 1909), (1908, 1908), (1907, 1907), (1906, 1906), (1905, 1905), (1904, 1904), (1903, 1903), (1902, 1902), (1901, 1901), (1900, 1900), (1899, 1899), (1898, 1898), (1897, 1897), (1896, 1896), (1895, 1895), (1894, 1894), (1893, 1893), (1892, 1892), (1891, 1891), (1890, 1890)], verbose_name='Ano'), + ), + migrations.AlterField( + model_name='normaestatisticas', + name='ano', + field=models.PositiveSmallIntegerField(choices=[(2022, 2022), (2021, 2021), (2020, 2020), (2019, 2019), (2018, 2018), (2017, 2017), (2016, 2016), (2015, 2015), (2014, 2014), (2013, 2013), (2012, 2012), (2011, 2011), (2010, 2010), (2009, 2009), (2008, 2008), (2007, 2007), (2006, 2006), (2005, 2005), (2004, 2004), (2003, 2003), (2002, 2002), (2001, 2001), (2000, 2000), (1999, 1999), (1998, 1998), (1997, 1997), (1996, 1996), (1995, 1995), (1994, 1994), (1993, 1993), (1992, 1992), (1991, 1991), (1990, 1990), (1989, 1989), (1988, 1988), (1987, 1987), (1986, 1986), (1985, 1985), (1984, 1984), (1983, 1983), (1982, 1982), (1981, 1981), (1980, 1980), (1979, 1979), (1978, 1978), (1977, 1977), (1976, 1976), (1975, 1975), (1974, 1974), (1973, 1973), (1972, 1972), (1971, 1971), (1970, 1970), (1969, 1969), (1968, 1968), (1967, 1967), (1966, 1966), (1965, 1965), (1964, 1964), (1963, 1963), (1962, 1962), (1961, 1961), (1960, 1960), (1959, 1959), (1958, 1958), (1957, 1957), (1956, 1956), (1955, 1955), (1954, 1954), (1953, 1953), (1952, 1952), (1951, 1951), (1950, 1950), (1949, 1949), (1948, 1948), (1947, 1947), (1946, 1946), (1945, 1945), (1944, 1944), (1943, 1943), (1942, 1942), (1941, 1941), (1940, 1940), (1939, 1939), (1938, 1938), (1937, 1937), (1936, 1936), (1935, 1935), (1934, 1934), (1933, 1933), (1932, 1932), (1931, 1931), (1930, 1930), (1929, 1929), (1928, 1928), (1927, 1927), (1926, 1926), (1925, 1925), (1924, 1924), (1923, 1923), (1922, 1922), (1921, 1921), (1920, 1920), (1919, 1919), (1918, 1918), (1917, 1917), (1916, 1916), (1915, 1915), (1914, 1914), (1913, 1913), (1912, 1912), (1911, 1911), (1910, 1910), (1909, 1909), (1908, 1908), (1907, 1907), (1906, 1906), (1905, 1905), (1904, 1904), (1903, 1903), (1902, 1902), (1901, 1901), (1900, 1900), (1899, 1899), (1898, 1898), (1897, 1897), (1896, 1896), (1895, 1895), (1894, 1894), (1893, 1893), (1892, 1892), (1891, 1891), (1890, 1890)], default=sapl.norma.models.get_ano_atual, verbose_name='Ano'), + ), + migrations.AlterField( + model_name='normajuridica', + name='ano', + field=models.PositiveSmallIntegerField(choices=[(2022, 2022), (2021, 2021), (2020, 2020), (2019, 2019), (2018, 2018), (2017, 2017), (2016, 2016), (2015, 2015), (2014, 2014), (2013, 2013), (2012, 2012), (2011, 2011), (2010, 2010), (2009, 2009), (2008, 2008), (2007, 2007), (2006, 2006), (2005, 2005), (2004, 2004), (2003, 2003), (2002, 2002), (2001, 2001), (2000, 2000), (1999, 1999), (1998, 1998), (1997, 1997), (1996, 1996), (1995, 1995), (1994, 1994), (1993, 1993), (1992, 1992), (1991, 1991), (1990, 1990), (1989, 1989), (1988, 1988), (1987, 1987), (1986, 1986), (1985, 1985), (1984, 1984), (1983, 1983), (1982, 1982), (1981, 1981), (1980, 1980), (1979, 1979), (1978, 1978), (1977, 1977), (1976, 1976), (1975, 1975), (1974, 1974), (1973, 1973), (1972, 1972), (1971, 1971), (1970, 1970), (1969, 1969), (1968, 1968), (1967, 1967), (1966, 1966), (1965, 1965), (1964, 1964), (1963, 1963), (1962, 1962), (1961, 1961), (1960, 1960), (1959, 1959), (1958, 1958), (1957, 1957), (1956, 1956), (1955, 1955), (1954, 1954), (1953, 1953), (1952, 1952), (1951, 1951), (1950, 1950), (1949, 1949), (1948, 1948), (1947, 1947), (1946, 1946), (1945, 1945), (1944, 1944), (1943, 1943), (1942, 1942), (1941, 1941), (1940, 1940), (1939, 1939), (1938, 1938), (1937, 1937), (1936, 1936), (1935, 1935), (1934, 1934), (1933, 1933), (1932, 1932), (1931, 1931), (1930, 1930), (1929, 1929), (1928, 1928), (1927, 1927), (1926, 1926), (1925, 1925), (1924, 1924), (1923, 1923), (1922, 1922), (1921, 1921), (1920, 1920), (1919, 1919), (1918, 1918), (1917, 1917), (1916, 1916), (1915, 1915), (1914, 1914), (1913, 1913), (1912, 1912), (1911, 1911), (1910, 1910), (1909, 1909), (1908, 1908), (1907, 1907), (1906, 1906), (1905, 1905), (1904, 1904), (1903, 1903), (1902, 1902), (1901, 1901), (1900, 1900), (1899, 1899), (1898, 1898), (1897, 1897), (1896, 1896), (1895, 1895), (1894, 1894), (1893, 1893), (1892, 1892), (1891, 1891), (1890, 1890)], verbose_name='Ano'), + ), + ] diff --git a/sapl/norma/migrations/0038_normajuridica_orgao.py b/sapl/norma/migrations/0038_normajuridica_orgao.py new file mode 100644 index 000000000..5149ceb09 --- /dev/null +++ b/sapl/norma/migrations/0038_normajuridica_orgao.py @@ -0,0 +1,20 @@ +# Generated by Django 2.2.13 on 2021-03-01 18:37 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('materia', '0077_auto_20210209_1047'), + ('norma', '0037_auto_20210107_1408'), + ] + + operations = [ + migrations.AddField( + model_name='normajuridica', + name='orgao', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='materia.Orgao', verbose_name='Órgão'), + ), + ] diff --git a/sapl/norma/models.py b/sapl/norma/models.py index ca0846eca..85358ed75 100644 --- a/sapl/norma/models.py +++ b/sapl/norma/models.py @@ -1,16 +1,16 @@ from django.contrib.contenttypes.fields import GenericRelation from django.db import models from django.template import defaultfilters -from django.utils.translation import ugettext_lazy as _ from django.utils import timezone +from django.utils.translation import ugettext_lazy as _ from model_utils import Choices import reversion from sapl.base.models import Autor from sapl.compilacao.models import TextoArticulado -from sapl.materia.models import MateriaLegislativa +from sapl.materia.models import MateriaLegislativa, Orgao from sapl.utils import (RANGE_ANOS, YES_NO_CHOICES, - restringe_tipos_de_arquivo_txt, + restringe_tipos_de_arquivo_txt, texto_upload_path, get_settings_auth_user_model, OverwriteStorage) @@ -70,8 +70,66 @@ def norma_upload_path(instance, filename): return texto_upload_path(instance, filename, subpath=instance.ano) +class NormaJuridicaManager(models.Manager): + + use_for_related_fields = True + + def normas_sem_textos_articulados(self): + qs = self.get_queryset() + qs = qs.filter(texto_articulado__isnull=True) + return qs + + def normas_com_textos_articulados_publicados(self): + qs = self.get_queryset() + qs = qs.filter( + texto_articulado__editable_only_by_owners=False, + texto_articulado__privacidade=0, + texto_articulado__isnull=False + ) + + return qs + + def normas_com_textos_articulados_pendentes(self): + qs = self.get_queryset() + qs = qs.filter( + texto_articulado__editable_only_by_owners=False) + + q = models.Q( + texto_articulado__privacidade=0 + ) | models.Q( + texto_articulado__isnull=True + ) + qs = qs.exclude(q) + + for n in qs: + ta = n.texto_articulado.first() + count = ta.dispositivos_set.count() + if count == 1: + count = 0 + elif count == 2: + d = ta.dispositivos_set.last() + if d.auto_inserido or not d.texto or d.texto == n.ementa: + count = 0 + elif count == 3: + ds = ta.dispositivos_set.all() + if ds[1].auto_inserido and \ + not d[2].dispositivo_pai and\ + d[2].tipo_dispositivo.dispositivo_de_articulacao: + count = 0 + + if not count: + ta.dispositivos_set.filter( + dispositivo_pai__isnull=False).delete() + ta.delete() + + return qs + + @reversion.register() class NormaJuridica(models.Model): + + objects = NormaJuridicaManager() + ESFERA_FEDERACAO_CHOICES = Choices( ('M', 'municipal', _('Municipal')), ('E', 'estadual', _('Estadual')), @@ -93,6 +151,9 @@ class NormaJuridica(models.Model): materia = models.ForeignKey( MateriaLegislativa, blank=True, null=True, on_delete=models.PROTECT, verbose_name=_('Matéria')) + orgao = models.ForeignKey( + Orgao, blank=True, null=True, + on_delete=models.PROTECT, verbose_name=_('Órgão')) numero = models.CharField( max_length=8, verbose_name=_('Número')) @@ -118,9 +179,13 @@ class NormaJuridica(models.Model): blank=True, verbose_name=_('Indexação')) observacao = models.TextField( blank=True, verbose_name=_('Observação')) - complemento = models.NullBooleanField( - blank=True, verbose_name=_('Complementar ?'), - choices=YES_NO_CHOICES) + complemento = models.BooleanField( + null=True, + blank=True, + default=False, + verbose_name=_('Complementar ?'), + choices=YES_NO_CHOICES + ) # XXX was a CharField (attention on migrate) assuntos = models.ManyToManyField( AssuntoNorma, blank=True, @@ -185,8 +250,9 @@ class NormaJuridica(models.Model): if numero_norma.isnumeric(): numero_norma = '{0:,}'.format(int(self.numero)).replace(',', '.') - return _('%(tipo)s nº %(numero)s, de %(data)s') % { + return _('%(tipo)s%(orgao_sigla)s nº %(numero)s, de %(data)s') % { 'tipo': self.tipo, + 'orgao_sigla': f'-{self.orgao.sigla}' if self.orgao else '', 'numero': numero_norma, 'data': defaultfilters.date(self.data, "d \d\e F \d\e Y").lower()} @@ -234,6 +300,9 @@ class NormaEstatisticas(models.Model): norma = models.ForeignKey(NormaJuridica, on_delete=models.CASCADE) + class Meta: + ordering = ('id',) + def __str__(self): return _('Usuário: %(usuario)s, Norma: %(norma)s') % { 'usuario': self.usuario, 'norma': self.norma} @@ -294,6 +363,7 @@ class LegislacaoCitada(models.Model): class Meta: verbose_name = _('Legislação') verbose_name_plural = _('Legislações') + ordering = ('id',) def __str__(self): return str(self.norma) @@ -314,6 +384,7 @@ class TipoVinculoNormaJuridica(models.Model): class Meta: verbose_name = _('Tipo de Vínculo entre Normas Jurídicas') verbose_name_plural = _('Tipos de Vínculos entre Normas Jurídicas') + ordering = ('id',) def __str__(self): return self.descricao_ativa @@ -375,6 +446,7 @@ class AnexoNormaJuridica(models.Model): class Meta: verbose_name = _('Anexo da Norma Juridica') verbose_name_plural = _('Anexos da Norma Juridica') + ordering = ('id',) def __str__(self): return _('Anexo: %(anexo)s da norma %(norma)s') % { diff --git a/sapl/norma/tests/test_norma.py b/sapl/norma/tests/test_norma.py index efbab6531..52f810b91 100644 --- a/sapl/norma/tests/test_norma.py +++ b/sapl/norma/tests/test_norma.py @@ -1,4 +1,4 @@ -from django.core.urlresolvers import reverse +from django.urls import reverse from django.utils.translation import ugettext_lazy as _ from model_bakery import baker import pytest diff --git a/sapl/norma/urls.py b/sapl/norma/urls.py index 800707915..951479ea4 100644 --- a/sapl/norma/urls.py +++ b/sapl/norma/urls.py @@ -1,12 +1,17 @@ +from django.conf import settings from django.conf.urls import include, url -from sapl.norma.views import (AnexoNormaJuridicaCrud,AssuntoNormaCrud, NormaCrud, NormaPesquisaView, +from sapl.norma.views import (AnexoNormaJuridicaCrud, AssuntoNormaCrud, + NormaCrud, NormaPesquisaView, NormaRelacionadaCrud, NormaTaView, TipoNormaCrud, TipoVinculoNormaJuridicaCrud, recuperar_norma, - recuperar_numero_norma, AutoriaNormaCrud) + recuperar_numero_norma, AutoriaNormaCrud, + PesquisarAssuntoNormaView) + from .apps import AppConfig + app_name = AppConfig.name @@ -19,7 +24,13 @@ urlpatterns = [ # Integração com Compilação url(r'^norma/(?P[0-9]+)/ta$', NormaTaView.as_view(), name='norma_ta'), url(r'^sistema/norma/tipo/', include(TipoNormaCrud.get_urls())), + url(r'^sistema/norma/assunto/', include(AssuntoNormaCrud.get_urls())), + url( + r'^sistema/norma/pesquisar-assunto-norma/', + PesquisarAssuntoNormaView.as_view(), name="pesquisar_assuntonorma" + ), + url(r'^sistema/norma/vinculo/', include( TipoVinculoNormaJuridicaCrud.get_urls())), @@ -29,5 +40,4 @@ urlpatterns = [ url(r'^norma/recuperar-norma$', recuperar_norma, name="recuperar_norma"), url(r'^norma/recuperar-numero-norma$', recuperar_numero_norma, name="recuperar_numero_norma"), - ] diff --git a/sapl/norma/views.py b/sapl/norma/views.py index 98825f4cf..3f9e1247b 100644 --- a/sapl/norma/views.py +++ b/sapl/norma/views.py @@ -4,13 +4,17 @@ import re from django.contrib.auth.mixins import PermissionRequiredMixin from django.core.exceptions import ObjectDoesNotExist -from django.core.urlresolvers import reverse +from django.db.models import Q from django.http import HttpResponse, JsonResponse -from django.template import RequestContext, loader +from django.http.response import HttpResponseRedirect +from django.shortcuts import redirect +from django.template import loader +from django.urls import reverse +from django.urls.base import reverse_lazy from django.utils import timezone +from django.utils.encoding import force_text from django.utils.translation import ugettext_lazy as _ from django.views.generic import TemplateView, UpdateView -from django.views.generic.base import RedirectView from django.views.generic.edit import FormView from django_filters.views import FilterView import weasyprint @@ -18,22 +22,22 @@ import weasyprint from sapl import settings import sapl from sapl.base.models import AppConfig +from sapl.compilacao.models import STATUS_TA_PUBLIC from sapl.compilacao.views import IntegracaoTaView from sapl.crud.base import (RP_DETAIL, RP_LIST, Crud, CrudAux, MasterDetailCrud, make_pagination) -from sapl.utils import show_results_filter_set, get_client_ip +from sapl.materia.models import Orgao +from sapl.utils import show_results_filter_set, get_client_ip,\ + sapl_as_sapn from .forms import (AnexoNormaJuridicaForm, NormaFilterSet, NormaJuridicaForm, - NormaPesquisaSimplesForm, NormaRelacionadaForm, AutoriaNormaForm) + NormaPesquisaSimplesForm, NormaRelacionadaForm, + AutoriaNormaForm, AssuntoNormaFilterSet) from .models import (AnexoNormaJuridica, AssuntoNorma, NormaJuridica, NormaRelacionada, TipoNormaJuridica, TipoVinculoNormaJuridica, AutoriaNorma, NormaEstatisticas) # LegislacaoCitadaCrud = Crud.build(LegislacaoCitada, '') -AssuntoNormaCrud = CrudAux.build(AssuntoNorma, 'assunto_norma_juridica', - list_field_names=['assunto', 'descricao']) - - TipoNormaCrud = CrudAux.build( TipoNormaJuridica, 'tipo_norma_juridica', list_field_names=['sigla', 'descricao', 'equivalente_lexml']) @@ -42,6 +46,75 @@ TipoVinculoNormaJuridicaCrud = CrudAux.build( list_field_names=['sigla', 'descricao_ativa', 'descricao_passiva', 'revoga_integralmente']) +class AssuntoNormaCrud(CrudAux): + model = AssuntoNorma + + class BaseMixin(CrudAux.BaseMixin): + list_field_names = ["assunto", "descricao"] + + class DeleteView(CrudAux.DeleteView): + def get_success_url(self): + return reverse('sapl.norma:pesquisar_assuntonorma') + + +class PesquisarAssuntoNormaView(FilterView): + model = AssuntoNorma + filterset_class = AssuntoNormaFilterSet + paginate_by = 10 + + def get_filterset_kwargs(self, filterset_class): + super(PesquisarAssuntoNormaView, self).get_filterset_kwargs( + filterset_class + ) + + return ({ + "data": self.request.GET or None, + "queryset": self.get_queryset().order_by("assunto").distinct() + }) + + def get_context_data(self, **kwargs): + context = super(PesquisarAssuntoNormaView, self).get_context_data( + **kwargs + ) + + paginator = context["paginator"] + page_obj = context["page_obj"] + + context.update({ + "page_range": make_pagination( + page_obj.number, paginator.num_pages + ), + "NO_ENTRIES_MSG": "Nenhum assunto de norma jurídica encontrado!", + "title": _("Assunto de Norma Jurídica") + }) + + return context + + def get(self, request, *args, **kwargs): + super(PesquisarAssuntoNormaView, self).get(request) + + data = self.filterset.data + + url = '' + + if data: + url = '&' + str(self.request.META["QUERY_STRING"]) + if url.startswith("&page"): + ponto_comeco = url.find("assunto=") - 1 + url = url[ponto_comeco:] + + context = self.get_context_data( + filter=self.filterset, object_list=self.object_list, + filter_url=url, numero_res=len(self.object_list) + ) + + context["show_results"] = show_results_filter_set( + self.request.GET.copy() + ) + + return self.render_to_response(context) + + class NormaRelacionadaCrud(MasterDetailCrud): model = NormaRelacionada parent_field = 'norma_principal' @@ -184,7 +257,7 @@ class NormaCrud(Crud): public = [RP_LIST, RP_DETAIL] class BaseMixin(Crud.BaseMixin): - list_field_names = ['tipo', 'numero', 'ano', 'ementa'] + list_field_names = ['epigrafe', 'ementa'] list_url = '' @@ -201,6 +274,13 @@ class NormaCrud(Crud): norma_id=kwargs['pk'], ano=timezone.now().year, horario_acesso=timezone.now()) + + if not 'display' in request.GET and \ + not request.user.has_perm('norma.change_normajuridica'): + ta = self.get_object().texto_articulado.first() + if ta and ta.privacidade == STATUS_TA_PUBLIC: + return redirect(reverse('sapl.norma:norma_ta', + kwargs={'pk': self.kwargs['pk']})) return super().get(request, *args, **kwargs) class DeleteView(Crud.DeleteView): @@ -242,14 +322,54 @@ class NormaCrud(Crud): layout_key = 'NormaJuridicaCreate' - class ListView(Crud.ListView, RedirectView): + class ListView(Crud.ListView): + + def get(self, request, *args, **kwargs): + if AppConfig.attr('texto_articulado_norma'): + self.status = self.request.GET.get('status', '') + return Crud.ListView.get(self, request, *args, **kwargs) + else: + url = self.get_redirect_url(*args, **kwargs) + return HttpResponseRedirect(url) + + def hook_header_epigrafe(self, *args, **kwargs): + return force_text(_('Epigrafe')) + + def hook_epigrafe(self, obj, ss, url): + + return obj.epigrafe, reverse_lazy( + 'sapl.norma:norma_ta', + kwargs={'pk': obj.id}) def get_redirect_url(self, *args, **kwargs): namespace = self.model._meta.app_config.name return reverse('%s:%s' % (namespace, 'norma_pesquisa')) - def get(self, request, *args, **kwargs): - return RedirectView.get(self, request, *args, **kwargs) + def get_queryset(self): + if self.status == 'pendente': + qs = NormaJuridica.objects.normas_com_textos_articulados_pendentes() + elif self.status == 'publico': + qs = NormaJuridica.objects.normas_com_textos_articulados_publicados() + else: + qs = NormaJuridica.objects.normas_sem_textos_articulados() + + return qs.order_by('-texto_articulado__privacidade', '-ano', '-numero') + + def get_context_data(self, **kwargs): + context = Crud.ListView.get_context_data(self, **kwargs) + + if self.status == 'pendente': + context['title'] = 'Normas Jurídicas com Textos Articulados não publicados' + elif self.status == 'publico': + context['title'] = 'Normas Jurídicas com Textos Articulados publicados' + else: + context['title'] = 'Normas Jurídicas sem Textos Articulados' + + return context + + @classmethod + def get_url_regex(cls): + return r'^check_compilacao$' class UpdateView(Crud.UpdateView): form_class = NormaJuridicaForm @@ -258,7 +378,8 @@ class NormaCrud(Crud): def get_initial(self): initial = super().get_initial() - norma = NormaJuridica.objects.get(id=self.kwargs['pk']) + norma = NormaJuridica.objects.select_related( + "materia").get(id=self.kwargs['pk']) if norma.materia: initial['tipo_materia'] = norma.materia.tipo initial['ano_materia'] = norma.materia.ano @@ -267,9 +388,7 @@ class NormaCrud(Crud): return initial def form_valid(self, form): - norma_antiga = NormaJuridica.objects.get( - pk=self.kwargs['pk'] - ) + norma_antiga = NormaJuridica.objects.get(pk=self.kwargs['pk']) # Feito desta forma para que sejam materializados os assuntos # antigos @@ -316,6 +435,10 @@ def recuperar_norma(request): logger = logging.getLogger(__name__) username = request.user.username + orgao = None + if 'orgao' in request.GET and request.GET['orgao']: + orgao = Orgao.objects.get(pk=request.GET['orgao']) + tipo = TipoNormaJuridica.objects.get(pk=request.GET['tipo']) numero = request.GET['numero'] ano = request.GET['ano'] @@ -325,12 +448,13 @@ def recuperar_norma(request): .format(tipo, ano, numero)) norma = NormaJuridica.objects.get(tipo=tipo, ano=ano, - numero=numero) + numero=numero, + orgao=orgao) response = JsonResponse({'ementa': norma.ementa, 'id': norma.id}) except ObjectDoesNotExist: logger.warning('user=' + username + '. NormaJuridica buscada (tipo={}, ano={}, numero={}) não existe. ' - 'Definida com ementa vazia e id 0.'.format(tipo, ano, numero)) + 'Definida com ementa vazia e id 0.'.format(tipo, ano, numero)) response = JsonResponse({'ementa': '', 'id': 0}) return response @@ -339,9 +463,14 @@ def recuperar_norma(request): def recuperar_numero_norma(request): tipo = TipoNormaJuridica.objects.get(pk=request.GET['tipo']) ano = request.GET.get('ano', '') + orgao = request.GET.get('orgao', '') + param = {'tipo': tipo, - 'ano': ano if ano else timezone.now().year + 'ano': ano if ano else timezone.now().year, } + if orgao: + param['orgao'] = Orgao.objects.get(pk=orgao) + norma = NormaJuridica.objects.filter(**param).order_by( 'tipo', 'ano', 'numero').values_list('numero', flat=True) if norma: diff --git a/sapl/painel/migrations/0003_auto_20201013_1153.py b/sapl/painel/migrations/0003_auto_20201013_1153.py new file mode 100644 index 000000000..487c7dbcd --- /dev/null +++ b/sapl/painel/migrations/0003_auto_20201013_1153.py @@ -0,0 +1,21 @@ +# Generated by Django 2.2.13 on 2020-10-13 14:53 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('painel', '0002_auto_20180523_1430'), + ] + + operations = [ + migrations.AlterModelOptions( + name='cronometro', + options={'ordering': ('-data_cronometro',)}, + ), + migrations.AlterModelOptions( + name='painel', + options={'ordering': ('-data_painel',)}, + ), + ] diff --git a/sapl/painel/models.py b/sapl/painel/models.py index f999ca480..aec696a53 100644 --- a/sapl/painel/models.py +++ b/sapl/painel/models.py @@ -17,6 +17,9 @@ class Painel(models.Model): mostrar = models.CharField(max_length=1, choices=PAINEL_TYPES, default='C') + class Meta: + ordering = ('-data_painel',) + def __str__(self): return str(self.aberto) + ":" + self.data_painel.strftime("%d/%m/%Y") @@ -45,3 +48,6 @@ class Cronometro(models.Model): tipo = models.CharField( max_length=1, choices=CRONOMETRO_TYPES, verbose_name=_('Tipo Cronômetro')) + + class Meta: + ordering = ('-data_cronometro',) \ No newline at end of file diff --git a/sapl/painel/views.py b/sapl/painel/views.py index fcdd2d8cf..75f5a1b97 100644 --- a/sapl/painel/views.py +++ b/sapl/painel/views.py @@ -5,7 +5,7 @@ import logging from django.contrib import messages from django.contrib.auth.decorators import user_passes_test from django.core.exceptions import ObjectDoesNotExist -from django.core.urlresolvers import reverse +from django.urls import reverse from django.db.models import Q from django.http import HttpResponse, JsonResponse from django.http.response import Http404, HttpResponseRedirect @@ -201,23 +201,24 @@ def can_vote(context, context_vars, request): def votante_view(request): logger = logging.getLogger(__name__) - username = request.user.username - + username = request.user.username if request.user.is_authenticated else 'AnonymousUser' + # Pega o votante relacionado ao usuário template_name = 'painel/voto_nominal.html' context = {} context_vars = {} try: - logger.debug('user=' + username + '. Tentando obter objeto Votante com user={}.'.format(request.user)) - votante = Votante.objects.get(user=request.user) + logger.debug(f'user={username}. Tentando obter objeto Votante com user={request.user}.') + if not request.user.is_anonymous and request.user.is_authenticated: + votante = Votante.objects.get(user=request.user) + else: + raise ObjectDoesNotExist except ObjectDoesNotExist: - logger.error("user=" + username + ". Usuário (user={}) não cadastrado como votante na tela de parlamentares. " - "Contate a administração de sua Casa Legislativa!".format(request.user)) + logger.error(f"user={username}. Usuário (user={request.user}) não cadastrado como votante na tela de parlamentares. " + "Contate a administração de sua Casa Legislativa!") msg = _("Usuário não cadastrado como votante na tela de parlamentares. Contate a administração de sua Casa Legislativa!") - context.update({ - 'error_message':msg - }) + context.update({'error_message': msg}) return render(request, template_name, context) context_vars = {'votante': votante} diff --git a/sapl/parlamentares/forms.py b/sapl/parlamentares/forms.py index 448535d40..31e216184 100755 --- a/sapl/parlamentares/forms.py +++ b/sapl/parlamentares/forms.py @@ -22,8 +22,8 @@ from sapl.crispy_layout_mixin import form_actions, to_row from sapl.rules import SAPL_GROUP_VOTANTE import django_filters -from .models import (ComposicaoColigacao, Filiacao, Frente, Legislatura, - Mandato, Parlamentar, Votante, Bloco) +from .models import (Coligacao, ComposicaoColigacao, Filiacao, Frente, Legislatura, + Mandato, Parlamentar, Partido, Votante, Bloco, FrenteParlamentar, BlocoMembro) class ImageThumbnailFileInput(ClearableFileInput): @@ -216,6 +216,18 @@ class ParlamentarForm(FileFieldCheckMixin, ModelForm): 'biografia': forms.Textarea( attrs={'id': 'texto-rico'})} + def save(self, commit=True): + parlamentar = super().save() + autor = parlamentar.autor.first() + + if autor: + usuarios = autor.operadores.all() + for u in usuarios: + u.is_active = parlamentar.ativo + u.save() + + return parlamentar + class ParlamentarFilterSet(django_filters.FilterSet): nome_parlamentar = django_filters.CharFilter( @@ -240,6 +252,52 @@ class ParlamentarFilterSet(django_filters.FilterSet): ) +class ColigacaoFilterSet(django_filters.FilterSet): + nome = django_filters.CharFilter(label=_('Nome da Coligação'), lookup_expr='icontains') + + class Meta: + model = Coligacao + fields = ['nome'] + + def __init__(self, *args, **kwargs): + super(ColigacaoFilterSet, self).__init__(*args, **kwargs) + + row0 = to_row([('nome', 12)]) + + self.form.helper = SaplFormHelper() + self.form.helper.form_method = 'GET' + self.form.helper.layout = Layout( + Fieldset(_('Pesquisa de Coligação'), + row0, + form_actions(label='Pesquisar'))) + + +class PartidoFilterSet(django_filters.FilterSet): + nome = django_filters.CharFilter(label=_('Nome do Partido'), + method='multifield_filter') + + class Meta: + model = Partido + fields = ['nome'] + + def multifield_filter(self, queryset, name, value): + return queryset.filter( + Q(sigla__icontains=value) | Q(nome__icontains=value)) + + def __init__(self, *args, **kwargs): + super(PartidoFilterSet, self).__init__(*args, **kwargs) + + row0 = to_row([('nome', 12)]) + + self.form.helper = SaplFormHelper() + self.form.helper.form_method = 'GET' + self.form.helper.layout = Layout( + Fieldset(_('Pesquisa de Partido'), + row0, + form_actions(label='Pesquisar')) + ) + + class ParlamentarCreateForm(ParlamentarForm): logger = logging.getLogger(__name__) @@ -267,17 +325,22 @@ class ParlamentarCreateForm(ParlamentarForm): return cleaned_data @transaction.atomic - def save(self, commit=True): + def save(self, commit=False): parlamentar = super(ParlamentarCreateForm, self).save(commit) - content_type = ContentType.objects.get_for_model(Parlamentar) - object_id = parlamentar.pk - tipo = TipoAutor.objects.get(content_type=content_type) - Autor.objects.create( - content_type=content_type, - object_id=object_id, - tipo=tipo, - nome=parlamentar.nome_parlamentar - ) + + if not self.instance.pk: + parlamentar.save() + content_type = ContentType.objects.get_for_model(Parlamentar) + object_id = parlamentar.pk + tipo = TipoAutor.objects.get(content_type=content_type) + Autor.objects.create( + content_type=content_type, + object_id=object_id, + tipo=tipo, + nome=parlamentar.nome_parlamentar + ) + else: + parlamentar.save() return parlamentar @@ -417,11 +480,7 @@ class FrenteForm(ModelForm): logger = logging.getLogger(__name__) def __init__(self, *args, **kwargs): - super(FrenteForm, self).__init__(*args, **kwargs) - self.fields['parlamentares'].queryset = Parlamentar.objects.filter( - ativo=True).order_by('nome_completo') - self.fields['parlamentares'].label = _('Parlamentares \ - (Mantenha CTRL pressionado para selecionar vários)') + super().__init__(*args, **kwargs) class Meta: model = Frente @@ -433,7 +492,7 @@ class FrenteForm(ModelForm): if not self.is_valid(): return self.cleaned_data - if cd['data_extincao'] and cd['data_criacao'] >= cd['data_extincao']: + if cd['data_extincao'] and cd['data_criacao'] > cd['data_extincao']: self.logger.error("Data Dissolução ({}) não pode ser anterior a Data Criação ({})." .format(cd['data_extincao'], cd['data_criacao'])) raise ValidationError( @@ -442,11 +501,11 @@ class FrenteForm(ModelForm): return cd @transaction.atomic - def save(self, commit=True): + def save(self, commit=False): frente = super(FrenteForm, self).save(commit) if not self.instance.pk: - frente = super(FrenteForm, self).save(commit) + frente.save() content_type = ContentType.objects.get_for_model(Frente) object_id = frente.pk tipo = TipoAutor.objects.get(descricao__icontains='Frente') @@ -456,9 +515,35 @@ class FrenteForm(ModelForm): tipo=tipo, nome=frente.nome ) + else: + frente.save() return frente +class FrenteParlamentarForm(ModelForm): + logger = logging.getLogger(__name__) + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.fields['frente'].widget = forms.HiddenInput() + + class Meta: + model = FrenteParlamentar + fields = '__all__' + + def clean(self): + cd = super().clean() + if not self.is_valid(): + return self.cleaned_data + + if cd['cargo'].cargo_unico: + frente_parlamentar = FrenteParlamentar.objects.filter(frente=cd['frente'], cargo=cd['cargo']) + if frente_parlamentar and not frente_parlamentar[0].parlamentar == cd['parlamentar']: + raise ValidationError(_("Cargo único já ocupado por outro parlamentar.")) + + return cd + + class VotanteForm(ModelForm): username = forms.CharField( @@ -614,15 +699,45 @@ class BlocoForm(ModelForm): return self.cleaned_data @transaction.atomic - def save(self, commit=True): + def save(self, commit=False): bloco = super(BlocoForm, self).save(commit) - content_type = ContentType.objects.get_for_model(Bloco) - object_id = bloco.pk - tipo = TipoAutor.objects.get(content_type=content_type) - Autor.objects.create( - content_type=content_type, - object_id=object_id, - tipo=tipo, - nome=bloco.nome - ) - return bloco \ No newline at end of file + if not self.instance.pk: + bloco.save() + content_type = ContentType.objects.get_for_model(Bloco) + object_id = bloco.pk + tipo = TipoAutor.objects.get(content_type=content_type) + Autor.objects.create( + content_type=content_type, + object_id=object_id, + tipo=tipo, + nome=bloco.nome + ) + else: + bloco.save() + return bloco + + +class BlocoMembroForm(ModelForm): + logger = logging.getLogger(__name__) + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.fields['bloco'].widget = forms.HiddenInput() + + class Meta: + model = BlocoMembro + fields = '__all__' + + def clean(self): + cd = super().clean() + if not self.is_valid(): + return self.cleaned_data + + if cd['cargo'].cargo_unico \ + and BlocoMembro.objects.filter(bloco=cd['bloco'], cargo=cd['cargo'], data_saida__isnull=True)\ + .exclude(pk=self.instance.pk).exists(): + raise ValidationError(_("Cargo único já ocupado por outro membro.")) + elif not cd['data_saida'] and BlocoMembro.objects.filter(parlamentar=cd['parlamentar'], data_saida__isnull=True).exists(): + raise ValidationError(_("Parlamentar já é membro do bloco parlamentar.")) + + return cd diff --git a/sapl/parlamentares/migrations/0032_frente_parlamentar.py b/sapl/parlamentares/migrations/0032_frente_parlamentar.py new file mode 100644 index 000000000..e2550c64e --- /dev/null +++ b/sapl/parlamentares/migrations/0032_frente_parlamentar.py @@ -0,0 +1,68 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.29 on 2020-08-07 12:50 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion + + +def cria_parlamentar_em_frente(apps, schema_editor): + Frente = apps.get_model("parlamentares", "Frente") + FrenteCargo = apps.get_model("parlamentares", "FrenteCargo") + FrenteParlamentar = apps.get_model("parlamentares", "FrenteParlamentar") + + cargo_membro = FrenteCargo.objects.create(nome_cargo="membro", cargo_unico=False) + parlamentares_frente = [] + for frente in Frente.objects.all().prefetch_related("parlamentares"): + for parlamentar in frente.parlamentares.all(): + parlamentares_frente.append( + FrenteParlamentar( + frente=frente, + parlamentar=parlamentar, + cargo=cargo_membro, + data_entrada=frente.data_criacao)) + FrenteParlamentar.objects.bulk_create(parlamentares_frente) + + +class Migration(migrations.Migration): + + dependencies = [ + ('parlamentares', '0031_auto_20200407_1406'), + ] + + operations = [ + migrations.CreateModel( + name='FrenteCargo', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('nome_cargo', models.CharField(max_length=80, verbose_name='Cargo de frente parlamentar')), + ('cargo_unico', models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=False, verbose_name='Cargo único?')), + ], + options={ + 'verbose_name': 'Cargo de Frente Parlamentar', + 'verbose_name_plural': 'Cargos de Frente Parlamentar', + 'ordering': ('cargo_unico', 'nome_cargo'), + }, + ), + migrations.CreateModel( + name='FrenteParlamentar', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('frente', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='parlamentares.Frente',verbose_name='Frente parlamentar')), + ('parlamentar', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='parlamentares.Parlamentar', verbose_name='Parlamentar')), + ('cargo', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='parlamentares.FrenteCargo', verbose_name='Cargo na frente parlamentar')), + ('data_entrada', models.DateField(verbose_name='Data Entrada')), + ('data_saida', models.DateField(blank=True, null=True, verbose_name='Data Saída')), + ], + options={ + 'verbose_name': 'Parlamentar de frente parlamentar', + 'verbose_name_plural': 'Parlamentares de frente parlamentar', + 'ordering': ('frente', 'parlamentar', 'cargo'), + }, + ), + migrations.RunPython(cria_parlamentar_em_frente), + migrations.RemoveField( + model_name='frente', + name='parlamentares', + ), + ] diff --git a/sapl/parlamentares/migrations/0033_auto_20210103_1015.py b/sapl/parlamentares/migrations/0033_auto_20210103_1015.py new file mode 100644 index 000000000..b4a8373b3 --- /dev/null +++ b/sapl/parlamentares/migrations/0033_auto_20210103_1015.py @@ -0,0 +1,88 @@ +# Generated by Django 2.2.13 on 2021-01-03 13:15 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('parlamentares', '0032_frente_parlamentar'), + ] + + operations = [ + migrations.CreateModel( + name='BlocoCargo', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('nome_cargo', models.CharField(max_length=120, verbose_name='Cargo do bloco parlamentar')), + ('cargo_unico', models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=False, verbose_name='Cargo único?')), + ], + options={ + 'verbose_name': 'Cargo de Bloco Parlamentar', + 'verbose_name_plural': 'Cargos de Bloco Parlamentar', + 'ordering': ('cargo_unico', 'nome_cargo'), + }, + ), + migrations.AlterModelOptions( + name='bloco', + options={'ordering': ('partidos__nome', 'nome'), 'verbose_name': 'Bloco Parlamentar', 'verbose_name_plural': 'Blocos Parlamentares'}, + ), + migrations.AlterModelOptions( + name='cargomesa', + options={'ordering': ('unico', 'descricao'), 'verbose_name': 'Cargo na Mesa', 'verbose_name_plural': 'Cargos na Mesa'}, + ), + migrations.AlterModelOptions( + name='coligacao', + options={'ordering': ('legislatura', 'nome'), 'verbose_name': 'Coligação', 'verbose_name_plural': 'Coligações'}, + ), + migrations.AlterModelOptions( + name='composicaocoligacao', + options={'ordering': ('partido',), 'verbose_name': 'Composição Coligação', 'verbose_name_plural': 'Composição Coligações'}, + ), + migrations.AlterModelOptions( + name='composicaomesa', + options={'ordering': ('cargo', '-sessao_legislativa', 'parlamentar'), 'verbose_name': 'Ocupação de cargo na Mesa', 'verbose_name_plural': 'Ocupações de cargo na Mesa'}, + ), + migrations.AlterModelOptions( + name='dependente', + options={'ordering': ('parlamentar', 'nome'), 'verbose_name': 'Dependente', 'verbose_name_plural': 'Dependentes'}, + ), + migrations.AlterModelOptions( + name='frente', + options={'ordering': ('nome', '-data_criacao'), 'verbose_name': 'Frente Parlamentar', 'verbose_name_plural': 'Frentes Parlamentares'}, + ), + migrations.AlterModelOptions( + name='legislatura', + options={'ordering': ('-numero', '-data_inicio', '-data_fim'), 'verbose_name': 'Legislatura', 'verbose_name_plural': 'Legislaturas'}, + ), + migrations.AlterModelOptions( + name='mandato', + options={'ordering': ('parlamentar', 'legislatura__numero'), 'verbose_name': 'Mandato', 'verbose_name_plural': 'Mandatos'}, + ), + migrations.AlterModelOptions( + name='votante', + options={'ordering': ('parlamentar', '-data'), 'permissions': (('can_vote', 'Can Vote'),), 'verbose_name': 'Usuário Votante', 'verbose_name_plural': 'Usuários Votantes'}, + ), + migrations.AlterField( + model_name='bloco', + name='nome', + field=models.CharField(max_length=120, verbose_name='Nome do Bloco'), + ), + migrations.CreateModel( + name='BlocoMembro', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('data_entrada', models.DateField(verbose_name='Data Entrada')), + ('data_saida', models.DateField(blank=True, null=True, verbose_name='Data Saída')), + ('bloco', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='parlamentares.Bloco', verbose_name='Bloco parlamentar')), + ('cargo', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='parlamentares.BlocoCargo', verbose_name='Cargo na bloco parlamentar')), + ('parlamentar', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='parlamentares.Parlamentar', verbose_name='Parlamentar')), + ], + options={ + 'verbose_name': 'Membro de bloco parlamentar', + 'verbose_name_plural': 'Membros de bloco parlamentar', + 'ordering': ('bloco', 'parlamentar', 'cargo'), + }, + ), + ] diff --git a/sapl/parlamentares/migrations/0034_auto_20210303_1428.py b/sapl/parlamentares/migrations/0034_auto_20210303_1428.py new file mode 100644 index 000000000..51bb3adfb --- /dev/null +++ b/sapl/parlamentares/migrations/0034_auto_20210303_1428.py @@ -0,0 +1,17 @@ +# Generated by Django 2.2.13 on 2021-03-03 17:28 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('parlamentares', '0033_auto_20210103_1015'), + ] + + operations = [ + migrations.AlterModelOptions( + name='bloco', + options={'ordering': ('nome',), 'verbose_name': 'Bloco Parlamentar', 'verbose_name_plural': 'Blocos Parlamentares'}, + ), + ] diff --git a/sapl/parlamentares/migrations/0035_auto_20210315_1522.py b/sapl/parlamentares/migrations/0035_auto_20210315_1522.py new file mode 100644 index 000000000..398011606 --- /dev/null +++ b/sapl/parlamentares/migrations/0035_auto_20210315_1522.py @@ -0,0 +1,43 @@ +# Generated by Django 2.2.13 on 2021-03-15 18:22 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +def remove_grupo_votante_de_usuario(apps, schema_editor): + Group = apps.get_model('auth', 'Group') + User = apps.get_model('auth', 'User') + + g, created = Group.objects.get_or_create(name='Votante') + + # usuários do grupo votante sem vínculo com parlamentar + users_votantes = g.user_set.filter(votante_set__isnull=True) + for u in users_votantes: + u.groups.remove(g) + + +class Migration(migrations.Migration): + + dependencies = [ + ('parlamentares', '0034_auto_20210303_1428'), + ] + + operations = [ + migrations.AlterField( + model_name='votante', + name='parlamentar', + field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, + related_name='votante_set', to='parlamentares.Parlamentar', verbose_name='Parlamentar'), + ), + migrations.AlterField( + model_name='votante', + name='user', + field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, + related_name='votante_set', to=settings.AUTH_USER_MODEL, verbose_name='User'), + ), + + migrations.RunPython(remove_grupo_votante_de_usuario), + + + ] diff --git a/sapl/parlamentares/models.py b/sapl/parlamentares/models.py index 03d374e19..423481b56 100644 --- a/sapl/parlamentares/models.py +++ b/sapl/parlamentares/models.py @@ -25,6 +25,7 @@ class Legislatura(models.Model): ordering = ['-data_inicio'] verbose_name = _('Legislatura') verbose_name_plural = _('Legislaturas') + ordering = ('-numero', '-data_inicio', '-data_fim') def atual(self): current_year = timezone.now().year @@ -89,6 +90,7 @@ class Coligacao(models.Model): class Meta: verbose_name = _('Coligação') verbose_name_plural = _('Coligações') + ordering = ('legislatura', 'nome') def __str__(self): return self.nome @@ -141,6 +143,7 @@ class ComposicaoColigacao(models.Model): class Meta: verbose_name = (_('Composição Coligação')) verbose_name_plural = (_('Composição Coligações')) + ordering = ('partido',) def __str__(self): return _('%(partido)s - %(coligacao)s') % { @@ -268,6 +271,7 @@ class Parlamentar(models.Model): verbose_name=_('Ativo na Casa?')) biografia = models.TextField( blank=True, verbose_name=_('Biografia')) + fotografia = ImageCropField( verbose_name=_('Fotografia'), upload_to=foto_upload_path, validators=[restringe_tipos_de_arquivo_img], null=True, blank=True) @@ -374,6 +378,7 @@ class Dependente(models.Model): class Meta: verbose_name = _('Dependente') verbose_name_plural = _('Dependentes') + ordering = ('parlamentar', 'nome') def __str__(self): return self.nome @@ -456,6 +461,7 @@ class Mandato(models.Model): class Meta: verbose_name = _('Mandato') verbose_name_plural = _('Mandatos') + ordering = ('parlamentar', 'legislatura__numero') def __str__(self): return _('%(parlamentar)s %(legislatura)s') % { @@ -485,6 +491,7 @@ class CargoMesa(models.Model): class Meta: verbose_name = _('Cargo na Mesa') verbose_name_plural = _('Cargos na Mesa') + ordering = ('unico', 'descricao') def __str__(self): return self.descricao @@ -501,6 +508,7 @@ class ComposicaoMesa(models.Model): class Meta: verbose_name = _('Ocupação de cargo na Mesa') verbose_name_plural = _('Ocupações de cargo na Mesa') + ordering = ('cargo', '-sessao_legislativa', 'parlamentar') def __str__(self): return _('%(parlamentar)s - %(cargo)s') % { @@ -518,13 +526,12 @@ class Frente(models.Model): nome = models.CharField( max_length=80, verbose_name=_('Nome da Frente')) - parlamentares = models.ManyToManyField(Parlamentar, - blank=True, - verbose_name=_('Parlamentares')) + descricao = models.TextField(blank=True, verbose_name=_('Descrição')) data_criacao = models.DateField(verbose_name=_('Data Criação')) data_extincao = models.DateField( - blank=True, null=True, verbose_name=_('Data Dissolução')) - descricao = models.TextField(blank=True, verbose_name=_('Descrição')) + blank=True, + null=True, + verbose_name=_('Data Dissolução')) # campo conceitual de reversão genérica para o model Autor que dá a # o meio possível de localização de tipos de autores. @@ -534,13 +541,15 @@ class Frente(models.Model): fields_search=( ('nome', '__icontains'), ('descricao', '__icontains'), - ('parlamentares__filiacao__partido__sigla', '__icontains'), - ('parlamentares__filiacao__partido__nome', '__icontains'), - )) + ('frenteparlamentar__parlamentar__filiacao__partido__sigla', '__icontains'), + ('frenteparlamentar__parlamentar__filiacao__partido__nome', '__icontains'), + ) + ) class Meta: verbose_name = _('Frente Parlamentar') verbose_name_plural = _('Frentes Parlamentares') + ordering = ('nome', '-data_criacao') def get_parlamentares(self): return Parlamentar.objects.filter(ativo=True) @@ -549,13 +558,61 @@ class Frente(models.Model): return self.nome +@reversion.register() +class FrenteCargo(models.Model): + nome_cargo = models.CharField( + max_length=80, + verbose_name=_('Cargo de frente parlamentar')) + cargo_unico = models.BooleanField( + default=False, + choices=YES_NO_CHOICES, + verbose_name=_('Cargo único?')) + + class Meta: + verbose_name = _('Cargo de Frente Parlamentar') + verbose_name_plural = _('Cargos de Frente Parlamentar') + ordering = ('cargo_unico', 'nome_cargo',) + + def __str__(self): + return f"{self.nome_cargo}" + + +@reversion.register() +class FrenteParlamentar(models.Model): + frente = models.ForeignKey( + Frente, + verbose_name=_('Frente parlamentar'), + on_delete=models.CASCADE) + parlamentar = models.ForeignKey( + Parlamentar, + verbose_name=_('Parlamentar'), + on_delete=models.CASCADE) + cargo = models.ForeignKey( + FrenteCargo, + verbose_name=_('Cargo na frente parlamentar'), + on_delete=models.PROTECT) + data_entrada = models.DateField(verbose_name=_('Data Entrada')) + data_saida = models.DateField( + blank=True, + null=True, + verbose_name=_('Data Saída')) + + class Meta: + verbose_name = _('Parlamentar de frente parlamentar') + verbose_name_plural = _('Parlamentares de frente parlamentar') + ordering = ('frente', 'parlamentar', 'cargo') + + def __str__(self): + return f"{self.parlamentar} - {self.cargo.nome_cargo} - {self.frente}" + + class Votante(models.Model): parlamentar = models.ForeignKey( Parlamentar, verbose_name=_('Parlamentar'), - on_delete=models.PROTECT, related_name='parlamentar') + on_delete=models.PROTECT, related_name='votante_set') user = models.ForeignKey( get_settings_auth_user_model(), on_delete=models.PROTECT, - verbose_name=_('User'), related_name='user') + verbose_name=_('User'), related_name='votante_set') data = models.DateTimeField( verbose_name=_('Data'), auto_now_add=True, max_length=30, null=True, blank=True) @@ -566,6 +623,7 @@ class Votante(models.Model): permissions = ( ('can_vote', _('Can Vote')), ) + ordering = ('parlamentar', '-data') def __str__(self): return self.user.username @@ -577,14 +635,21 @@ class Bloco(models.Model): * blocos podem existir por mais de uma legislatura ''' nome = models.CharField( - max_length=80, verbose_name=_('Nome do Bloco')) + max_length=120, + verbose_name=_('Nome do Bloco')) partidos = models.ManyToManyField( - Partido, blank=True, verbose_name=_('Partidos')) + Partido, + blank=True, + verbose_name=_('Partidos')) data_criacao = models.DateField( - blank=False, null=True, verbose_name=_('Data Criação')) + blank=False, null=True, + verbose_name=_('Data Criação')) data_extincao = models.DateField( - blank=True, null=True, verbose_name=_('Data Dissolução')) - descricao = models.TextField(blank=True, verbose_name=_('Descrição')) + blank=True, null=True, + verbose_name=_('Data Dissolução')) + descricao = models.TextField( + blank=True, + verbose_name=_('Descrição')) # campo conceitual de reversão genérica para o model Autor que dá a # o meio possível de localização de tipos de autores. @@ -600,6 +665,54 @@ class Bloco(models.Model): class Meta: verbose_name = _('Bloco Parlamentar') verbose_name_plural = _('Blocos Parlamentares') + ordering = ('nome',) def __str__(self): return self.nome + + +@reversion.register() +class BlocoCargo(models.Model): + nome_cargo = models.CharField( + max_length=120, + verbose_name=_('Cargo do bloco parlamentar')) + cargo_unico = models.BooleanField( + default=False, + choices=YES_NO_CHOICES, + verbose_name=_('Cargo único?')) + + class Meta: + verbose_name = _('Cargo de Bloco Parlamentar') + verbose_name_plural = _('Cargos de Bloco Parlamentar') + ordering = ('cargo_unico', 'nome_cargo',) + + def __str__(self): + return f"{self.nome_cargo}" + + +@reversion.register() +class BlocoMembro(models.Model): + bloco = models.ForeignKey( + Bloco, + verbose_name=_('Bloco parlamentar'), + on_delete=models.CASCADE) + parlamentar = models.ForeignKey( + Parlamentar, + verbose_name=_('Parlamentar'), + on_delete=models.CASCADE) + cargo = models.ForeignKey( + BlocoCargo, + verbose_name=_('Cargo na bloco parlamentar'), + on_delete=models.PROTECT) + data_entrada = models.DateField(verbose_name=_('Data Entrada')) + data_saida = models.DateField( + blank=True, null=True, + verbose_name=_('Data Saída')) + + class Meta: + verbose_name = _('Membro de bloco parlamentar') + verbose_name_plural = _('Membros de bloco parlamentar') + ordering = ('bloco', 'parlamentar', 'cargo') + + def __str__(self): + return f"{self.parlamentar} - {self.cargo.nome_cargo} - {self.bloco}" diff --git a/sapl/parlamentares/tests/test_parlamentares.py b/sapl/parlamentares/tests/test_parlamentares.py index 3cb2b7d90..4e69cd375 100644 --- a/sapl/parlamentares/tests/test_parlamentares.py +++ b/sapl/parlamentares/tests/test_parlamentares.py @@ -1,5 +1,5 @@ import pytest -from django.core.urlresolvers import reverse +from django.urls import reverse from django.utils.translation import ugettext_lazy as _ from model_bakery import baker @@ -33,7 +33,8 @@ def test_incluir_parlamentar_errors(admin_client): url = reverse('sapl.parlamentares:parlamentar_create') response = admin_client.post(url) erros_esperados = {campo: ['Este campo é obrigatório.'] - for campo in ['nome_parlamentar', + for campo in ['ativo', + 'nome_parlamentar', 'nome_completo', 'sexo', ]} @@ -113,7 +114,7 @@ def test_mandato_submit(admin_client): baker.make(Parlamentar, pk=14) baker.make(Legislatura, pk=5) - admin_client.post(reverse('sapl.parlamentares:mandato_create', + response = admin_client.post(reverse('sapl.parlamentares:mandato_create', kwargs={'pk': 14}), { 'parlamentar': 14, # hidden field @@ -124,10 +125,10 @@ def test_mandato_submit(admin_client): Legislatura.objects.get(id=5).data_fim, 'data_expedicao_diploma': '2016-03-22', 'observacao': 'Observação do mandato', - 'salvar': 'salvar' + 'salvar': 'salvar', + 'titular': True }, follow=True) - mandato = Mandato.objects.first() assert str(_('Observação do mandato')) == str(_(mandato.observacao)) @@ -192,6 +193,7 @@ def test_mandato_form_datas_invalidas(): form = MandatoForm(data={ 'parlamentar': str(parlamentar.pk), 'legislatura': str(legislatura.pk), + 'titular': True, 'data_expedicao_diploma': '2016-11-01', 'data_inicio_mandato': '2016-12-12', 'data_fim_mandato': '2019-10-09' @@ -204,6 +206,7 @@ def test_mandato_form_datas_invalidas(): form = MandatoForm(data={ 'parlamentar': str(parlamentar.pk), 'legislatura': str(legislatura.pk), + 'titular': True, 'data_expedicao_diploma': '2016-11-01', 'data_inicio_mandato': '2017-02-02', 'data_fim_mandato': '2022-01-01' diff --git a/sapl/parlamentares/urls.py b/sapl/parlamentares/urls.py index 60fbf3232..88a46c69b 100644 --- a/sapl/parlamentares/urls.py +++ b/sapl/parlamentares/urls.py @@ -21,7 +21,9 @@ from sapl.parlamentares.views import (CargoMesaCrud, ColigacaoCrud, remove_parlamentar_composicao, parlamentares_filiados, BlocoCrud, PesquisarParlamentarView, VincularParlamentarView, - get_sessoes_legislatura) + get_sessoes_legislatura, FrenteCargoCrud, FrenteParlamentarCrud, + get_parlamentar_frentes, PesquisarColigacaoView, PesquisarPartidoView, + BlocoCargoCrud, BlocoMembroCrud) from .apps import AppConfig @@ -33,7 +35,7 @@ urlpatterns = [ FiliacaoCrud.get_urls() + MandatoCrud.get_urls() + ParticipacaoParlamentarCrud.get_urls() + ProposicaoParlamentarCrud.get_urls() + - RelatoriaParlamentarCrud.get_urls() + FrenteList.get_urls() + + RelatoriaParlamentarCrud.get_urls() + VotanteView.get_urls() )), @@ -43,19 +45,25 @@ urlpatterns = [ url(r'^parlamentar/(?P\d+)/materias$', ParlamentarMateriasView.as_view(), name='parlamentar_materias'), + url(r'^parlamentar/(?P\d+)/frentes/$', get_parlamentar_frentes, name='parlamentar_frentes'), + url(r'^parlamentar/vincular-parlamentar/$', VincularParlamentarView.as_view(), name='vincular_parlamentar'), - url(r'^parlamentar/coligacao-legislatura/', - coligacao_legislatura, name="coligacao_legislatura"), + url(r'^parlamentar/coligacao-legislatura/', coligacao_legislatura, name="coligacao_legislatura"), + url(r'^sistema/coligacao/', include(ColigacaoCrud.get_urls() + ComposicaoColigacaoCrud.get_urls())), + url(r'^sistema/pesquisar-coligacao/', PesquisarColigacaoView.as_view(), name='pesquisar_coligacao'), + + url(r'^sistema/coligacao/', include(ColigacaoCrud.get_urls() + ComposicaoColigacaoCrud.get_urls())), + + url(r'^sistema/bloco/', include(BlocoCrud.get_urls())), + url(r'^sistema/bloco-cargo/', include(BlocoCargoCrud.get_urls())), + url(r'^sistema/bloco-membros/', include(BlocoMembroCrud.get_urls())), + + url(r'^sistema/frente/', include(FrenteCrud.get_urls())), + url(r'^sistema/frente-cargo/', include(FrenteCargoCrud.get_urls())), + url(r'^sistema/frente-parlamentares/', include(FrenteParlamentarCrud.get_urls())), - url(r'^sistema/coligacao/', - include(ColigacaoCrud.get_urls() + - ComposicaoColigacaoCrud.get_urls())), - url(r'^sistema/bloco/', - include(BlocoCrud.get_urls())), - url(r'^sistema/frente/', - include(FrenteCrud.get_urls())), url(r'^sistema/frente/atualiza-lista-parlamentares', frente_atualiza_lista_parlamentares, name='atualiza_lista_parlamentares'), @@ -73,7 +81,9 @@ urlpatterns = [ include(TipoAfastamentoCrud.get_urls())), url(r'^sistema/parlamentar/tipo-militar/', include(TipoMilitarCrud.get_urls())), + url(r'^sistema/parlamentar/partido/', include(PartidoCrud.get_urls())), + url(r'^sistema/parlamentar/pesquisar-partido/', PesquisarPartidoView.as_view(), name='pesquisar_partido'), url(r'^sistema/parlamentar/partido/(?P\d+)/filiados$', parlamentares_filiados, name='parlamentares_filiados'), url(r'^sistema/mesa-diretora/sessao-legislativa/', diff --git a/sapl/parlamentares/views.py b/sapl/parlamentares/views.py index 50f042dec..aea6d53df 100644 --- a/sapl/parlamentares/views.py +++ b/sapl/parlamentares/views.py @@ -4,15 +4,16 @@ import logging from django.contrib import messages from django.contrib.auth.mixins import PermissionRequiredMixin +from django.contrib.auth.models import Group from django.contrib.contenttypes.models import ContentType from django.core.exceptions import MultipleObjectsReturned, ObjectDoesNotExist -from django.core.urlresolvers import reverse, reverse_lazy from django.db.models import F, Q from django.db.models.aggregates import Count from django.http import JsonResponse from django.http.response import HttpResponseRedirect from django.shortcuts import render from django.templatetags.static import static +from django.urls import reverse, reverse_lazy from django.utils import timezone from django.utils.datastructures import MultiValueDictKeyError from django.utils.translation import ugettext_lazy as _ @@ -22,7 +23,6 @@ from django.views.generic.edit import UpdateView from django_filters.views import FilterView from image_cropping.utils import get_backend - from sapl.base.forms import SessaoLegislativaForm, PartidoForm from sapl.base.models import Autor from sapl.comissoes.models import Participacao @@ -31,20 +31,22 @@ from sapl.crud.base import (RP_CHANGE, RP_DETAIL, RP_LIST, Crud, CrudAux, MasterDetailCrud, make_pagination) from sapl.materia.models import Autoria, Proposicao, Relatoria from sapl.parlamentares.apps import AppConfig +from sapl.rules import SAPL_GROUP_VOTANTE from sapl.utils import (parlamentares_ativos, show_results_filter_set) -from .forms import (FiliacaoForm, FrenteForm, LegislaturaForm, MandatoForm, - ParlamentarCreateForm, ParlamentarForm, VotanteForm, - ParlamentarFilterSet, VincularParlamentarForm, - BlocoForm) - +from .forms import (ColigacaoFilterSet, FiliacaoForm, FrenteForm, LegislaturaForm, MandatoForm, + ParlamentarCreateForm, ParlamentarForm, VotanteForm, + ParlamentarFilterSet, PartidoFilterSet, VincularParlamentarForm, + BlocoForm, FrenteParlamentarForm, BlocoMembroForm) from .models import (CargoMesa, Coligacao, ComposicaoColigacao, ComposicaoMesa, Dependente, Filiacao, Frente, Legislatura, Mandato, NivelInstrucao, Parlamentar, Partido, SessaoLegislativa, SituacaoMilitar, TipoAfastamento, TipoDependente, Votante, - Bloco) + Bloco, FrenteCargo, FrenteParlamentar, BlocoCargo, BlocoMembro) +FrenteCargoCrud = CrudAux.build(FrenteCargo, 'frente_cargo') +BlocoCargoCrud = CrudAux.build(BlocoCargo, 'bloco_cargo') CargoMesaCrud = CrudAux.build(CargoMesa, 'cargo_mesa') TipoDependenteCrud = CrudAux.build(TipoDependente, 'tipo_dependente') NivelInstrucaoCrud = CrudAux.build(NivelInstrucao, 'nivel_instrucao') @@ -74,6 +76,10 @@ class PartidoCrud(CrudAux): class UpdateView(CrudAux.UpdateView): form_class = PartidoForm + class DeleteView(CrudAux.DeleteView): + def get_success_url(self): + return reverse('sapl.parlamentares:pesquisar_partido') + class VotanteView(MasterDetailCrud): model = Votante @@ -96,6 +102,10 @@ class VotanteView(MasterDetailCrud): def delete(self, *args, **kwargs): obj = self.get_object() + + g = Group.objects.filter(name=SAPL_GROUP_VOTANTE)[0] + obj.user.groups.remove(g) + obj.delete() return HttpResponseRedirect( reverse('sapl.parlamentares:votante_list', @@ -229,6 +239,104 @@ class PesquisarParlamentarView(FilterView): return self.render_to_response(context) +class PesquisarColigacaoView(FilterView): + model = Coligacao + filterset_class = ColigacaoFilterSet + paginate_by = 10 + + def get_filterset_kwargs(self, filterset_class): + super(PesquisarColigacaoView, self).get_filterset_kwargs(filterset_class) + + return ({ + 'data': self.request.GET or None, + 'queryset': self.get_queryset().order_by('nome').distinct() + }) + + def get_context_data(self, **kwargs): + context = super(PesquisarColigacaoView, + self).get_context_data(**kwargs) + + paginator = context['paginator'] + page_obj = context['page_obj'] + + context.update({ + 'page_range': make_pagination(page_obj.number, paginator.num_pages), + 'NO_ENTRIES_MSG': 'Nenhuma coligação encontrada!', + 'title': _('Coligações') + }) + + return context + + def get(self, request, *args, **kwargs): + super(PesquisarColigacaoView, self).get(request) + + data = self.filterset.data + url = '' + if data: + url = "&" + str(self.request.META['QUERY_STRING']) + if url.startswith("&page"): + ponto_comeco = url.find('nome=') - 1 + url = url[ponto_comeco:] + + context = self.get_context_data(filter=self.filterset, + object_list=self.object_list, + filter_url=url, + numero_res=len(self.object_list)) + + context['show_results'] = show_results_filter_set( + self.request.GET.copy()) + + return self.render_to_response(context) + + +class PesquisarPartidoView(FilterView): + model = Partido + filterset_class = PartidoFilterSet + paginate_by = 10 + + def get_filterset_kwargs(self, filterset_class): + super(PesquisarPartidoView, self).get_filterset_kwargs(filterset_class) + + return ({ + 'data': self.request.GET or None, + 'queryset': self.get_queryset().order_by('nome').distinct() + }) + + def get_context_data(self, **kwargs): + context = super(PesquisarPartidoView, self).get_context_data(**kwargs) + + paginator = context['paginator'] + page_obj = context['page_obj'] + + context.update({ + 'page_range': make_pagination(page_obj.number, paginator.num_pages), + 'NO_ENTRIES_MSG': 'Nenhum partido encontrado!', + 'title': _('Partidos') + }) + + return context + + def get(self, request, *args, **kwargs): + super(PesquisarPartidoView, self).get(request) + + data = self.filterset.data + url = '' + if data: + url = "&" + str(self.request.META['QUERY_STRING']) + if url.startswith("&page"): + ponto_comeco = url.find('nome=') - 1 + url = url[ponto_comeco:] + + context = self.get_context_data(filter=self.filterset, + object_list=self.object_list, + filter_url=url, + numero_res=len(self.object_list)) + context['show_results'] = show_results_filter_set( + self.request.GET.copy()) + + return self.render_to_response(context) + + class ParticipacaoParlamentarCrud(CrudBaseForListAndDetailExternalAppView): model = Participacao parent_field = 'parlamentar' @@ -253,17 +361,17 @@ class ParticipacaoParlamentarCrud(CrudBaseForListAndDetailExternalAppView): comissoes = [] for p in object_list: - comissao = [ - (p.composicao.comissao.nome, reverse( - 'sapl.comissoes:comissao_detail', kwargs={ - 'pk': p.composicao.comissao.pk})), - (p.cargo.nome, None), - (p.composicao.periodo.data_inicio.strftime( - "%d/%m/%Y") + ' a ' + - p.composicao.periodo.data_fim.strftime("%d/%m/%Y"), - None) - ] - comissoes.append(comissao) + comissao = [ + (p.composicao.comissao.nome, reverse( + 'sapl.comissoes:comissao_detail', kwargs={ + 'pk': p.composicao.comissao.pk})), + (p.cargo.nome, None), + (p.composicao.periodo.data_inicio.strftime( + "%d/%m/%Y") + ' a ' + + p.composicao.periodo.data_fim.strftime("%d/%m/%Y"), + None) + ] + comissoes.append(comissao) return comissoes def get_headers(self): @@ -296,8 +404,7 @@ class ColigacaoCrud(CrudAux): if not coligacao.numero_votos: coligacao.numero_votos = '0' - context['subnav_template_name'] = \ - 'parlamentares/subnav_coligacao.yaml' + context['subnav_template_name'] = 'parlamentares/subnav_coligacao.yaml' return context @@ -305,20 +412,24 @@ class ColigacaoCrud(CrudAux): def get_context_data(self, **kwargs): context = super(UpdateView, self).get_context_data(kwargs=kwargs) - - context['subnav_template_name'] = \ - 'parlamentares/subnav_coligacao.yaml' + context['subnav_template_name'] = 'parlamentares/subnav_coligacao.yaml' return context + class DeleteView(CrudAux.DeleteView): + def get_success_url(self): + return reverse('sapl.parlamentares:pesquisar_coligacao') + def coligacao_legislatura(request): try: - coligacoes = Coligacao.objects.filter(legislatura=request.GET['legislatura']).order_by('nome') + coligacoes = Coligacao.objects.filter( + legislatura=request.GET['legislatura']).order_by('nome') except: coligacoes = [] - lista_coligacoes = [(coligacao.id, str(coligacao)) for coligacao in coligacoes] + lista_coligacoes = [(coligacao.id, str(coligacao)) + for coligacao in coligacoes] return JsonResponse({'coligacoes': lista_coligacoes}) @@ -384,8 +495,7 @@ class FrenteCrud(Crud): model = Frente help_topic = 'tipo_situa_militar' public = [RP_DETAIL, RP_LIST] - list_field_names = ['nome', 'data_criacao', - 'data_extincao', 'parlamentares'] + list_field_names = ['nome', 'data_criacao', 'data_extincao'] class BaseMixin(Crud.BaseMixin): def get_context_data(self, **kwargs): @@ -403,6 +513,65 @@ class FrenteCrud(Crud): form_class = FrenteForm +class FrenteParlamentarCrud(MasterDetailCrud): + model = FrenteParlamentar + parent_field = 'frente' + help_topic = 'frente_parlamentares' + public = [RP_LIST, RP_DETAIL] + + class CreateView(MasterDetailCrud.CreateView): + form_class = FrenteParlamentarForm + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context['subnav_template_name'] = '' + return context + + def get_initial(self): + self.initial['frente'] = Frente.objects.get(pk=self.kwargs['pk']) + return self.initial + + class UpdateView(MasterDetailCrud.UpdateView): + form_class = FrenteParlamentarForm + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context['subnav_template_name'] = '' + return context + + class DetailView(MasterDetailCrud.DetailView): + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context['subnav_template_name'] = '' + return context + + class ListView(MasterDetailCrud.ListView): + layout_key = 'FrenteParlamentarList' + ordering = ('-cargo__cargo_unico', 'parlamentar') + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context['subnav_template_name'] = '' + return context + + +def get_parlamentar_frentes(request, pk): + template_name = 'parlamentares/parlamentar_frentes_list.html' + frentes = [f for f in FrenteParlamentar.objects.filter(parlamentar_id=pk) + .select_related('frente', 'cargo') + .order_by('-data_entrada', '-data_saida')] + + context = { + 'subnav_template_name': 'parlamentares/subnav.yaml', + 'root_pk': pk, + 'nome_parlamentar': Parlamentar.objects.get(id=pk).nome_parlamentar, + 'frentes': frentes, + 'num_frentes': len(frentes) + } + + return render(request, template_name, context) + + class MandatoCrud(MasterDetailCrud): model = Mandato parent_field = 'parlamentar' @@ -585,7 +754,8 @@ class ParlamentarCrud(Crud): ". Tentando obter id da legislatura.") return int(self.request.GET['pk']) except: - self.logger.warning("User=" + username + ". Legislatura não possui ID. Buscando em todas as entradas.") + self.logger.warning( + "User=" + username + ". Legislatura não possui ID. Buscando em todas as entradas.") legislaturas = Legislatura.objects.all() for l in legislaturas: if l.atual(): @@ -659,7 +829,7 @@ class ParlamentarMateriasView(FormView): object_id=parlamentar_pk) except ObjectDoesNotExist: mensagem = _( - 'Este Parlamentar (pk={}) não é Autor de matéria.'.format(parlamentar_pk)) + 'Este Parlamentar não está associado como autor de matéria.'.format(parlamentar_pk)) self.logger.error( "user=" + username + ". Este Parlamentar (pk={}) não é Autor de matéria.".format(parlamentar_pk)) messages.add_message(request, messages.ERROR, mensagem) @@ -813,8 +983,9 @@ def altera_field_mesa(request): # é alterado o campo de sessão ou feita alguma operação # de inclusão/remoção. if request.GET['sessao']: - sessao_selecionada = SessaoLegislativa.objects.get(id=request.GET['sessao']) - + sessao_selecionada = SessaoLegislativa.objects.get( + id=request.GET['sessao']) + # Caso a mudança tenha sido no campo legislatura, a sessão # atual deve ser a primeira daquela legislatura else: @@ -1016,42 +1187,42 @@ def altera_field_mesa_public_view(request): """ logger = logging.getLogger(__name__) username = request.user.username - legislatura = request.GET['legislatura'] - sessoes = SessaoLegislativa.objects.filter( - legislatura=legislatura).order_by('-data_inicio') + legislatura = request.GET.get('legislatura') + if legislatura: + legislatura = Legislatura.objects.get(id=legislatura) + else: + legislatura = Legislatura.objects.order_by('-data_inicio').first() + + sessoes = legislatura.sessaolegislativa_set.filter( + tipo='O').order_by('-data_inicio') if not sessoes: return JsonResponse({'msg': ('Nenhuma sessão encontrada!', 0)}) - # Verifica se já tem uma sessão selecionada. Ocorre quando - # é alterado o campo de sessão - if request.GET['sessao']: - sessao_selecionada = request.GET['sessao'] - # Caso a mudança tenha sido no campo legislatura, a sessão - # atual deve ser a primeira daquela legislatura - else: + # Verifica se já tem uma sessão selecionada. Ocorre quando é alterado o + # campo de sessão + + sessao_selecionada = request.GET.get('sessao') + if not sessao_selecionada: try: year = timezone.now().year - logger.info("user=" + username + - ". Tentando obter sessões com data_inicio.ano = {}.".format(year)) + logger.info( + f"user={username}. Tentando obter sessões com data_inicio.ano = {year}.") sessao_selecionada = sessoes.get(data_inicio__year=year).id except ObjectDoesNotExist: - logger.error("user=" + username + ". Sessões não encontradas com com data_inicio.ano = {}. " - "Selecionado o id da primeira sessão.".format(year)) + logger.error(f"user={username}. Sessões não encontradas com com data_inicio.ano = {year}. " + "Selecionado o id da primeira sessão.") sessao_selecionada = sessoes.first().id # Atualiza os componentes da view após a mudança lista_sessoes = [(s.id, s.__str__()) for s in sessoes] - composicao_mesa = ComposicaoMesa.objects.filter( + composicao_mesa = ComposicaoMesa.objects.select_related('cargo', 'parlamentar').filter( sessao_legislativa=sessao_selecionada).order_by('cargo_id') - - cargos_ocupados = [(m.cargo.id, - m.cargo.__str__()) for m in composicao_mesa] - - parlamentares_ocupados = [(m.parlamentar.id, - m.parlamentar.__str__() - ) for m in composicao_mesa] + cargos_ocupados = list(composicao_mesa.values_list( + 'cargo__id', 'cargo__descricao')) + parlamentares_ocupados = list(composicao_mesa.values_list( + 'parlamentar__id', 'parlamentar__nome_parlamentar')) lista_fotos = [] lista_partidos = [] @@ -1060,8 +1231,7 @@ def altera_field_mesa_public_view(request): for p in parlamentares_ocupados: parlamentar = Parlamentar.objects.get(id=p[0]) lista_partidos.append( - partido_parlamentar_sessao_legislativa(sessao, - parlamentar)) + partido_parlamentar_sessao_legislativa(sessao, parlamentar)) if parlamentar.fotografia: try: thumbnail_url = get_backend().get_thumbnail_url( @@ -1076,18 +1246,20 @@ def altera_field_mesa_public_view(request): lista_fotos.append(thumbnail_url) except Exception as e: logger.error(e) - logger.error('erro processando arquivo: %s' % parlamentar.fotografia.path) + logger.error( + F'erro processando arquivo: {parlamentar.fotografia.path}') else: lista_fotos.append(None) - return JsonResponse( - {'lista_parlamentares': parlamentares_ocupados, - 'lista_partidos': lista_partidos, - 'lista_cargos': cargos_ocupados, - 'lista_sessoes': lista_sessoes, - 'lista_fotos': lista_fotos, - 'sessao_selecionada': sessao_selecionada, - 'msg': ('', 1)}) + return JsonResponse({ + 'lista_parlamentares': parlamentares_ocupados, + 'lista_partidos': lista_partidos, + 'lista_cargos': cargos_ocupados, + 'lista_sessoes': lista_sessoes, + 'lista_fotos': lista_fotos, + 'sessao_selecionada': sessao_selecionada, + 'msg': ('', 1) + }) class VincularParlamentarView(PermissionRequiredMixin, FormView): @@ -1107,7 +1279,8 @@ class VincularParlamentarView(PermissionRequiredMixin, FormView): 'data_fim_mandato': form.cleaned_data['legislatura'].data_fim } - data_expedicao_diploma = form.cleaned_data.get('data_expedicao_diploma') + data_expedicao_diploma = form.cleaned_data.get( + 'data_expedicao_diploma') if data_expedicao_diploma: kwargs.update({'data_expedicao_diploma': data_expedicao_diploma}) @@ -1119,6 +1292,7 @@ class VincularParlamentarView(PermissionRequiredMixin, FormView): class BlocoCrud(CrudAux): model = Bloco + public = [RP_DETAIL, RP_LIST] class CreateView(CrudAux.CreateView): form_class = BlocoForm @@ -1126,6 +1300,54 @@ class BlocoCrud(CrudAux): def get_success_url(self): return reverse('sapl.parlamentares:bloco_list') + class UpdateView(CrudAux.UpdateView): + form_class = BlocoForm + + def get_success_url(self): + return reverse('sapl.parlamentares:bloco_list') + + +class BlocoMembroCrud(MasterDetailCrud): + model = BlocoMembro + parent_field = 'bloco' + help_topic = 'bloco_membros' + public = [RP_LIST, RP_DETAIL] + + class CreateView(MasterDetailCrud.CreateView): + form_class = BlocoMembroForm + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context['subnav_template_name'] = '' + return context + + def get_initial(self): + self.initial['bloco'] = Bloco.objects.get(pk=self.kwargs['pk']) + return self.initial + + class UpdateView(MasterDetailCrud.UpdateView): + form_class = BlocoMembroForm + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context['subnav_template_name'] = '' + return context + + class DetailView(MasterDetailCrud.DetailView): + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context['subnav_template_name'] = '' + return context + + class ListView(MasterDetailCrud.ListView): + layout_key = 'BlocoMembroList' + ordering = ('-cargo__cargo_unico', 'parlamentar') + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context['subnav_template_name'] = '' + return context + def get_sessoes_legislatura(request): @@ -1133,6 +1355,6 @@ def get_sessoes_legislatura(request): json_response = {'sessoes_legislativas': []} for s in SessaoLegislativa.objects.filter(legislatura_id=legislatura_id): - json_response['sessoes_legislativas'].append( (s.id, str(s)) ) + json_response['sessoes_legislativas'].append((s.id, str(s))) return JsonResponse(json_response) diff --git a/sapl/protocoloadm/apps.py b/sapl/protocoloadm/apps.py index 98e28ea36..8697e58d9 100644 --- a/sapl/protocoloadm/apps.py +++ b/sapl/protocoloadm/apps.py @@ -6,6 +6,3 @@ class AppConfig(apps.AppConfig): name = 'sapl.protocoloadm' label = 'protocoloadm' verbose_name = _('Protocolo Administrativo') - - def ready(self): - from sapl.base import receivers diff --git a/sapl/protocoloadm/forms.py b/sapl/protocoloadm/forms.py index 240d61891..0d938480d 100644 --- a/sapl/protocoloadm/forms.py +++ b/sapl/protocoloadm/forms.py @@ -1,35 +1,33 @@ -import re -import django_filters import logging +import re from crispy_forms.bootstrap import InlineRadios, Alert, FormActions -from crispy_forms.layout import (Button, Column, Div, Fieldset, HTML, +from crispy_forms.layout import (Button, Div, Fieldset, HTML, Layout, Submit) - from django import forms from django.core.exceptions import (MultipleObjectsReturned, ObjectDoesNotExist, ValidationError) -from django.db import models, transaction +from django.db import transaction from django.db.models import Max from django.forms import ModelForm from django.utils import timezone from django.utils.translation import ugettext_lazy as _ +import django_filters from sapl.base.models import Autor, TipoAutor, AppConfig -from sapl.base.signals import post_save_signal from sapl.crispy_layout_mixin import (form_actions, SaplFormHelper, SaplFormLayout, to_row) -from sapl.materia.models import (MateriaLegislativa, +from sapl.materia.models import (MateriaLegislativa, TipoMateriaLegislativa, UnidadeTramitacao) -from sapl.protocoloadm.models import Protocolo from sapl.utils import (AnoNumeroOrderingFilter, autor_label, autor_modal, choice_anos_com_documentoadministrativo, - choice_anos_com_materias, + choice_anos_com_materias, timing, choice_anos_com_protocolo, choice_force_optional, FileFieldCheckMixin, FilterOverridesMetaMixin, - lista_anexados, RangeWidgetOverride, RANGE_ANOS, - validar_arquivo, YES_NO_CHOICES) + lista_anexados, RANGE_ANOS, + validar_arquivo, YES_NO_CHOICES, + GoogleRecapthaMixin) from .models import (Anexado, AcompanhamentoDocumento, DocumentoAcessorioAdministrativo, @@ -50,7 +48,7 @@ NATUREZA_PROCESSO = [('0', 'Administrativo'), EM_TRAMITACAO = [(0, 'Sim'), (1, 'Não')] -class AcompanhamentoDocumentoForm(ModelForm): +class AcompanhamentoDocumentoForm(GoogleRecapthaMixin, ModelForm): class Meta: model = AcompanhamentoDocumento @@ -58,17 +56,10 @@ class AcompanhamentoDocumentoForm(ModelForm): def __init__(self, *args, **kwargs): - row1 = to_row([('email', 12)]) + kwargs['title_label'] = _('Acompanhamento de Documento por e-mail') + kwargs['action_label'] = _('Cadastrar') - self.helper = SaplFormHelper() - self.helper.layout = Layout( - Fieldset( - _('Acompanhamento de Documento por e-mail'), - row1, - form_actions(label='Cadastrar') - ) - ) - super(AcompanhamentoDocumentoForm, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) class ProtocoloFilterSet(django_filters.FilterSet): @@ -176,7 +167,6 @@ class DocumentoAdministrativoFilterSet(django_filters.FilterSet): o = AnoNumeroOrderingFilter(help_text='') - class Meta(FilterOverridesMetaMixin): model = DocumentoAdministrativo fields = ['tipo', @@ -203,14 +193,14 @@ class DocumentoAdministrativoFilterSet(django_filters.FilterSet): row2 = to_row( [('numero', 5), - ('complemento',2), + ('complemento', 2), ('ano', 5)]) row3 = to_row( [('protocolo__numero', 4), ('numero_externo', 4), ('data', 4) - ]) + ]) row4 = to_row( [('interessado', 6), @@ -224,28 +214,26 @@ class DocumentoAdministrativoFilterSet(django_filters.FilterSet): ]) buttons = FormActions( - *[ - HTML(''' + *[ + HTML('''
        - ''' ) - ], + ''') + ], Submit('pesquisar', _('Pesquisar'), css_class='float-right', - onclick='return true;'), - css_class='form-group row justify-content-between' - , + onclick='return true;'), + css_class='form-group row justify-content-between', ) - self.form.helper = SaplFormHelper() self.form.helper.form_method = 'GET' self.form.helper.layout = Layout( Fieldset(_('Pesquisar Documento'), - row1, row2, - row3, row4, - row5, buttons,) + row1, row2, + row3, row4, + row5, buttons,) ) @@ -343,7 +331,7 @@ class AnularProtocoloAdmForm(ModelForm): *args, **kwargs) -class ProtocoloDocumentForm(ModelForm): +class ProtocoloDocumentoForm(ModelForm): tipo_protocolo = forms.ChoiceField(required=True, label=_('Tipo de Protocolo'), @@ -367,9 +355,6 @@ class ProtocoloDocumentForm(ModelForm): observacao = forms.CharField(required=False, widget=forms.Textarea, label=_('Observação')) - numero = forms.IntegerField( - required=False, label=_('Número de Protocolo (opcional)')) - data_hora_manual = forms.ChoiceField( label=_('Informar data e hora manualmente?'), widget=forms.RadioSelect(), @@ -384,7 +369,6 @@ class ProtocoloDocumentForm(ModelForm): 'assunto', 'interessado', 'observacao', - 'numero', 'data', 'hora', ] @@ -426,8 +410,6 @@ class ProtocoloDocumentForm(ModelForm): [('interessado', 12)]) row6 = to_row( [('observacao', 12)]) - row7 = to_row( - [('numero', 12)]) fieldset = Fieldset(_('Protocolo com data e hora informados manualmente'), row3, @@ -443,25 +425,21 @@ class ProtocoloDocumentForm(ModelForm): Fieldset(_('Identificação de Documento'), row1, row2), - fieldset, + fieldset, row4, row5, HTML(" "), - Fieldset(_('Número do Protocolo (Apenas se quiser que a numeração comece ' - 'a partir do número a ser informado)'), - row7, - HTML(" "), + Fieldset(HTML(" "), form_actions(label=_('Protocolar Documento')) ) ) - super(ProtocoloDocumentForm, self).__init__( + super(ProtocoloDocumentoForm, self).__init__( *args, **kwargs) if not config.protocolo_manual: self.fields['data_hora_manual'].widget = forms.HiddenInput() - class ProtocoloMateriaForm(ModelForm): logger = logging.getLogger(__name__) @@ -503,9 +481,6 @@ class ProtocoloMateriaForm(ModelForm): assunto_ementa = forms.CharField(required=True, widget=forms.Textarea, label=_('Ementa')) - numero = forms.IntegerField( - required=False, label=_('Número de Protocolo (opcional)')) - data_hora_manual = forms.ChoiceField( label=_('Informar data e hora manualmente?'), widget=forms.RadioSelect(), @@ -523,7 +498,6 @@ class ProtocoloMateriaForm(ModelForm): 'numero_materia', 'ano_materia', 'vincular_materia', - 'numero', 'data', 'hora', ] @@ -616,8 +590,6 @@ class ProtocoloMateriaForm(ModelForm): [('assunto_ementa', 12)]) row5 = to_row( [('observacao', 12)]) - row6 = to_row( - [('numero', 12)]) fieldset = Fieldset(_('Protocolo com data e hora informados manualmente'), row3, @@ -637,10 +609,7 @@ class ProtocoloMateriaForm(ModelForm): row4, row5, HTML(" "), - Fieldset(_('Número do Protocolo (Apenas se quiser que a numeração comece' - ' a partir do número a ser informado)'), - row6, - HTML(" "), + Fieldset(HTML(" "), form_actions(label=_('Protocolar Matéria'))) ) @@ -672,10 +641,16 @@ class DocumentoAcessorioAdministrativoForm(FileFieldCheckMixin, ModelForm): if not self.is_valid(): return self.cleaned_data - arquivo = self.cleaned_data.get('arquivo', False) + arquivo = self.cleaned_data.get('arquivo') if arquivo: validar_arquivo(arquivo, "Arquivo") + # else: + # ## TODO: definir arquivo no form e preservar o nome do campo + # ## que gerou a mensagem de erro. + # ## arquivo = forms.FileField(required=True, label="Texto Integral") + # nome_arquivo = self.fields['arquivo'].label + # raise ValidationError(f'Favor anexar arquivo em {nome_arquivo}') return self.cleaned_data @@ -701,7 +676,6 @@ class TramitacaoAdmForm(ModelForm): widgets = {'user': forms.HiddenInput(), 'ip': forms.HiddenInput(), 'ultima_edicao': forms.HiddenInput()} - def __init__(self, *args, **kwargs): super(TramitacaoAdmForm, self).__init__(*args, **kwargs) @@ -787,6 +761,7 @@ class TramitacaoAdmForm(ModelForm): return self.cleaned_data + @timing @transaction.atomic def save(self, commit=True): tramitacao = super(TramitacaoAdmForm, self).save(commit) @@ -797,11 +772,11 @@ class TramitacaoAdmForm(ModelForm): tramitar_anexados = AppConfig.attr('tramitacao_documento') if tramitar_anexados: lista_tramitacao = [] - anexados_list = lista_anexados(documento, False) + anexados_list = lista_anexados(documento) for da in anexados_list: if not da.tramitacaoadministrativo_set.all() \ - or da.tramitacaoadministrativo_set.last() \ - .unidade_tramitacao_destino == tramitacao.unidade_tramitacao_local: + or da.tramitacaoadministrativo_set.last() \ + .unidade_tramitacao_destino == tramitacao.unidade_tramitacao_local: da.tramitacao = False if tramitacao.status.indicador == "F" else True da.save() lista_tramitacao.append(TramitacaoAdministrativo( @@ -818,21 +793,23 @@ class TramitacaoAdmForm(ModelForm): ip=tramitacao.ip, ultima_edicao=tramitacao.ultima_edicao )) - TramitacaoAdministrativo.objects.bulk_create(lista_tramitacao) + ## TODO: BULK UPDATE não envia Signal para Tramitacao + TramitacaoAdministrativo.objects.bulk_create(lista_tramitacao) return tramitacao - -# Compara se os campos de duas tramitações são iguais, +# Compara se os campos de duas tramitações são iguais, # exceto os campos id, documento_id e timestamp def compara_tramitacoes_doc(tramitacao1, tramitacao2): if not tramitacao1 or not tramitacao2: return False lst_items = ['id', 'documento_id', 'timestamp', 'ultima_edicao'] - values = [(k,v) for k,v in tramitacao1.__dict__.items() if ((k not in lst_items) and (k[0] != '_'))] - other_values = [(k,v) for k,v in tramitacao2.__dict__.items() if (k not in lst_items and k[0] != '_')] + values = [(k, v) for k, v in tramitacao1.__dict__.items() + if ((k not in lst_items) and (k[0] != '_'))] + other_values = [(k, v) for k, v in tramitacao2.__dict__.items() + if (k not in lst_items and k[0] != '_')] return values == other_values @@ -850,7 +827,7 @@ class TramitacaoAdmEditForm(TramitacaoAdmForm): model = TramitacaoAdministrativo fields = ['data_tramitacao', 'unidade_tramitacao_local', - 'status', + 'status', 'urgente', 'unidade_tramitacao_destino', 'data_encaminhamento', @@ -891,12 +868,13 @@ class TramitacaoAdmEditForm(TramitacaoAdmForm): 'tramitação, pois irá conflitar com a Unidade ' 'Local da tramitação seguinte') - # Se não houve qualquer alteração em um dos dados, mantém o usuário e ip - if not (cd['data_tramitacao'] != obj.data_tramitacao or \ - cd['unidade_tramitacao_destino'] != obj.unidade_tramitacao_destino or \ - cd['status'] != obj.status or cd['texto'] != obj.texto or \ - cd['data_encaminhamento'] != obj.data_encaminhamento or \ - cd['data_fim_prazo'] != obj.data_fim_prazo): + # Se não houve qualquer alteração em um dos dados, mantém o usuário e + # ip + if not (cd['data_tramitacao'] != obj.data_tramitacao or + cd['unidade_tramitacao_destino'] != obj.unidade_tramitacao_destino or + cd['status'] != obj.status or cd['texto'] != obj.texto or + cd['data_encaminhamento'] != obj.data_encaminhamento or + cd['data_fim_prazo'] != obj.data_fim_prazo): cd['user'] = obj.user cd['ip'] = obj.ip cd['ultima_edicao'] = obj.ultima_edicao @@ -906,10 +884,11 @@ class TramitacaoAdmEditForm(TramitacaoAdmForm): return cd - + @timing @transaction.atomic def save(self, commit=True): - ant_tram_principal = TramitacaoAdministrativo.objects.get(id=self.instance.id) + ant_tram_principal = TramitacaoAdministrativo.objects.get( + id=self.instance.id) nova_tram_principal = super(TramitacaoAdmEditForm, self).save(commit) documento = nova_tram_principal.documento documento.tramitacao = False if nova_tram_principal.status.indicador == "F" else True @@ -917,7 +896,7 @@ class TramitacaoAdmEditForm(TramitacaoAdmForm): tramitar_anexados = AppConfig.attr('tramitacao_documento') if tramitar_anexados: - anexados_list = lista_anexados(documento, False) + anexados_list = lista_anexados(documento) for da in anexados_list: tram_anexada = da.tramitacaoadministrativo_set.last() if compara_tramitacoes_doc(ant_tram_principal, tram_anexada): @@ -936,6 +915,7 @@ class TramitacaoAdmEditForm(TramitacaoAdmForm): da.tramitacao = False if nova_tram_principal.status.indicador == "F" else True da.save() + ## TODO: refatorar? return nova_tram_principal @@ -955,7 +935,7 @@ class AnexadoForm(ModelForm): ano = forms.CharField(label='Ano', required=True) def __init__(self, *args, **kwargs): - return super(AnexadoForm, self).__init__(*args, **kwargs) + return super(AnexadoForm, self).__init__(*args, **kwargs) def clean(self): super(AnexadoForm, self).clean() @@ -969,8 +949,10 @@ class AnexadoForm(ModelForm): data_desanexacao = cleaned_data['data_desanexacao'] if cleaned_data['data_desanexacao'] else data_anexacao if data_anexacao > data_desanexacao: - self.logger.error("Data de anexação posterior à data de desanexação.") - raise ValidationError(_("Data de anexação posterior à data de desanexação.")) + self.logger.error( + "Data de anexação posterior à data de desanexação.") + raise ValidationError( + _("Data de anexação posterior à data de desanexação.")) try: self.logger.info( "Tentando obter objeto DocumentoAdministrativo (numero={}, ano={}, tipo={})." @@ -991,18 +973,20 @@ class AnexadoForm(ModelForm): documento_principal = self.instance.documento_principal if documento_principal == documento_anexado: self.logger.error("O documento não pode ser anexado a si mesmo.") - raise ValidationError(_("O documento não pode ser anexado a si mesmo")) + raise ValidationError( + _("O documento não pode ser anexado a si mesmo")) is_anexado = Anexado.objects.filter(documento_principal=documento_principal, documento_anexado=documento_anexado ).exclude(pk=self.instance.pk).exists() - + if is_anexado: self.logger.error("Documento já se encontra anexado.") raise ValidationError(_('Documento já se encontra anexado')) ciclico = False - anexados_anexado = Anexado.objects.filter(documento_principal=documento_anexado) + anexados_anexado = Anexado.objects.filter( + documento_principal=documento_anexado) while(anexados_anexado and not ciclico): anexados = [] @@ -1014,12 +998,14 @@ class AnexadoForm(ModelForm): else: for a in Anexado.objects.filter(documento_principal=anexo.documento_anexado): anexados.append(a) - + anexados_anexado = anexados - + if ciclico: - self.logger.error("O documento não pode ser anexado por um de seus anexados.") - raise ValidationError(_('O documento não pode ser anexado por um de seus anexados')) + self.logger.error( + "O documento não pode ser anexado por um de seus anexados.") + raise ValidationError( + _('O documento não pode ser anexado por um de seus anexados')) cleaned_data['documento_anexado'] = documento_anexado @@ -1054,8 +1040,8 @@ class AnexadoEmLoteFilterSet(django_filters.FilterSet): self.form.helper = SaplFormHelper() self.form.helper.form_method = 'GET' self.form.helper.layout = Layout( - Fieldset(_('Pesquisa de Documentos'), - row1, row2, form_actions(label='Pesquisar')) + Fieldset(_('Pesquisa de Documentos'), + row1, row2, form_actions(label='Pesquisar')) ) @@ -1110,7 +1096,7 @@ class DocumentoAdministrativoForm(FileFieldCheckMixin, ModelForm): 'user': forms.HiddenInput(), 'ip': forms.HiddenInput(), 'ultima_edicao': forms.HiddenInput() - } + } def clean(self): super(DocumentoAdministrativoForm, self).clean() @@ -1127,7 +1113,6 @@ class DocumentoAdministrativoForm(FileFieldCheckMixin, ModelForm): tipo_documento = int(self.data['tipo']) ano_documento = int(self.data['ano']) - # não permite atualizar para numero/ano/tipo existente if self.instance.pk: mudanca_doc = numero_documento != self.instance.numero \ @@ -1196,10 +1181,16 @@ class DocumentoAdministrativoForm(FileFieldCheckMixin, ModelForm): ' documento vinculado' % (numero_protocolo, ano_protocolo))) - texto_integral = self.cleaned_data.get('texto_integral', False) + texto_integral = self.cleaned_data.get('texto_integral') if texto_integral: validar_arquivo(texto_integral, "Texto Integral") + # else: + # ## TODO: definir arquivo no form e preservar o nome do campo + # ## que gerou a mensagem de erro. + # ## texto_integral = forms.FileField(required=True, label="Texto Integral") + # nome_arquivo = self.fields['texto_integral'].label + # raise ValidationError(f'Favor anexar arquivo em {nome_arquivo}') return self.cleaned_data @@ -1216,7 +1207,7 @@ class DocumentoAdministrativoForm(FileFieldCheckMixin, ModelForm): def __init__(self, *args, **kwargs): row1 = to_row( - [('tipo', 3), ('numero', 3),('complemento', 3), ('ano', 3)]) + [('tipo', 3), ('numero', 3), ('complemento', 3), ('ano', 3)]) row2 = to_row( [('data', 4), ('numero_protocolo', 4), ('ano_protocolo', 4)]) @@ -1533,7 +1524,6 @@ class TramitacaoEmLoteAdmForm(ModelForm): widgets = {'user': forms.HiddenInput(), 'ip': forms.HiddenInput(), 'ultima_edicao': forms.HiddenInput()} - def __init__(self, *args, **kwargs): super(TramitacaoEmLoteAdmForm, self).__init__(*args, **kwargs) @@ -1547,7 +1537,7 @@ class TramitacaoEmLoteAdmForm(ModelForm): [(ut.pk, ut) for ut in ust if ut.parlamentar]) self.fields['unidade_tramitacao_destino'].choices = unidade_tramitacao_destino self.fields['urgente'].label = "Urgente? *" - + row1 = to_row([ ('data_tramitacao', 4), ('data_encaminhamento', 4), @@ -1650,6 +1640,7 @@ class TramitacaoEmLoteAdmForm(ModelForm): return cleaned_data + @timing @transaction.atomic def save(self, commit=True): cd = self.cleaned_data @@ -1681,11 +1672,11 @@ class TramitacaoEmLoteAdmForm(ModelForm): if tramitar_anexados: lista_tramitacao = [] - anexados = lista_anexados(doc, False) + anexados = lista_anexados(doc) for da in anexados: if not da.tramitacaoadministrativo_set.all() \ - or da.tramitacaoadministrativo_set.last() \ - .unidade_tramitacao_destino == tramitacao.unidade_tramitacao_local: + or da.tramitacaoadministrativo_set.last() \ + .unidade_tramitacao_destino == tramitacao.unidade_tramitacao_local: da.tramitacao = False if tramitacao.status.indicador == "F" else True da.save() lista_tramitacao.append(TramitacaoAdministrativo( @@ -1702,6 +1693,7 @@ class TramitacaoEmLoteAdmForm(ModelForm): ip=tramitacao.ip, ultima_edicao=tramitacao.ultima_edicao )) + ## TODO: BULK UPDATE não envia Signal para Tramitacao TramitacaoAdministrativo.objects.bulk_create(lista_tramitacao) return tramitacao @@ -1738,4 +1730,4 @@ class TramitacaoEmLoteAdmFilterSet(django_filters.FilterSet): self.form.helper.form_method = 'GET' self.form.helper.layout = Layout( Fieldset(_('Tramitação em Lote'), - row1, row2, form_actions(label=_('Pesquisar')))) \ No newline at end of file + row1, row2, form_actions(label=_('Pesquisar')))) diff --git a/sapl/protocoloadm/migrations/0033_auto_20200521_1534.py b/sapl/protocoloadm/migrations/0033_auto_20200521_1534.py new file mode 100644 index 000000000..1d3ed894d --- /dev/null +++ b/sapl/protocoloadm/migrations/0033_auto_20200521_1534.py @@ -0,0 +1,18 @@ +# Generated by Django 2.2 on 2020-05-21 18:34 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('protocoloadm', '0032_auto_20200416_1538'), + ] + + operations = [ + migrations.AlterField( + model_name='documentoadministrativo', + name='restrito', + field=models.BooleanField(blank=True, default=False, verbose_name='Acesso Restrito'), + ), + ] diff --git a/sapl/protocoloadm/migrations/0034_auto_20200708_1312.py b/sapl/protocoloadm/migrations/0034_auto_20200708_1312.py new file mode 100644 index 000000000..8151e3d7f --- /dev/null +++ b/sapl/protocoloadm/migrations/0034_auto_20200708_1312.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.29 on 2020-07-08 16:12 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('protocoloadm', '0033_auto_20200521_1534'), + ] + + operations = [ + migrations.AlterField( + model_name='protocolo', + name='autor', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='base.Autor'), + ), + ] diff --git a/sapl/protocoloadm/migrations/0035_auto_20201013_1147.py b/sapl/protocoloadm/migrations/0035_auto_20201013_1147.py new file mode 100644 index 000000000..43847c686 --- /dev/null +++ b/sapl/protocoloadm/migrations/0035_auto_20201013_1147.py @@ -0,0 +1,41 @@ +# Generated by Django 2.2.13 on 2020-10-13 14:47 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('protocoloadm', '0034_auto_20200708_1312'), + ] + + operations = [ + migrations.AlterModelOptions( + name='acompanhamentodocumento', + options={'ordering': ('id',), 'verbose_name': 'Acompanhamento de Documento', 'verbose_name_plural': 'Acompanhamentos de Documento'}, + ), + migrations.AlterModelOptions( + name='anexado', + options={'ordering': ('id',), 'verbose_name': 'Anexado', 'verbose_name_plural': 'Anexados'}, + ), + migrations.AlterModelOptions( + name='documentoacessorioadministrativo', + options={'ordering': ('id',), 'verbose_name': 'Documento Acessório', 'verbose_name_plural': 'Documentos Acessórios'}, + ), + migrations.AlterModelOptions( + name='documentoadministrativo', + options={'ordering': ('id',), 'verbose_name': 'Documento Administrativo', 'verbose_name_plural': 'Documentos Administrativos'}, + ), + migrations.AlterModelOptions( + name='protocolo', + options={'ordering': ('id',), 'permissions': (('action_anular_protocolo', 'Permissão para Anular Protocolo'),), 'verbose_name': 'Protocolo', 'verbose_name_plural': 'Protocolos'}, + ), + migrations.AlterModelOptions( + name='statustramitacaoadministrativo', + options={'ordering': ('id',), 'verbose_name': 'Status de Tramitação', 'verbose_name_plural': 'Status de Tramitação'}, + ), + migrations.AlterModelOptions( + name='tramitacaoadministrativo', + options={'ordering': ('id',), 'verbose_name': 'Tramitação de Documento Administrativo', 'verbose_name_plural': 'Tramitações de Documento Administrativo'}, + ), + ] diff --git a/sapl/protocoloadm/migrations/0036_auto_20210107_1408.py b/sapl/protocoloadm/migrations/0036_auto_20210107_1408.py new file mode 100644 index 000000000..1ba067890 --- /dev/null +++ b/sapl/protocoloadm/migrations/0036_auto_20210107_1408.py @@ -0,0 +1,23 @@ +# Generated by Django 2.2.13 on 2021-01-07 17:08 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('protocoloadm', '0035_auto_20201013_1147'), + ] + + operations = [ + migrations.AlterField( + model_name='documentoadministrativo', + name='ano', + field=models.PositiveSmallIntegerField(choices=[(2022, 2022), (2021, 2021), (2020, 2020), (2019, 2019), (2018, 2018), (2017, 2017), (2016, 2016), (2015, 2015), (2014, 2014), (2013, 2013), (2012, 2012), (2011, 2011), (2010, 2010), (2009, 2009), (2008, 2008), (2007, 2007), (2006, 2006), (2005, 2005), (2004, 2004), (2003, 2003), (2002, 2002), (2001, 2001), (2000, 2000), (1999, 1999), (1998, 1998), (1997, 1997), (1996, 1996), (1995, 1995), (1994, 1994), (1993, 1993), (1992, 1992), (1991, 1991), (1990, 1990), (1989, 1989), (1988, 1988), (1987, 1987), (1986, 1986), (1985, 1985), (1984, 1984), (1983, 1983), (1982, 1982), (1981, 1981), (1980, 1980), (1979, 1979), (1978, 1978), (1977, 1977), (1976, 1976), (1975, 1975), (1974, 1974), (1973, 1973), (1972, 1972), (1971, 1971), (1970, 1970), (1969, 1969), (1968, 1968), (1967, 1967), (1966, 1966), (1965, 1965), (1964, 1964), (1963, 1963), (1962, 1962), (1961, 1961), (1960, 1960), (1959, 1959), (1958, 1958), (1957, 1957), (1956, 1956), (1955, 1955), (1954, 1954), (1953, 1953), (1952, 1952), (1951, 1951), (1950, 1950), (1949, 1949), (1948, 1948), (1947, 1947), (1946, 1946), (1945, 1945), (1944, 1944), (1943, 1943), (1942, 1942), (1941, 1941), (1940, 1940), (1939, 1939), (1938, 1938), (1937, 1937), (1936, 1936), (1935, 1935), (1934, 1934), (1933, 1933), (1932, 1932), (1931, 1931), (1930, 1930), (1929, 1929), (1928, 1928), (1927, 1927), (1926, 1926), (1925, 1925), (1924, 1924), (1923, 1923), (1922, 1922), (1921, 1921), (1920, 1920), (1919, 1919), (1918, 1918), (1917, 1917), (1916, 1916), (1915, 1915), (1914, 1914), (1913, 1913), (1912, 1912), (1911, 1911), (1910, 1910), (1909, 1909), (1908, 1908), (1907, 1907), (1906, 1906), (1905, 1905), (1904, 1904), (1903, 1903), (1902, 1902), (1901, 1901), (1900, 1900), (1899, 1899), (1898, 1898), (1897, 1897), (1896, 1896), (1895, 1895), (1894, 1894), (1893, 1893), (1892, 1892), (1891, 1891), (1890, 1890)], verbose_name='Ano'), + ), + migrations.AlterField( + model_name='protocolo', + name='ano', + field=models.PositiveSmallIntegerField(choices=[(2022, 2022), (2021, 2021), (2020, 2020), (2019, 2019), (2018, 2018), (2017, 2017), (2016, 2016), (2015, 2015), (2014, 2014), (2013, 2013), (2012, 2012), (2011, 2011), (2010, 2010), (2009, 2009), (2008, 2008), (2007, 2007), (2006, 2006), (2005, 2005), (2004, 2004), (2003, 2003), (2002, 2002), (2001, 2001), (2000, 2000), (1999, 1999), (1998, 1998), (1997, 1997), (1996, 1996), (1995, 1995), (1994, 1994), (1993, 1993), (1992, 1992), (1991, 1991), (1990, 1990), (1989, 1989), (1988, 1988), (1987, 1987), (1986, 1986), (1985, 1985), (1984, 1984), (1983, 1983), (1982, 1982), (1981, 1981), (1980, 1980), (1979, 1979), (1978, 1978), (1977, 1977), (1976, 1976), (1975, 1975), (1974, 1974), (1973, 1973), (1972, 1972), (1971, 1971), (1970, 1970), (1969, 1969), (1968, 1968), (1967, 1967), (1966, 1966), (1965, 1965), (1964, 1964), (1963, 1963), (1962, 1962), (1961, 1961), (1960, 1960), (1959, 1959), (1958, 1958), (1957, 1957), (1956, 1956), (1955, 1955), (1954, 1954), (1953, 1953), (1952, 1952), (1951, 1951), (1950, 1950), (1949, 1949), (1948, 1948), (1947, 1947), (1946, 1946), (1945, 1945), (1944, 1944), (1943, 1943), (1942, 1942), (1941, 1941), (1940, 1940), (1939, 1939), (1938, 1938), (1937, 1937), (1936, 1936), (1935, 1935), (1934, 1934), (1933, 1933), (1932, 1932), (1931, 1931), (1930, 1930), (1929, 1929), (1928, 1928), (1927, 1927), (1926, 1926), (1925, 1925), (1924, 1924), (1923, 1923), (1922, 1922), (1921, 1921), (1920, 1920), (1919, 1919), (1918, 1918), (1917, 1917), (1916, 1916), (1915, 1915), (1914, 1914), (1913, 1913), (1912, 1912), (1911, 1911), (1910, 1910), (1909, 1909), (1908, 1908), (1907, 1907), (1906, 1906), (1905, 1905), (1904, 1904), (1903, 1903), (1902, 1902), (1901, 1901), (1900, 1900), (1899, 1899), (1898, 1898), (1897, 1897), (1896, 1896), (1895, 1895), (1894, 1894), (1893, 1893), (1892, 1892), (1891, 1891), (1890, 1890)], verbose_name='Ano do Protocolo'), + ), + ] diff --git a/sapl/protocoloadm/migrations/0037_auto_20210209_1047.py b/sapl/protocoloadm/migrations/0037_auto_20210209_1047.py new file mode 100644 index 000000000..f9c313fba --- /dev/null +++ b/sapl/protocoloadm/migrations/0037_auto_20210209_1047.py @@ -0,0 +1,17 @@ +# Generated by Django 2.2.13 on 2021-02-09 13:47 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('protocoloadm', '0036_auto_20210107_1408'), + ] + + operations = [ + migrations.AlterModelOptions( + name='documentoacessorioadministrativo', + options={'ordering': ('data', 'id'), 'verbose_name': 'Documento Acessório', 'verbose_name_plural': 'Documentos Acessórios'}, + ), + ] diff --git a/sapl/protocoloadm/models.py b/sapl/protocoloadm/models.py index e1a6077dd..5e6142f86 100644 --- a/sapl/protocoloadm/models.py +++ b/sapl/protocoloadm/models.py @@ -53,43 +53,55 @@ def texto_upload_path(instance, filename): @reversion.register() class Protocolo(models.Model): numero = models.PositiveIntegerField( - blank=False, null=False, verbose_name=_('Número de Protocolo')) - ano = models.PositiveSmallIntegerField(blank=False, - null=False, - choices=RANGE_ANOS, - verbose_name=_('Ano do Protocolo')) - data = models.DateField(null=True, blank=True, - verbose_name=_('Data do Protocolo'), - help_text=_('Informado manualmente')) - hora = models.TimeField(null=True, blank=True, - verbose_name=_('Hora do Protocolo'), - help_text=_('Informado manualmente')) + blank=False, + null=False, + verbose_name=_('Número de Protocolo')) + ano = models.PositiveSmallIntegerField( + blank=False, + null=False, + choices=RANGE_ANOS, + verbose_name=_('Ano do Protocolo')) + data = models.DateField( + null=True, + blank=True, + verbose_name=_('Data do Protocolo'), + help_text=_('Informado manualmente')) + hora = models.TimeField( + null=True, + blank=True, + verbose_name=_('Hora do Protocolo'), + help_text=_('Informado manualmente')) timestamp_data_hora_manual = models.DateTimeField(default=timezone.now) user_data_hora_manual = models.CharField( - max_length=256, blank=True, + max_length=256, + blank=True, verbose_name=_('IP'), - help_text=_('Usuário que está realizando Protocolo e informando ' - 'data e hora manualmente.')) + help_text=_('Usuário que está realizando Protocolo e informando data e hora manualmente.')) ip_data_hora_manual = models.CharField( - max_length=256, blank=True, + max_length=256, + blank=True, verbose_name=_('IP'), - help_text=_('Endereço IP da estação de trabalho ' - 'do usuário que está realizando Protocolo e informando ' - 'data e hora manualmente.')) - - # Não foi utilizado auto_now_add=True em timestamp porque - # ele usa datetime.now que não é timezone aware. + help_text=_('Endereço IP da estação de trabalho do usuário que está realizando Protocolo e ' + 'informando data e hora manualmente.')) + # Não foi utilizado auto_now_add=True em timestamp porque ele usa datetime.now que não é timezone aware. timestamp = models.DateTimeField( - default=timezone.now, null=True, blank=True) + null=True, + blank=True, + default=timezone.now) tipo_protocolo = models.PositiveIntegerField( - blank=True, null=True, verbose_name=_('Tipo de Protocolo')) + blank=True, + null=True, + verbose_name=_('Tipo de Protocolo')) tipo_processo = models.PositiveIntegerField() interessado = models.CharField( - max_length=200, blank=True, verbose_name=_('Interessado')) - autor = models.ForeignKey(Autor, - blank=True, - null=True, - on_delete=models.PROTECT) + max_length=200, + blank=True, + verbose_name=_('Interessado')) + autor = models.ForeignKey( + Autor, + blank=True, + null=True, + on_delete=models.SET_NULL) assunto_ementa = models.TextField(blank=True) tipo_documento = models.ForeignKey( TipoDocumentoAdministrativo, @@ -104,19 +116,23 @@ class Protocolo(models.Model): on_delete=models.PROTECT, verbose_name=_('Tipo de Matéria')) numero_paginas = models.PositiveIntegerField( - blank=True, null=True, verbose_name=_('Número de Páginas')) - observacao = models.TextField( - blank=True, verbose_name=_('Observação')) + blank=True, + null=True, + verbose_name=_('Número de Páginas')) + observacao = models.TextField(blank=True, verbose_name=_('Observação')) anulado = models.BooleanField(default=False) user_anulacao = models.CharField(max_length=20, blank=True) ip_anulacao = models.CharField(max_length=15, blank=True) justificativa_anulacao = models.CharField( - max_length=260, blank=True, verbose_name=_('Motivo')) + max_length=260, + blank=True, + verbose_name=_('Motivo')) timestamp_anulacao = models.DateTimeField(blank=True, null=True) class Meta: verbose_name = _('Protocolo') verbose_name_plural = _('Protocolos') + ordering = ('id',) permissions = ( ('action_anular_protocolo', _('Permissão para Anular Protocolo')), ) @@ -211,6 +227,7 @@ class DocumentoAdministrativo(models.Model): class Meta: verbose_name = _('Documento Administrativo') verbose_name_plural = _('Documentos Administrativos') + ordering = ('id',) def __str__(self): return _('%(tipo)s - %(assunto)s') % { @@ -270,6 +287,7 @@ class DocumentoAcessorioAdministrativo(models.Model): class Meta: verbose_name = _('Documento Acessório') verbose_name_plural = _('Documentos Acessórios') + ordering = ('data', 'id') def __str__(self): return self.nome @@ -319,6 +337,7 @@ class StatusTramitacaoAdministrativo(models.Model): class Meta: verbose_name = _('Status de Tramitação') verbose_name_plural = _('Status de Tramitação') + ordering = ('id',) def __str__(self): return self.descricao @@ -370,6 +389,7 @@ class TramitacaoAdministrativo(models.Model): class Meta: verbose_name = _('Tramitação de Documento Administrativo') verbose_name_plural = _('Tramitações de Documento Administrativo') + ordering = ('id',) def __str__(self): return _('%(documento)s - %(status)s') % { @@ -397,6 +417,7 @@ class Anexado(models.Model): class Meta: verbose_name = _('Anexado') verbose_name_plural = _('Anexados') + ordering = ('id',) def __str__(self): return _('Anexado: %(documento_anexado_tipo)s %(documento_anexado_numero)s' @@ -421,6 +442,7 @@ class AcompanhamentoDocumento(models.Model): class Meta: verbose_name = _('Acompanhamento de Documento') verbose_name_plural = _('Acompanhamentos de Documento') + ordering = ('id',) def __str__(self): if self.data_cadastro is None: diff --git a/sapl/protocoloadm/tests/test_protocoloadm.py b/sapl/protocoloadm/tests/test_protocoloadm.py index 1e0ab091b..fe38765c3 100644 --- a/sapl/protocoloadm/tests/test_protocoloadm.py +++ b/sapl/protocoloadm/tests/test_protocoloadm.py @@ -1,6 +1,6 @@ from datetime import date, timedelta -from django.core.urlresolvers import reverse +from django.urls import reverse from django.utils import timezone from django.utils.encoding import force_text from django.utils.translation import ugettext_lazy as _ @@ -13,7 +13,7 @@ from sapl.comissoes.models import Comissao, TipoComissao from sapl.materia.models import UnidadeTramitacao from sapl.protocoloadm.forms import (AnularProtocoloAdmForm, DocumentoAdministrativoForm, - MateriaLegislativa, ProtocoloDocumentForm, + MateriaLegislativa, ProtocoloDocumentoForm, ProtocoloMateriaForm, TramitacaoAdmForm, TramitacaoAdmEditForm, compara_tramitacoes_doc, @@ -380,8 +380,9 @@ def test_documento_administrativo_invalido(): assert errors['numero'] == [_('Este campo é obrigatório.')] assert errors['data'] == [_('Este campo é obrigatório.')] assert errors['restrito'] == [_('Este campo é obrigatório.')] + assert errors['tramitacao'] == [_('Este campo é obrigatório.')] - assert len(errors) == 6 + assert len(errors) == 7 @pytest.mark.django_db(transaction=False) @@ -402,7 +403,8 @@ def test_documento_administrativo_protocolo_inexistente(): 'data': '2017-10-10', 'numero_protocolo': '11', 'ano_protocolo': '2017', - 'restrito': False + 'restrito': False, + 'tramitacao': False }) assert not form.is_valid() @@ -415,7 +417,7 @@ def test_protocolo_documento_form_invalido(): config = baker.make(AppConfig) - form = ProtocoloDocumentForm( + form = ProtocoloDocumentoForm( data={}, initial={ 'user_data_hora_manual': '', @@ -505,7 +507,7 @@ def test_lista_documentos_anexados(): data_anexacao="2020-11-05" ) - lista = lista_anexados(documento_principal, False) + lista = lista_anexados(documento_principal) assert len(lista) == 2 assert lista[0] == documento_anexado diff --git a/sapl/protocoloadm/views.py b/sapl/protocoloadm/views.py index 83091c6b9..35cb9ba2b 100755 --- a/sapl/protocoloadm/views.py +++ b/sapl/protocoloadm/views.py @@ -1,34 +1,34 @@ from datetime import datetime import logging -import re from random import choice +import re from string import ascii_letters, digits from braces.views import FormValidMessageMixin from django.conf import settings from django.contrib import messages +from django.contrib.admin.views.decorators import staff_member_required from django.contrib.auth.decorators import permission_required from django.contrib.auth.mixins import PermissionRequiredMixin from django.contrib.contenttypes.models import ContentType from django.core.exceptions import ObjectDoesNotExist -from django.core.urlresolvers import reverse from django.db import transaction from django.db.models import Max, Q from django.http import Http404, HttpResponse, JsonResponse from django.http.response import HttpResponseRedirect from django.shortcuts import redirect +from django.shortcuts import render +from django.urls import reverse from django.utils import timezone from django.utils.translation import ugettext_lazy as _ from django.views.generic import ListView, CreateView, UpdateView from django.views.generic.base import RedirectView, TemplateView from django.views.generic.edit import FormView from django_filters.views import FilterView -from django.contrib.admin.views.decorators import staff_member_required import sapl from sapl.base.email_utils import do_envia_email_confirmacao from sapl.base.models import Autor, CasaLegislativa, AppConfig -from sapl.base.signals import tramitacao_signal, post_delete_signal from sapl.comissoes.models import Comissao from sapl.crud.base import (Crud, CrudAux, MasterDetailCrud, make_pagination, RP_LIST, RP_DETAIL) @@ -39,28 +39,22 @@ from sapl.protocoloadm.models import Protocolo, DocumentoAdministrativo from sapl.relatorios.views import relatorio_doc_administrativos from sapl.utils import (create_barcode, get_base_url, get_client_ip, get_mime_type_from_file_extension, lista_anexados, - show_results_filter_set, mail_service_configured, from_date_to_datetime_utc) + show_results_filter_set, mail_service_configured, from_date_to_datetime_utc, + google_recaptcha_configured) -from django.shortcuts import render - - -from .forms import (AcompanhamentoDocumentoForm, AnularProtocoloAdmForm, - DocumentoAcessorioAdministrativoForm, - DocumentoAdministrativoFilterSet, - DocumentoAdministrativoForm, FichaPesquisaAdmForm, FichaSelecionaAdmForm, ProtocoloDocumentForm, - ProtocoloFilterSet, ProtocoloMateriaForm, - TramitacaoAdmEditForm, TramitacaoAdmForm, +from .forms import (AcompanhamentoDocumentoForm, AnexadoEmLoteFilterSet, AnexadoForm, + AnularProtocoloAdmForm, compara_tramitacoes_doc, DesvincularDocumentoForm, DesvincularMateriaForm, - filtra_tramitacao_adm_destino_and_status, - filtra_tramitacao_adm_destino, filtra_tramitacao_adm_status, - AnexadoForm, AnexadoEmLoteFilterSet, - PrimeiraTramitacaoEmLoteAdmFilterSet, - TramitacaoEmLoteAdmForm, - TramitacaoEmLoteAdmFilterSet, - compara_tramitacoes_doc) -from .models import (AcompanhamentoDocumento, DocumentoAcessorioAdministrativo, + DocumentoAcessorioAdministrativoForm, DocumentoAdministrativoFilterSet, + DocumentoAdministrativoForm, FichaPesquisaAdmForm, FichaSelecionaAdmForm, + filtra_tramitacao_adm_destino, filtra_tramitacao_adm_destino_and_status, + filtra_tramitacao_adm_status, PrimeiraTramitacaoEmLoteAdmFilterSet, + ProtocoloDocumentoForm, ProtocoloFilterSet, ProtocoloMateriaForm, + TramitacaoAdmEditForm, TramitacaoAdmForm, TramitacaoEmLoteAdmForm, + TramitacaoEmLoteAdmFilterSet) +from .models import (Anexado, AcompanhamentoDocumento, DocumentoAcessorioAdministrativo, DocumentoAdministrativo, StatusTramitacaoAdministrativo, - TipoDocumentoAdministrativo, TramitacaoAdministrativo, Anexado) + TipoDocumentoAdministrativo, TramitacaoAdministrativo) TipoDocumentoAdministrativoCrud = CrudAux.build( @@ -99,7 +93,7 @@ def recuperar_materia_protocolo(request): def doc_texto_integral(request, pk): can_see = True - if not request.user.is_authenticated(): + if not request.user.is_authenticated: app_config = AppConfig.objects.last() if app_config and app_config.documentos_administrativos == 'R': can_see = False @@ -206,6 +200,11 @@ class AcompanhamentoDocumentoView(CreateView): 'Documentos não foi configurado')) return redirect('/') + if not google_recaptcha_configured(): + self.logger.warning(_('Google Recaptcha não configurado!')) + messages.error(request, _('Google Recaptcha não configurado!')) + return redirect(request.META.get('HTTP_REFERER', '/')) + pk = self.kwargs['pk'] documento = DocumentoAdministrativo.objects.get(id=pk) @@ -220,6 +219,11 @@ class AcompanhamentoDocumentoView(CreateView): 'Documentos não foi configurado')) return redirect('/') + if not google_recaptcha_configured(): + self.logger.warning(_('Google Recaptcha não configurado!')) + messages.error(request, _('Google Recaptcha não configurado!')) + return redirect(request.META.get('HTTP_REFERER', '/')) + form = AcompanhamentoDocumentoForm(request.POST) pk = self.kwargs['pk'] documento = DocumentoAdministrativo.objects.get(id=pk) @@ -371,7 +375,8 @@ class DocumentoAdministrativoCrud(Crud): return self.search_url def form_valid(self, form): - form.instance.complemento = re.sub('\s+', '', form.instance.complemento).upper() + form.instance.complemento = re.sub( + '\s+', '', form.instance.complemento).upper() return super().form_valid(form) class UpdateView(Crud.UpdateView): @@ -385,10 +390,10 @@ class DocumentoAdministrativoCrud(Crud): self.object = form.save() dict_objeto_novo = self.object.__dict__ - + atributos = [ 'tipo_id', 'ano', 'numero', 'data', 'protocolo_id', 'assunto', - 'interessado', 'tramitacao', 'restrito', 'texto_integral','numero_externo', + 'interessado', 'tramitacao', 'restrito', 'texto_integral', 'numero_externo', 'dias_prazo', 'data_fim_prazo', 'observacao' ] @@ -402,8 +407,9 @@ class DocumentoAdministrativoCrud(Crud): self.object.save() break - - form.instance.complemento = re.sub('\s+', '', form.instance.complemento).upper() + + form.instance.complemento = re.sub( + '\s+', '', form.instance.complemento).upper() return super().form_valid(form) @@ -418,20 +424,20 @@ class DocumentoAdministrativoCrud(Crud): def get(self, *args, **kwargs): pk = self.kwargs['pk'] documento = DocumentoAdministrativo.objects.get(id=pk) - if documento.restrito and self.request.user.is_anonymous(): + if documento.restrito and self.request.user.is_anonymous: return redirect('/') return super(Crud.DetailView, self).get(args, kwargs) - + def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) - + context['user'] = self.request.user context['documentoadministrativo'] = DocumentoAdministrativo.objects.get( pk=self.kwargs['pk'] ) return context - + def urlize(self, obj, fieldname): a = '%s' % ( reverse( @@ -582,7 +588,7 @@ class ProtocoloDocumentoView(PermissionRequiredMixin, logger = logging.getLogger(__name__) template_name = "protocoloadm/protocolar_documento.html" - form_class = ProtocoloDocumentForm + form_class = ProtocoloDocumentoForm form_valid_message = _('Protocolo cadastrado com sucesso!') permission_required = ('protocoloadm.add_protocolo', ) @@ -617,12 +623,14 @@ class ProtocoloDocumentoView(PermissionRequiredMixin, return self.render_to_response(self.get_context_data()) if numeracao == 'A': - numero = Protocolo.objects.filter( - ano=timezone.now().year).aggregate(Max('numero')) + numero_max = Protocolo.objects.filter(ano=timezone.now().year).aggregate( + Max('numero') + )['numero__max'] elif numeracao == 'L': legislatura = Legislatura.objects.filter( data_inicio__year__lte=timezone.now().year, - data_fim__year__gte=timezone.now().year).first() + data_fim__year__gte=timezone.now().year + ).first() data_inicio = legislatura.data_inicio data_fim = legislatura.data_fim @@ -630,32 +638,29 @@ class ProtocoloDocumentoView(PermissionRequiredMixin, data_inicio_utc = from_date_to_datetime_utc(data_inicio) data_fim_utc = from_date_to_datetime_utc(data_fim) - numero = Protocolo.objects.filter( - Q(data__isnull=False, - data__gte=data_inicio, - data__lte=data_fim) | - Q(timestamp__isnull=False, - timestamp__gte=data_inicio_utc, - timestamp__lte=data_fim_utc) | - Q(timestamp_data_hora_manual__isnull=False, - timestamp_data_hora_manual__gte=data_inicio_utc, - timestamp_data_hora_manual__lte=data_fim_utc,)).\ - aggregate(Max('numero')) + numero_max = Protocolo.objects.filter( + Q(data__isnull=False, data__gte=data_inicio, data__lte=data_fim) | Q( + timestamp__isnull=False, timestamp__gte=data_inicio_utc, + timestamp__lte=data_fim_utc + ) | Q( + timestamp_data_hora_manual__isnull=False, + timestamp_data_hora_manual__gte=data_inicio_utc, + timestamp_data_hora_manual__lte=data_fim_utc, + ) + ).aggregate(Max('numero'))['numero__max'] elif numeracao == 'U': - numero = Protocolo.objects.all().aggregate(Max('numero')) + numero_max = Protocolo.objects.all().aggregate(Max('numero'))[ + 'numero__max'] protocolo.tipo_processo = '0' # TODO validar o significado protocolo.anulado = False - if not protocolo.numero: - protocolo.numero = ( - numero['numero__max'] + 1) if numero['numero__max'] else 1 - elif protocolo.numero < (numero['numero__max'] + 1) if numero['numero__max'] else 0: - msg = _('Número de protocolo deve ser maior que {}'.format( - numero['numero__max'])) - self.logger.error( - "user=" + username + ". Número de protocolo deve ser maior que {}.".format(numero['numero__max'])) - messages.add_message(self.request, messages.ERROR, msg) - return self.render_to_response(self.get_context_data()) + + inicio_numeracao = AppConfig.objects.first().inicio_numeracao_protocolo + numero = int(numero_max) if numero_max else 0 + protocolo.numero = ( + (numero + 1) if numero and numero >= inicio_numeracao else inicio_numeracao + ) + protocolo.ano = timezone.now().year protocolo.assunto_ementa = self.request.POST['assunto'] @@ -709,7 +714,7 @@ class CriarDocumentoProtocolo(PermissionRequiredMixin, CreateView): tz = timezone.get_current_timezone() doc['ultima_edicao'] = tz.localize(datetime.now()) - + return doc @@ -829,47 +834,41 @@ class ProtocoloMateriaView(PermissionRequiredMixin, CreateView): return self.render_to_response(self.get_context_data()) if numeracao == 'A': - numero = Protocolo.objects.filter( - ano=timezone.now().year).aggregate(Max('numero')) + numero_max = Protocolo.objects.filter(ano=timezone.now().year).aggregate( + Max('numero') + )['numero__max'] elif numeracao == 'L': legislatura = Legislatura.objects.filter( data_inicio__year__lte=timezone.now().year, - data_fim__year__gte=timezone.now().year).first() + data_fim__year__gte=timezone.now().year + ).first() + data_inicio = legislatura.data_inicio data_fim = legislatura.data_fim data_inicio_utc = from_date_to_datetime_utc(data_inicio) data_fim_utc = from_date_to_datetime_utc(data_fim) - numero = Protocolo.objects.filter( - Q(data__isnull=False, - data__gte=data_inicio, - data__lte=data_fim) | - Q(timestamp__isnull=False, - timestamp__gte=data_inicio_utc, - timestamp__lte=data_fim_utc) | - Q(timestamp_data_hora_manual__isnull=False, - timestamp_data_hora_manual__gte=data_inicio_utc, - timestamp_data_hora_manual__lte=data_fim_utc,)).\ - aggregate(Max('numero')) - + numero_max = Protocolo.objects.filter( + Q(data__isnull=False, data__gte=data_inicio, data__lte=data_fim) | Q( + timestamp__isnull=False, timestamp__gte=data_inicio_utc, + timestamp__lte=data_fim_utc + ) | Q( + timestamp_data_hora_manual__isnull=False, + timestamp_data_hora_manual__gte=data_inicio_utc, + timestamp_data_hora_manual__lte=data_fim_utc, + ) + ).aggregate(Max('numero'))['numero__max'] elif numeracao == 'U': - numero = Protocolo.objects.all().aggregate(Max('numero')) - - if numeracao is None: - numero['numero__max'] = 0 - - if not protocolo.numero: - protocolo.numero = ( - numero['numero__max'] + 1) if numero['numero__max'] else 1 - if numero['numero__max']: - if protocolo.numero < (numero['numero__max'] + 1): - self.logger.error("user=" + username + ". Número de protocolo ({}) é menor que {}" - .format(protocolo.numero, numero['numero__max'])) - msg = _('Número de protocolo deve ser maior que {}'.format( - numero['numero__max'])) - messages.add_message(self.request, messages.ERROR, msg) - return self.render_to_response(self.get_context_data()) + numero_max = Protocolo.objects.all().aggregate(Max('numero'))[ + 'numero__max'] + + inicio_numeracao = AppConfig.objects.first().inicio_numeracao_protocolo + numero = int(numero_max) if numero_max else 0 + protocolo.numero = ( + (numero + 1) if numero and numero >= inicio_numeracao else inicio_numeracao + ) + protocolo.ano = timezone.now().year protocolo.tipo_protocolo = 0 @@ -902,14 +901,14 @@ class ProtocoloMateriaView(PermissionRequiredMixin, CreateView): numero=data['numero_materia'], tipo=data['tipo_materia'] ) - + materia.numero_protocolo = protocolo.numero materia.user = self.request.user materia.ip = get_client_ip(self.request) tz = timezone.get_current_timezone() materia.ultima_edicao = tz.localize(datetime.now()) - + materia.save() return redirect(self.get_success_url(protocolo)) @@ -1037,7 +1036,7 @@ class PesquisarDocumentoAdministrativoView(DocumentoAdministrativoMixin, # é usada essa verificação anônima para quando os documentos administrativos # estão no modo ostensivo, mas podem existir documentos administrativos # restritos - if request.user.is_anonymous(): + if request.user.is_anonymous: length = self.object_list.filter(restrito=False).count() else: length = self.object_list.count() @@ -1281,24 +1280,6 @@ class TramitacaoAdmCrud(MasterDetailCrud): 'unidade_tramitacao_local'].widget.attrs['readonly'] = True return context - def form_valid(self, form): - self.object = form.save() - username = self.request.user.username - try: - tramitacao_signal.send(sender=TramitacaoAdministrativo, - post=self.object, - request=self.request) - except Exception as e: - self.logger.error('user=' + username + '. Tramitação criada, mas e-mail de acompanhamento de documento ' - 'não enviado. A não configuração do servidor de e-mail ' - 'impede o envio de aviso de tramitação. ' + str(e)) - msg = _('Tramitação criada, mas e-mail de acompanhamento ' - 'de documento não enviado. A não configuração do' - ' servidor de e-mail impede o envio de aviso de tramitação') - messages.add_message(self.request, messages.WARNING, msg) - return HttpResponseRedirect(self.get_success_url()) - return super().form_valid(form) - class UpdateView(MasterDetailCrud.UpdateView): form_class = TramitacaoAdmEditForm logger = logging.getLogger(__name__) @@ -1313,23 +1294,6 @@ class TramitacaoAdmCrud(MasterDetailCrud): return initial - def form_valid(self, form): - self.object = form.save() - username = self.request.user.username - try: - tramitacao_signal.send(sender=TramitacaoAdministrativo, - post=self.object, - request=self.request) - except Exception as e: - self.logger.error('user=' + username + '. Tramitação criada, mas e-mail de acompanhamento de documento ' - 'não enviado. A não configuração do servidor de e-mail ' - 'impede o envio de aviso de tramitação. ' + str(e)) - msg = _('Tramitação criada, mas e-mail de acompanhamento ' - 'de documento não enviado. A não configuração do' - ' servidor de e-mail impede o envio de aviso de tramitação') - messages.add_message(self.request, messages.WARNING, msg) - return HttpResponseRedirect(self.get_success_url()) - return super().form_valid(form) class ListView(DocumentoAdministrativoMixin, MasterDetailCrud.ListView): @@ -1381,7 +1345,7 @@ class TramitacaoAdmCrud(MasterDetailCrud): documento.save() tramitar_anexados = AppConfig.attr('tramitacao_documento') if tramitar_anexados: - docs_anexados = lista_anexados(documento, False) + docs_anexados = lista_anexados(documento) for da in docs_anexados: tram_anexada = da.tramitacaoadministrativo_set.last() if compara_tramitacoes_doc(tram_anexada, tramitacao): @@ -1393,11 +1357,11 @@ class TramitacaoAdmCrud(MasterDetailCrud): id__in=[t.id for t in tramitacoes_deletar]).delete() # TODO: otimizar para passar a lista de matérias - for tramitacao in tramitacoes_deletar: - post_delete_signal.send(sender=None, - instance=tramitacao, - operation='C', - request=self.request) + # for tramitacao in tramitacoes_deletar: + # post_delete_signal.send(sender=None, + # instance=tramitacao, + # operation='C', + # request=self.request) return HttpResponseRedirect(url) @@ -1492,13 +1456,13 @@ class DesvincularMateriaView(PermissionRequiredMixin, FormView): ) materia.numero_protocolo = None - + materia.user = self.request.user materia.ip = get_client_ip(self.request) tz = timezone.get_current_timezone() materia.ultima_edicao = tz.localize(datetime.now()) - + materia.save() return redirect(self.get_success_url()) @@ -1654,9 +1618,9 @@ class PrimeiraTramitacaoEmLoteAdmView(PermissionRequiredMixin, FilterView): messages.add_message(request, messages.ERROR, msg) return self.get(request, self.kwargs) - form = TramitacaoEmLoteAdmForm(request.POST, - initial= {'documentos': documentos_ids, - 'user': user, 'ip':ip, + form = TramitacaoEmLoteAdmForm(request.POST, + initial={'documentos': documentos_ids, + 'user': user, 'ip': ip, 'ultima_edicao': ultima_edicao}) if form.is_valid(): @@ -1737,10 +1701,10 @@ class TramitacaoEmLoteAdmView(PrimeiraTramitacaoEmLoteAdmView): 'documento_id', flat=True) -def apaga_protocolos(request, ano,numero_protocolo=None): - kwargs = {'ano__in':ano} +def apaga_protocolos(request, ano, numero_protocolo=None): + kwargs = {'ano__in': ano} if numero_protocolo: - kwargs.update({'numero__gte':numero_protocolo}) + kwargs.update({'numero__gte': numero_protocolo}) all_protocolos = Protocolo.objects.filter(**kwargs) @@ -1752,12 +1716,12 @@ def apaga_protocolos(request, ano,numero_protocolo=None): ml.numero_protocolo = None ml.save() - for deleted_object in all_protocolos: - post_delete_signal.send(sender=None, - instance=deleted_object, - operation='D', - request=request - ) + # for deleted_object in all_protocolos: + # post_delete_signal.send(sender=None, + # instance=deleted_object, + # operation='D', + # request=request + # ) all_protocolos.delete() @@ -1765,18 +1729,19 @@ def apaga_protocolos(request, ano,numero_protocolo=None): def apaga_protocolos_view(request): if request.method == "GET": if Protocolo.objects.exists(): - intervalo_data = Protocolo.objects.all().distinct('ano').values_list('ano', flat=True).order_by('-ano') + intervalo_data = Protocolo.objects.all().distinct( + 'ano').values_list('ano', flat=True).order_by('-ano') else: intervalo_data = None - return render(request,"protocoloadm/deleta_todos_protocolos.html",{'intervalo_data':intervalo_data}) - + return render(request, "protocoloadm/deleta_todos_protocolos.html", {'intervalo_data': intervalo_data}) + elif request.method == "POST": password = request.POST.get('senha') - valid = request.user.check_password(password) + valid = request.user.check_password(password) if valid: anos = request.POST.getlist('ano') - numero_protocolo = request.POST.get('numero_protocolo') - apaga_protocolos(request,anos,numero_protocolo) - return JsonResponse({'type':'success','msg':''}) + numero_protocolo = request.POST.get('numero_protocolo') + apaga_protocolos(request, anos, numero_protocolo) + return JsonResponse({'type': 'success', 'msg': ''}) else: - return JsonResponse({'type':'error','msg':'Senha Incorreta'}) \ No newline at end of file + return JsonResponse({'type': 'error', 'msg': 'Senha Incorreta'}) diff --git a/sapl/redireciona_urls/tests.py b/sapl/redireciona_urls/tests.py index d8d713a2e..5a0e8b98f 100644 --- a/sapl/redireciona_urls/tests.py +++ b/sapl/redireciona_urls/tests.py @@ -1,5 +1,6 @@ -from django.core.urlresolvers import reverse from django.test import TestCase +from django.urls import reverse + MovedPermanentlyHTTPStatusCode = 301 EMPTY_STRING = '' @@ -11,7 +12,7 @@ class RedirecionaURLsTests(TestCase): response = self.client.get(reverse( 'sapl.redireciona_urls:redireciona_sapl_index') ) - url_e = reverse('sapl_index') + url_e = reverse('sapl.base:sapl_index') self.assertEqual(response.status_code, MovedPermanentlyHTTPStatusCode) self.assertEqual(response.url, url_e) diff --git a/sapl/redireciona_urls/views.py b/sapl/redireciona_urls/views.py index ee0212661..435280b3b 100644 --- a/sapl/redireciona_urls/views.py +++ b/sapl/redireciona_urls/views.py @@ -1,6 +1,6 @@ import logging -from django.core.urlresolvers import NoReverseMatch, reverse +from django.urls import NoReverseMatch, reverse from django.views.generic import RedirectView from sapl.audiencia.apps import AppConfig as audienciaConfig @@ -76,13 +76,14 @@ class RedirecionaSAPLIndex(RedirectView): logger = logging.getLogger(__name__) def get_redirect_url(self): - url_pattern = 'sapl_index' + url_pattern = 'sapl.base:sapl_index' username = self.request.user.username try: self.logger.info("user=" + username + ". Tentando obter url.") url = reverse(url_pattern) except NoReverseMatch as e: - self.logger.error("user=" + username + ". Erro ao obter url. " + str(e)) + self.logger.error("user=" + username + + ". Erro ao obter url. " + str(e)) raise UnknownUrlNameError(url_pattern) url = has_iframe(url, self.request) @@ -95,7 +96,7 @@ class RedirecionaParlamentar(RedirectView): logger = logging.getLogger(__name__) def get_redirect_url(self): - + url = EMPTY_STRING pk_parlamentar = self.request.GET.get( 'cod_parlamentar', @@ -105,17 +106,20 @@ class RedirecionaParlamentar(RedirectView): if pk_parlamentar: try: kwargs = {'pk': pk_parlamentar} - self.logger.debug("user=" + username + ". Tentando obter url correspondente.") + self.logger.debug("user=" + username + + ". Tentando obter url correspondente.") url = reverse(parlamentar_detail, kwargs=kwargs) except NoReverseMatch as e: - self.logger.error("user=" + username + ". Erro ao obter url. " + str(e)) + self.logger.error("user=" + username + + ". Erro ao obter url. " + str(e)) raise UnknownUrlNameError(parlamentar_detail, kwargs=kwargs) else: try: self.logger.debug("user=" + username + ". Tentando obter url.") url = reverse(parlamentar_list) except NoReverseMatch: - self.logger.error("user=" + username + ". Erro ao obter url. " + str(e)) + self.logger.error("user=" + username + + ". Erro ao obter url. " + str(e)) raise UnknownUrlNameError(parlamentar_list) numero_legislatura = self.request.GET.get( @@ -143,17 +147,20 @@ class RedirecionaComissao(RedirectView): kwargs = {'pk': pk_comissao} try: - self.logger.debug("user=" + username + ". Tentando obter url correspondente.") + self.logger.debug("user=" + username + + ". Tentando obter url correspondente.") url = reverse(comissao_detail, kwargs=kwargs) except NoReverseMatch as e: - self.logger.error("user=" + username + ". Erro ao obter url. " + str(e)) + self.logger.error("user=" + username + + ". Erro ao obter url. " + str(e)) raise UnknownUrlNameError(comissao_detail) else: try: self.logger.debug("user=" + username + ". Tentando obter url.") url = reverse(comissao_list) except NoReverseMatch as e: - self.logger.error("user=" + username + ". Erro ao obter url. " + str(e)) + self.logger.error("user=" + username + + ". Erro ao obter url. " + str(e)) raise UnknownUrlNameError(comissao_list) url = has_iframe(url, self.request) @@ -176,17 +183,20 @@ class RedirecionaComposicaoComissao(RedirectView): kwargs = {'pk': pk_comissao} try: - self.logger.debug("user=" + username + ". Tentando obter url correspondente.") + self.logger.debug("user=" + username + + ". Tentando obter url correspondente.") url = reverse(comissao_detail, kwargs=kwargs) except NoReverseMatch as e: - self.logger.error("user=" + username + ". Erro ao obter url. " + str(e)) + self.logger.error("user=" + username + + ". Erro ao obter url. " + str(e)) raise UnknownUrlNameError(comissao_detail) else: try: self.logger.debug("user=" + username + ". Tentando obter url.") url = reverse(comissao_list) except NoReverseMatch as e: - self.logger.error("user=" + username + ". Erro ao obter url. " + str(e)) + self.logger.error("user=" + username + + ". Erro ao obter url. " + str(e)) raise UnknownUrlNameError(comissao_list) url = has_iframe(url, self.request) @@ -199,7 +209,7 @@ class RedirecionaPautaSessao(RedirectView): logger = logging.getLogger(__name__) def get_redirect_url(self): - + pk_sessao_plenaria = self.request.GET.get( 'cod_sessao_plen', EMPTY_STRING) @@ -208,17 +218,20 @@ class RedirecionaPautaSessao(RedirectView): if pk_sessao_plenaria: kwargs = {'pk': pk_sessao_plenaria} try: - self.logger.debug("user=" + username + ". Tentando obter url correspondente.") + self.logger.debug("user=" + username + + ". Tentando obter url correspondente.") url = reverse(pauta_sessao_detail, kwargs=kwargs) except NoReverseMatch as e: - self.logger.error("user=" + username + ". Erro ao obter url. " + str(e)) + self.logger.error("user=" + username + + ". Erro ao obter url. " + str(e)) raise UnknownUrlNameError(pauta_sessao_detail) else: try: self.logger.debug("user=" + username + ". Tentando obter url.") url = reverse(pauta_sessao_list) except NoReverseMatch as e: - self.logger.error("user=" + username + ". Erro ao obter url. " + str(e)) + self.logger.error("user=" + username + + ". Erro ao obter url. " + str(e)) raise UnknownUrlNameError(pauta_sessao_list) data_sessao_plenaria = self.request.GET.get( @@ -255,10 +268,12 @@ class RedirecionaSessaoPlenaria(RedirectView): if pk_sessao_plenaria: kwargs = {'pk': pk_sessao_plenaria} try: - self.logger.debug("user=" + username + ". Tentando obter url correspondente.") + self.logger.debug("user=" + username + + ". Tentando obter url correspondente.") url = reverse(sessao_plenaria_detail, kwargs=kwargs) except NoReverseMatch as e: - self.logger.error("user=" + username + ". Erro ao obter url. " + str(e)) + self.logger.error("user=" + username + + ". Erro ao obter url. " + str(e)) raise UnknownUrlNameError(sessao_plenaria_detail) else: @@ -266,7 +281,8 @@ class RedirecionaSessaoPlenaria(RedirectView): self.logger.debug("user=" + username + ". Tentando obter url.") url = reverse(sessao_plenaria_list) except NoReverseMatch as e: - self.logger.error("user=" + username + ". Erro ao obter url. " + str(e)) + self.logger.error("user=" + username + + ". Erro ao obter url. " + str(e)) raise UnknownUrlNameError(sessao_plenaria_list) year = self.request.GET.get( @@ -302,14 +318,15 @@ class RedirecionaRelatoriosList(RedirectView): logger = logging.getLogger(__name__) def get_redirect_url(self): - + url = EMPTY_STRING username = self.request.user.username try: self.logger.debug("user=" + username + ". Tentando obter url.") url = reverse(relatorios_list) except NoReverseMatch as e: - self.logger.error("user=" + username + ". Erro ao obter url. " + str(e)) + self.logger.error("user=" + username + + ". Erro ao obter url. " + str(e)) raise UnknownUrlNameError(relatorios_list) url = has_iframe(url, self.request) @@ -328,7 +345,8 @@ class RedirecionaRelatoriosMateriasEmTramitacaoList(RedirectView): self.logger.debug("user=" + username + ". Tentando obter url.") url = reverse(relatorio_materia_por_tramitacao) except NoReverseMatch as e: - self.logger.error("user=" + username + ". Erro ao obter url. " + str(e)) + self.logger.error("user=" + username + + ". Erro ao obter url. " + str(e)) raise UnknownUrlNameError(relatorio_materia_por_tramitacao) year = self.request.GET.get( @@ -396,7 +414,8 @@ class RedirecionaMateriaLegislativaList(RedirectView): self.logger.debug("user=" + username + ". Tentando obter url.") url = reverse(materialegislativa_list) except NoReverseMatch as e: - self.logger.error("user=" + username + ". Erro ao obter url. " + str(e)) + self.logger.error("user=" + username + + ". Erro ao obter url. " + str(e)) raise UnknownUrlNameError(materialegislativa_list) tipo_materia = self.request.GET.get( @@ -468,14 +487,15 @@ class RedirecionaMesaDiretoraView(RedirectView): logger = logging.getLogger(__name__) def get_redirect_url(self): - + url = EMPTY_STRING username = self.request.user.username try: self.logger.debug("user=" + username + ". Tentando obter url.") url = reverse(parlamentar_mesa_diretora) except NoReverseMatch as e: - self.logger.error("user=" + username + ". Erro ao obter url. " + str(e)) + self.logger.error("user=" + username + + ". Erro ao obter url. " + str(e)) raise UnknownUrlNameError(parlamentar_mesa_diretora) url = has_iframe(url, self.request) @@ -509,12 +529,14 @@ class RedirecionaNormasJuridicasTextoIntegral(RedirectView): url = EMPTY_STRING username = self.request.user.username try: - self.logger.debug("user=" + username + ". Tentando obter NormaJuridica com pk={}.".format(kwargs['norma_id'])) + self.logger.debug( + "user=" + username + ". Tentando obter NormaJuridica com pk={}.".format(kwargs['norma_id'])) norma = NormaJuridica.objects.get(pk=kwargs['norma_id']) if norma: url = norma.texto_integral.url except Exception as e: - self.logger.error("user=" + username + ". Erro ao obter NormaJuridica com pk={}. ".format(kwargs['norma_id']) + str(e)) + self.logger.error( + "user=" + username + ". Erro ao obter NormaJuridica com pk={}. ".format(kwargs['norma_id']) + str(e)) raise e url = has_iframe(url, self.request) @@ -535,7 +557,8 @@ class RedirecionaNormasJuridicasList(RedirectView): self.logger.debug("user=" + username + ". Tentando obter url.") url = reverse(norma_juridica_pesquisa) except NoReverseMatch as e: - self.logger.error("user=" + username + ". Erro ao obter url. " + str(e)) + self.logger.error("user=" + username + + ". Erro ao obter url. " + str(e)) raise UnknownUrlNameError(norma_juridica_pesquisa) tipo_norma = self.request.GET.get( @@ -590,7 +613,7 @@ class RedirecionaHistoricoTramitacoesList(RedirectView): logger = logging.getLogger(__name__) def get_redirect_url(self): - + url = EMPTY_STRING args = EMPTY_STRING username = self.request.user.username @@ -598,7 +621,8 @@ class RedirecionaHistoricoTramitacoesList(RedirectView): self.logger.debug("user=" + username + ". Tentando obter url.") url = reverse(historico_tramitacoes) except NoReverseMatch as e: - self.logger.error("user=" + username + ". Erro ao obter url. " + str(e)) + self.logger.error("user=" + username + + ". Erro ao obter url. " + str(e)) raise UnknownUrlNameError(historico_tramitacoes) inicio_intervalo_data_tramitacao = self.request.GET.get( @@ -652,7 +676,7 @@ class RedirecionaAtasList(RedirectView): logger = logging.getLogger(__name__) def get_redirect_url(self): - + url = EMPTY_STRING args = EMPTY_STRING username = self.request.user.username @@ -660,7 +684,8 @@ class RedirecionaAtasList(RedirectView): self.logger.debug("user=" + username + ". Tentando obter url.") url = reverse(pesquisar_atas) except NoReverseMatch as e: - self.logger.error("user=" + username + ". Erro ao obter url. " + str(e)) + self.logger.error("user=" + username + + ". Erro ao obter url. " + str(e)) raise UnknownUrlNameError(pesquisar_atas) inicio_intervalo_data_ata = self.request.GET.get( @@ -691,7 +716,7 @@ class RedirecionaPresencaParlamentares(RedirectView): logger = logging.getLogger(__name__) def get_redirect_url(self): - + url = EMPTY_STRING args = EMPTY_STRING username = self.request.user.username @@ -699,7 +724,8 @@ class RedirecionaPresencaParlamentares(RedirectView): self.logger.debug("user=" + username + ". Tentando obter url.") url = reverse(presenca_sessao) except NoReverseMatch as e: - self.logger.error("user=" + username + ". Erro ao obter url. " + str(e)) + self.logger.error("user=" + username + + ". Erro ao obter url. " + str(e)) raise UnknownUrlNameError(presenca_sessao) inicio_intervalo_data_presenca_parlamentar = self.request.GET.get( @@ -736,7 +762,8 @@ class RedirecionaMateriasPorAutor(RedirectView): self.logger.debug("user=" + username + ". Tentando obter url.") url = reverse(relatorio_materia_por_autor) except NoReverseMatch as e: - self.logger.error("user=" + username + ". Erro ao obter url. " + str(e)) + self.logger.error("user=" + username + + ". Erro ao obter url. " + str(e)) raise UnknownUrlNameError(relatorio_materia_por_autor) url = has_iframe(url, self.request) @@ -750,7 +777,7 @@ class RedirecionaMateriasPorAnoAutorTipo(RedirectView): logger = logging.getLogger(__name__) def get_redirect_url(self): - + url = EMPTY_STRING ano = self.request.GET.get('ano', '') username = self.request.user.username @@ -758,7 +785,8 @@ class RedirecionaMateriasPorAnoAutorTipo(RedirectView): self.logger.debug("user=" + username + ". Tentando obter url.") url = reverse(relatorio_materia_por_ano_autor_tipo) except NoReverseMatch as e: - self.logger.error("user=" + username + ". Erro ao obter url. " + str(e)) + self.logger.error("user=" + username + + ". Erro ao obter url. " + str(e)) raise UnknownUrlNameError(relatorio_materia_por_ano_autor_tipo) if ano: @@ -776,7 +804,7 @@ class RedirecionaReuniao(RedirectView): logger = logging.getLogger(__name__) def get_redirect_url(self): - + pk_reuniao = self.request.GET.get( 'cod_comissao', EMPTY_STRING) @@ -785,10 +813,12 @@ class RedirecionaReuniao(RedirectView): if pk_reuniao: kwargs = {'pk': pk_reuniao} try: - self.logger.debug("user=" + username + ". Tentando obter url correspondente (pk={}).".format(kwargs['pk'])) + self.logger.debug( + "user=" + username + ". Tentando obter url correspondente (pk={}).".format(kwargs['pk'])) url = reverse(reuniao_detail, kwargs=kwargs) except NoReverseMatch as e: - self.logger.error("user=" + username + ". Erro ao obter url. " + str(e)) + self.logger.error("user=" + username + + ". Erro ao obter url. " + str(e)) raise UnknownUrlNameError(reuniao_detail) else: @@ -796,7 +826,8 @@ class RedirecionaReuniao(RedirectView): self.logger.debug("user=" + username + ". Tentando obter url.") url = reverse(reuniao_list) except NoReverseMatch as e: - self.logger.error("user=" + username + ". Erro ao obter url. " + str(e)) + self.logger.error("user=" + username + + ". Erro ao obter url. " + str(e)) raise UnknownUrlNameError(reuniao_list) year = self.request.GET.get( diff --git a/sapl/relatorios/urls.py b/sapl/relatorios/urls.py index 05ad22671..ee96a76d7 100644 --- a/sapl/relatorios/urls.py +++ b/sapl/relatorios/urls.py @@ -6,7 +6,7 @@ from .views import (relatorio_capa_processo, relatorio_etiqueta_protocolo, relatorio_materia, relatorio_ordem_dia, relatorio_pauta_sessao, relatorio_protocolo, relatorio_sessao_plenaria, - resumo_ata_pdf, relatorio_sessao_plenaria_pdf) + resumo_ata_pdf, relatorio_sessao_plenaria_pdf, etiqueta_materia_legislativa) app_name = AppConfig.name @@ -21,16 +21,24 @@ urlpatterns = [ name='relatorio_documento_administrativo'), url(r'^relatorios/espelho$', relatorio_espelho, name='relatorio_espelho'), + + # Url utilizada no arquivo: templates/sessao/pauta_sessao_list.html url(r'^relatorios/(?P\d+)/sessao-plenaria$', relatorio_sessao_plenaria, name='relatorio_sessao_plenaria'), + url(r'^relatorios/protocolo$', relatorio_protocolo, name='relatorio_protocolo'), url(r'^relatorios/(?P\d+)/(?P\d+)/etiqueta-protocolo$', relatorio_etiqueta_protocolo, name='relatorio_etiqueta_protocolo'), + + # Url utilizada no arquivo: templates/sessao/pauta_sessao_filter.html url(r'^relatorios/pauta-sessao/(?P\d+)/$', relatorio_pauta_sessao, name='relatorio_pauta_sessao'), + url(r'^relatorios/(?P\d+)/resumo_ata$', resumo_ata_pdf, name='resumo_ata_pdf'), url(r'^relatorios/(?P\d+)/sessao-plenaria-pdf$', relatorio_sessao_plenaria_pdf, name='relatorio_sessao_plenaria_pdf'), + url(r'^relatorios/(?P\d+)/etiqueta-materia-legislativa$', + etiqueta_materia_legislativa, name='etiqueta_materia_legislativa'), ] diff --git a/sapl/relatorios/views.py b/sapl/relatorios/views.py index 200ce04af..6b1f5b114 100755 --- a/sapl/relatorios/views.py +++ b/sapl/relatorios/views.py @@ -3,6 +3,7 @@ import html import logging import re import tempfile +import unidecode from django.core.exceptions import ObjectDoesNotExist from django.http import Http404, HttpResponse @@ -15,7 +16,7 @@ from sapl.settings import MEDIA_URL from sapl.base.models import Autor, CasaLegislativa from sapl.comissoes.models import Comissao from sapl.materia.models import (Autoria, MateriaLegislativa, Numeracao, - Tramitacao, UnidadeTramitacao) + Tramitacao, UnidadeTramitacao, ConfigEtiquetaMateriaLegislativa) from sapl.parlamentares.models import CargoMesa, Filiacao, Parlamentar from sapl.protocoloadm.models import (DocumentoAdministrativo, Protocolo, TramitacaoAdministrativo) @@ -26,7 +27,7 @@ from sapl.sessao.models import (ExpedienteMateria, ExpedienteSessao, SessaoPlenariaPresenca, OcorrenciaSessao, RegistroVotacao, VotoParlamentar, OradorOrdemDia, TipoExpediente, ResumoOrdenacao) from sapl.settings import STATIC_ROOT -from sapl.utils import LISTA_DE_UFS, TrocaTag, filiacao_data +from sapl.utils import LISTA_DE_UFS, TrocaTag, filiacao_data, create_barcode from sapl.sessao.views import (get_identificacao_basica, get_mesa_diretora, get_presenca_sessao, get_expedientes, @@ -124,7 +125,7 @@ def get_materias(mats): tramitacoes = Tramitacao.objects.filter( unidade_tramitacao_destino__isnull=True).order_by( - 'data_tramitacao') + '-data_tramitacao', '-id') for tramitacao in tramitacoes: des_status = tramitacao.status.descricao @@ -592,16 +593,19 @@ def get_sessao_plenaria(sessao, casa): # Lista das matérias do Expediente, incluindo o resultado das votacoes lst_expediente_materia = [] - for expediente_materia in ExpedienteMateria.objects.filter(sessao_plenaria=sessao): + for expediente_materia in ExpedienteMateria.objects.select_related("materia").filter(sessao_plenaria=sessao): # seleciona os detalhes de uma matéria materia = expediente_materia.materia + materia_em_tramitacao = materia.materiaemtramitacao_set.first() + dic_expediente_materia = { "num_ordem": expediente_materia.numero_ordem, - "id_materia": "{} {} {}/{}".format(materia.tipo.sigla, materia.tipo.descricao, str(materia.numero), - str(materia.ano)), + "id_materia": f"{materia.tipo.sigla} {materia.tipo.descricao} {str(materia.numero)}/{str(materia.ano)}", "des_numeracao": ' ', "des_turno": get_turno(materia)[0], + "situacao": materia_em_tramitacao.tramitacao.status if materia_em_tramitacao else _("Não informada"), "txt_ementa": str(materia.ementa), + "materia_observacao": materia.observacao, "ordem_observacao": expediente_materia.observacao, "nom_resultado": '', "nom_autor": '', @@ -622,18 +626,27 @@ def get_sessao_plenaria(sessao, casa): else: dic_expediente_materia["nom_autor"] = 'Desconhecido' - resultados = expediente_materia.registrovotacao_set.all() - if resultados: - for i in resultados: - dic_expediente_materia.update({ - "nom_resultado": i.tipo_resultado_votacao.nome, - "votacao_observacao": i.observacao - }) + rv = expediente_materia.registrovotacao_set.filter( + materia=expediente_materia.materia).first() + rp = expediente_materia.retiradapauta_set.filter( + materia=expediente_materia.materia).first() + if rv: + resultado = rv.tipo_resultado_votacao.nome + resultado_observacao = rv.observacao + elif rp: + resultado = rp.tipo_de_retirada.descricao + resultado_observacao = rp.observacao else: - dic_expediente_materia.update({ - "nom_resultado": 'Matéria não votada', - "votacao_observacao": ' ' - }) + resultado = _('Matéria lida') \ + if expediente_materia.tipo_votacao == 4 \ + else _('Matéria não votada') + resultado_observacao = _(' ') + + dic_expediente_materia.update({ + "nom_resultado": resultado, + "votacao_observacao": resultado_observacao + }) + lst_expediente_materia.append(dic_expediente_materia) # Lista dos votos nominais das matérias do Expediente @@ -648,7 +661,7 @@ def get_sessao_plenaria(sessao, casa): registro = RegistroVotacao.objects.filter(expediente=mevn) if registro: - for vp in VotoParlamentar.objects.filter(votacao=registro).order_by('parlamentar'): + for vp in VotoParlamentar.objects.filter(votacao__in=registro).order_by('parlamentar'): votos_materia.append(vp) lst_expediente_materia_vot_nom.append({ @@ -698,12 +711,15 @@ def get_sessao_plenaria(sessao, casa): if numeracao: dic_votacao["des_numeracao"] = (str(numeracao.numero_materia) + '/' + str(numeracao.ano_materia)) + materia_em_tramitacao = materia.materiaemtramitacao_set.first() dic_votacao.update({ "des_turno": get_turno(materia)[0], # https://github.com/interlegis/sapl/issues/1009 "txt_ementa": html.unescape(materia.ementa), + "materia_observacao": materia.observacao, "ordem_observacao": html.unescape(votacao.observacao), - "nom_autor": '' + "nom_autor": '', + "situacao": materia_em_tramitacao.tramitacao.status if materia_em_tramitacao else _("Não informada") }) autoria = materia.autoria_set.all() @@ -716,15 +732,26 @@ def get_sessao_plenaria(sessao, casa): else: dic_votacao["nom_autor"] = 'Desconhecido' - dic_votacao["votacao_observacao"] = ' ' - resultados = votacao.registrovotacao_set.all() - if resultados: - for i in resultados: - dic_votacao["nom_resultado"] = i.tipo_resultado_votacao.nome - if i.observacao: - dic_votacao["votacao_observacao"] = i.observacao + rv = votacao.registrovotacao_set.filter( + materia=votacao.materia).first() + rp = votacao.retiradapauta_set.filter( + materia=votacao.materia).first() + if rv: + resultado = rv.tipo_resultado_votacao.nome + resultado_observacao = rv.observacao + elif rp: + resultado = rp.tipo_de_retirada.descricao + resultado_observacao = rp.observacao else: - dic_votacao["nom_resultado"] = "Matéria não votada" + resultado = _('Matéria lida') if \ + votacao.tipo_votacao == 4 else _('Matéria não votada') + resultado_observacao = _(' ') + + dic_votacao.update({ + "nom_resultado": resultado, + "votacao_observacao": resultado_observacao + }) + lst_votacao.append(dic_votacao) # Lista dos votos nominais das matérias da Ordem do Dia @@ -739,7 +766,7 @@ def get_sessao_plenaria(sessao, casa): registro_od = RegistroVotacao.objects.filter(ordem=modvn) if registro_od: - for vp_od in VotoParlamentar.objects.filter(votacao=registro_od).order_by('parlamentar'): + for vp_od in VotoParlamentar.objects.filter(votacao__in=registro_od).order_by('parlamentar'): votos_materia_od.append(vp_od) lst_votacao_vot_nom.append({ @@ -814,7 +841,7 @@ def get_sessao_plenaria(sessao, casa): def get_turno(materia): descricao_turno = '' descricao_tramitacao = '' - tramitacoes = materia.tramitacao_set.all().order_by('-data_tramitacao') + tramitacoes = materia.tramitacao_set.order_by('-data_tramitacao', '-id').all() tramitacoes_turno = tramitacoes.exclude(turno="") if tramitacoes: @@ -1003,6 +1030,8 @@ def relatorio_etiqueta_protocolo(request, nro, ano): protocolo = Protocolo.objects.filter(numero=nro, ano=ano) + m = MateriaLegislativa.objects.filter(numero_protocolo=nro,ano=ano) + protocolo_data = get_etiqueta_protocolos(protocolo) pdf = pdf_etiqueta_protocolo_gerar.principal(imagem, @@ -1122,6 +1151,8 @@ def get_pauta_sessao(sessao, casa): dic_expediente_materia["id_materia"] = str( materia.numero) + "/" + str(materia.ano) dic_expediente_materia["txt_ementa"] = materia.ementa + dic_expediente_materia["materia_observacao"] = materia.observacao + dic_expediente_materia["ordem_observacao"] = str( expediente_materia.observacao) @@ -1194,8 +1225,23 @@ def get_pauta_sessao(sessao, casa): expedientes = [] for e in expediente: tipo = e.tipo - conteudo = re.sub( - ' ', ' ', strip_tags(e.conteudo.replace('
        ', '\n'))) + conteudo = e.conteudo + if not is_empty(conteudo): + # unescape HTML codes + # https://github.com/interlegis/sapl/issues/1046 + conteudo = re.sub('style=".*?"', '', conteudo) + conteudo = re.sub('class=".*?"', '', conteudo) + conteudo = re.sub('align=".*?"', '', conteudo) # OSTicket Ticket #796450 + conteudo = re.sub('', '

        ', conteudo) + conteudo = re.sub('', '
        ', conteudo) # OSTicket Ticket #796450 + conteudo = html.unescape(conteudo) + + # escape special character '&' + # https://github.com/interlegis/sapl/issues/1009 + conteudo = conteudo.replace('&', '&') + + # https://github.com/interlegis/sapl/issues/2386 + conteudo = remove_html_comments(conteudo) ex = {'tipo': tipo, 'conteudo': conteudo} expedientes.append(ex) @@ -1359,8 +1405,7 @@ def relatorio_normas_por_autor(obj, request, context): def relatorio_pauta_sessao_weasy(obj, request, context): sessao = context['object'] - info = "Pauta da {} ({} - {}) Legislatura".format(sessao, sessao.legislatura.data_inicio.year, - sessao.legislatura.data_fim.year) + info = f"Pauta da {sessao} ({sessao.legislatura.data_inicio.year} - {sessao.legislatura.data_fim.year}) Legislatura" return cria_relatorio(request, context, 'relatorios/relatorio_pauta_sessao.html', info) @@ -1498,3 +1543,51 @@ def relatorio_sessao_plenaria_pdf(request, pk): response.write(pdf_file) return response + + +def gera_etiqueta_ml(materia_legislativa, base_url): + confg = ConfigEtiquetaMateriaLegislativa.objects.first() + + ml_info = unidecode.unidecode("{}/{}-{}".format(materia_legislativa.numero, + materia_legislativa.ano, + materia_legislativa.tipo.sigla)) + base64_data = create_barcode(ml_info, 100, 500) + barcode = 'data:image/png;base64,{0}'.format(base64_data) + + max_ementa_size = 240 + ementa = materia_legislativa.ementa + ementa = ementa if len(ementa) < max_ementa_size else ementa[:max_ementa_size]+"..." + + context = { + 'numero': materia_legislativa.numero, + 'ano': materia_legislativa.ano, + 'tipo': materia_legislativa.tipo, + 'data_apresentacao':materia_legislativa.data_apresentacao, + 'autores': materia_legislativa.autores.all(), + 'ementa':ementa, + 'largura': confg.largura, + 'altura':confg.largura, + 'barcode': barcode + } + + main_template = render_to_string('relatorios/etiqueta_materia_legislativa.html', context) + + html = HTML(base_url=base_url, string=main_template) + main_doc = html.render(stylesheets=[CSS(string="@page {{size: {}cm {}cm;}}".format(confg.largura,confg.altura))]) + + pdf_file = main_doc.write_pdf() + return pdf_file + + +def etiqueta_materia_legislativa(request, pk): + base_url = request.build_absolute_uri() + materia_legislativa = MateriaLegislativa.objects.get(pk=pk) + + pdf_file = gera_etiqueta_ml(materia_legislativa, base_url) + + response = HttpResponse(content_type='application/pdf;') + response['Content-Disposition'] = 'inline; filename=etiqueta.pdf' + response['Content-Transfer-Encoding'] = 'binary' + response.write(pdf_file) + + return response \ No newline at end of file diff --git a/sapl/rules/__init__.py b/sapl/rules/__init__.py index bc4d27653..780e64311 100644 --- a/sapl/rules/__init__.py +++ b/sapl/rules/__init__.py @@ -27,7 +27,6 @@ SAPL_GROUP_SESSAO = _("Operador de Sessão Plenária") SAPL_GROUP_PAINEL = _("Operador de Painel Eletrônico") SAPL_GROUP_GERAL = _("Operador Geral") SAPL_GROUP_AUTOR = _("Autor") -SAPL_GROUP_PARLAMENTAR = _("Parlamentar") SAPL_GROUP_VOTANTE = _("Votante") # TODO - funcionalidade ainda não existe mas está aqui para efeito de anotação @@ -48,8 +47,11 @@ SAPL_GROUPS = [ SAPL_GROUP_PAINEL, SAPL_GROUP_GERAL, SAPL_GROUP_AUTOR, - SAPL_GROUP_PARLAMENTAR, SAPL_GROUP_VOTANTE, SAPL_GROUP_LOGIN_SOCIAL, SAPL_GROUP_ANONYMOUS, ] + +SAPL_GROUPS_DELETE = [ + +] diff --git a/sapl/rules/apps.py b/sapl/rules/apps.py index 2247e5c94..6a3c45f4b 100644 --- a/sapl/rules/apps.py +++ b/sapl/rules/apps.py @@ -8,7 +8,6 @@ from django.contrib.auth.management import _get_all_permissions from django.core import exceptions from django.db import models, router from django.db.utils import DEFAULT_DB_ALIAS -from django.utils.translation import string_concat from django.utils.translation import ugettext_lazy as _ import reversion @@ -55,13 +54,9 @@ def create_proxy_permissions( opts = klass._meta permissions = ( ("list_" + opts.model_name, - string_concat( - _('Visualizaçao da lista de'), ' ', - opts.verbose_name_plural)), + "{} {}".format(_('Visualizaçao da lista de'), opts.verbose_name_plural)), ("detail_" + opts.model_name, - string_concat( - _('Visualização dos detalhes de'), ' ', - opts.verbose_name_plural)), + "{} {}".format(_('Visualização dos detalhes de'), opts.verbose_name_plural)), ) opts.permissions = tuple( set(list(permissions) + list(opts.permissions))) @@ -172,6 +167,7 @@ def get_rules(): print(group_name, e) def groups_add_user(self, user, groups_name): + if not isinstance(groups_name, list): groups_name = [groups_name, ] for group_name in groups_name: @@ -216,9 +212,8 @@ def get_rules(): def update_groups(self): print('') - print(string_concat('\033[93m\033[1m', - _('Atualizando grupos do SAPL:'), - '\033[0m')) + print("\033[93m\033[1m{}\033[0m".format( + _('Atualizando grupos do SAPL:'))) for rules_group in self.rules_patterns: group_name = rules_group['group'] rules_list = rules_group['rules'] @@ -248,14 +243,8 @@ def revision_pre_delete_signal(sender, **kwargs): reversion.set_comment("Deletado pelo sinal.") +models.signals.post_migrate.connect(receiver=update_groups) models.signals.post_migrate.connect( - receiver=update_groups) - - -models.signals.post_migrate.connect( - receiver=create_proxy_permissions, - dispatch_uid="django.contrib.auth.management.create_permissions") - + receiver=create_proxy_permissions, dispatch_uid="django.contrib.auth.management.create_permissions") models.signals.pre_delete.connect( - receiver=revision_pre_delete_signal, - dispatch_uid="pre_delete_signal") + receiver=revision_pre_delete_signal, dispatch_uid="pre_delete_signal") diff --git a/sapl/rules/management/commands/check_ids_sequences.py b/sapl/rules/management/commands/check_ids_sequences.py new file mode 100644 index 000000000..92b47f9bc --- /dev/null +++ b/sapl/rules/management/commands/check_ids_sequences.py @@ -0,0 +1,67 @@ +import logging + +from django.apps import apps +from django.core.management.base import BaseCommand +from django.db import connection +from django.db.utils import DEFAULT_DB_ALIAS + +logger = logging.getLogger(__name__) + + +class Command(BaseCommand): + help = 'Check ids sequences and update them' + + def handle(self, *args, **kwargs): + models = apps.get_models() + + for model in models: + if model._meta.managed and model._meta.auto_field: + fn_check_sequence_for_model(model) + + +def fn_check_sequence_for_model(model): + SP_NAME = fn_check_sequence_for_model.__name__ + + with connection.cursor() as c: + try: + c.callproc(SP_NAME, [model._meta.db_table]) + except Exception as e: + if f"function {SP_NAME}(unknown) does not exist" not in str(e): + # Se ocorreu um erro e não é por inexistência da SP + logger.error(f"Falha na execução da Store Procedure para a tabela {model._meta.db_table}. {str(e)}") + else: + # se a execução da SP falhou por ela não existir + try: + # cria a SP + c.execute( + f""" + CREATE OR REPLACE FUNCTION {SP_NAME}(IN table_name character varying) RETURNS integer AS + $$ + DECLARE + max_id integer := 0; + BEGIN + EXECUTE format('SELECT setval(pg_get_serial_sequence(''%s'',''id''), coalesce(max(id), 1), max(id) IS NOT null) FROM %s', table_name, table_name ) INTO max_id; + if max_id is null then + EXECUTE format('DROP SEQUENCE IF EXISTS %s_id_seq cascade', table_name); + EXECUTE format('CREATE SEQUENCE %s_id_seq start 1 OWNED BY %s.id', table_name, table_name); + EXECUTE format('ALTER TABLE %s ALTER COLUMN id SET DEFAULT nextval(''%s_id_seq''::regclass)', table_name, table_name); + EXECUTE format('SELECT setval(pg_get_serial_sequence(''%s'',''id''), coalesce(max(id), 1), max(id) IS NOT null) FROM %s', table_name, table_name ) INTO max_id; + end if; + return max_id; + END; + $$ LANGUAGE plpgsql; + """ + ) + except Exception as e: + # se falhou na criação + logger.error(f"Falha na criação da Store Procedure {SP_NAME} para o tabela {model._meta.db_table}. {str(e)}") + logger.error(f"Falha na criação da Store Procedure {SP_NAME} para o tabela {model._meta.db_table}. {str(e)}") + try: + # tenta executá-la após criação. + c.callproc(SP_NAME, [model._meta.db_table]) + except Exception as e: + # se falhou na execução + logger.error(f"Falha na execução da Store Procedure {SP_NAME} para o tabela {model._meta.db_table}. {str(e)}") + + finally: + c.close() diff --git a/sapl/rules/map_rules.py b/sapl/rules/map_rules.py index e47ebe5dc..e4aa467dc 100644 --- a/sapl/rules/map_rules.py +++ b/sapl/rules/map_rules.py @@ -41,7 +41,7 @@ from sapl.rules import (RP_ADD, RP_CHANGE, RP_DELETE, RP_DETAIL, RP_LIST, SAPL_GROUP_AUTOR, SAPL_GROUP_COMISSOES, SAPL_GROUP_GERAL, SAPL_GROUP_LOGIN_SOCIAL, SAPL_GROUP_MATERIA, SAPL_GROUP_NORMA, - SAPL_GROUP_PAINEL, SAPL_GROUP_PARLAMENTAR, + SAPL_GROUP_PAINEL, SAPL_GROUP_PROTOCOLO, SAPL_GROUP_SESSAO, SAPL_GROUP_VOTANTE) from sapl.sessao import models as sessao @@ -95,6 +95,7 @@ rules_group_protocolo = { (materia.Proposicao, ['detail_proposicao_enviada', 'detail_proposicao_devolvida', 'detail_proposicao_incorporada'], set()), # TODO: tratar em sapl.api questão de que proposições incorporadas serem públicas + (materia.HistoricoProposicao, __base__, set()), (compilacao.TextoArticulado, [ 'view_restricted_textoarticulado'], __perms_publicas__) ] @@ -203,17 +204,13 @@ rules_group_autor = { 'group': SAPL_GROUP_AUTOR, 'rules': [ (materia.Proposicao, __base__, set()), + (materia.HistoricoProposicao, __base__, set()), (compilacao.Dispositivo, __base__ + [ 'change_your_dispositivo_edicao_dinamica', ], __perms_publicas__) ] } -rules_group_parlamentar = { - 'group': SAPL_GROUP_PARLAMENTAR, - 'rules': [] -} - rules_group_votante = { 'group': SAPL_GROUP_VOTANTE, 'rules': [ @@ -233,6 +230,7 @@ rules_group_geral = { [RP_ADD], __perms_publicas__), (base.TipoAutor, __base__, __perms_publicas__), (base.Autor, __base__, __perms_publicas__), + (base.OperadorAutor, __base__, __perms_publicas__), (base.AuditLog, __base__, set()), (protocoloadm.StatusTramitacaoAdministrativo, __base__, set()), @@ -258,7 +256,8 @@ rules_group_geral = { (materia.Parecer, __base__, __perms_publicas__), (materia.StatusTramitacao, __base__, __perms_publicas__), (materia.UnidadeTramitacao, __base__, __perms_publicas__), - + (materia.ConfigEtiquetaMateriaLegislativa, __base__, set()), + (norma.AssuntoNorma, __base__, __perms_publicas__), (norma.TipoNormaJuridica, __base__, __perms_publicas__), @@ -281,8 +280,12 @@ rules_group_geral = { (parlamentares.CargoMesa, __base__, __perms_publicas__), (parlamentares.ComposicaoMesa, __base__, __perms_publicas__), (parlamentares.Frente, __base__, __perms_publicas__), + (parlamentares.FrenteCargo, __base__, __perms_publicas__), + (parlamentares.FrenteParlamentar, __base__, __perms_publicas__), (parlamentares.Votante, __base__, __perms_publicas__), (parlamentares.Bloco, __base__, __perms_publicas__), + (parlamentares.BlocoCargo, __base__, __perms_publicas__), + (parlamentares.BlocoMembro, __base__, __perms_publicas__), (sessao.CargoBancada, __base__, __perms_publicas__), @@ -363,7 +366,6 @@ rules_patterns = [ rules_group_painel, rules_group_geral, rules_group_autor, - rules_group_parlamentar, rules_group_votante, rules_group_anonymous, # anotação para validação do teste de rules diff --git a/sapl/sessao/forms.py b/sapl/sessao/forms.py index 9ff12378c..cbfcbb2e4 100644 --- a/sapl/sessao/forms.py +++ b/sapl/sessao/forms.py @@ -266,17 +266,22 @@ class BancadaForm(ModelForm): return self.cleaned_data @transaction.atomic - def save(self, commit=True): + def save(self, commit=False): bancada = super(BancadaForm, self).save(commit) - content_type = ContentType.objects.get_for_model(Bancada) - object_id = bancada.pk - tipo = TipoAutor.objects.get(content_type=content_type) - Autor.objects.create( - content_type=content_type, - object_id=object_id, - tipo=tipo, - nome=bancada.nome - ) + + if not self.instance.pk: + bancada.save() + content_type = ContentType.objects.get_for_model(Bancada) + object_id = bancada.pk + tipo = TipoAutor.objects.get(content_type=content_type) + Autor.objects.create( + content_type=content_type, + object_id=object_id, + tipo=tipo, + nome=bancada.nome + ) + else: + bancada.save() return bancada @@ -349,14 +354,6 @@ class ExpedienteMateriaForm(ModelForm): else: cleaned_data['materia'] = materia - exists = self._model.objects.filter( - sessao_plenaria=sessao, - materia=materia).exists() - - if exists and not self.instance.pk: - msg = _('Essa matéria já foi cadastrada.') - raise ValidationError(msg) - return cleaned_data def save(self, commit=False): diff --git a/sapl/sessao/migrations/0052_auto_20200521_1534.py b/sapl/sessao/migrations/0052_auto_20200521_1534.py new file mode 100644 index 000000000..5869c8253 --- /dev/null +++ b/sapl/sessao/migrations/0052_auto_20200521_1534.py @@ -0,0 +1,18 @@ +# Generated by Django 2.2 on 2020-05-21 18:34 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('sessao', '0051_auto_20200416_1538'), + ] + + operations = [ + migrations.AlterField( + model_name='sessaoplenaria', + name='painel_aberto', + field=models.BooleanField(blank=True, default=False, verbose_name='Painel está aberto?'), + ), + ] diff --git a/sapl/sessao/migrations/0053_auto_20200609_1501.py b/sapl/sessao/migrations/0053_auto_20200609_1501.py new file mode 100644 index 000000000..ed1f61f83 --- /dev/null +++ b/sapl/sessao/migrations/0053_auto_20200609_1501.py @@ -0,0 +1,48 @@ +# Generated by Django 2.2 on 2020-06-09 18:01 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('sessao', '0052_auto_20200521_1534'), + ] + + operations = [ + migrations.AlterField( + model_name='expedientemateria', + name='registro_aberto', + field=models.BooleanField(blank=True, choices=[(True, 'Sim'), (False, 'Não')], default=False, null=True, verbose_name='Registro de Votação Iniciado?'), + ), + migrations.AlterField( + model_name='expedientemateria', + name='votacao_aberta', + field=models.BooleanField(blank=True, choices=[(True, 'Sim'), (False, 'Não')], default=False, null=True, verbose_name='Votação iniciada?'), + ), + migrations.AlterField( + model_name='ordemdia', + name='registro_aberto', + field=models.BooleanField(blank=True, choices=[(True, 'Sim'), (False, 'Não')], default=False, null=True, verbose_name='Registro de Votação Iniciado?'), + ), + migrations.AlterField( + model_name='ordemdia', + name='votacao_aberta', + field=models.BooleanField(blank=True, choices=[(True, 'Sim'), (False, 'Não')], default=False, null=True, verbose_name='Votação iniciada?'), + ), + migrations.AlterField( + model_name='sessaoplenaria', + name='finalizada', + field=models.BooleanField(blank=True, choices=[(True, 'Sim'), (False, 'Não')], default=False, null=True, verbose_name='Sessão finalizada?'), + ), + migrations.AlterField( + model_name='sessaoplenaria', + name='iniciada', + field=models.BooleanField(blank=True, choices=[(True, 'Sim'), (False, 'Não')], default=True, null=True, verbose_name='Sessão iniciada?'), + ), + migrations.AlterField( + model_name='sessaoplenaria', + name='interativa', + field=models.BooleanField(blank=True, choices=[(True, 'Sim'), (False, 'Não')], default=False, null=True, verbose_name='Sessão interativa'), + ), + ] diff --git a/sapl/sessao/migrations/0054_auto_20201013_1053.py b/sapl/sessao/migrations/0054_auto_20201013_1053.py new file mode 100644 index 000000000..eee729049 --- /dev/null +++ b/sapl/sessao/migrations/0054_auto_20201013_1053.py @@ -0,0 +1,73 @@ +# Generated by Django 2.2.13 on 2020-10-13 13:53 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('sessao', '0053_auto_20200609_1501'), + ] + + operations = [ + migrations.AlterModelOptions( + name='cargobancada', + options={'ordering': ('-cargo_unico', 'nome_cargo'), 'verbose_name': 'Cargo de Bancada', 'verbose_name_plural': 'Cargos de Bancada'}, + ), + migrations.AlterModelOptions( + name='expedientesessao', + options={'ordering': ('id',), 'verbose_name': 'Expediente de Sessão Plenaria', 'verbose_name_plural': 'Expedientes de Sessão Plenaria'}, + ), + migrations.AlterModelOptions( + name='integrantemesa', + options={'ordering': ('id',), 'verbose_name': 'Participação em Mesa de Sessão Plenaria', 'verbose_name_plural': 'Participações em Mesas de Sessão Plenaria'}, + ), + migrations.AlterModelOptions( + name='justificativaausencia', + options={'ordering': ('id',), 'verbose_name': 'Justificativa de Ausência', 'verbose_name_plural': 'Justificativas de Ausências'}, + ), + migrations.AlterModelOptions( + name='ocorrenciasessao', + options={'ordering': ('id',), 'verbose_name': 'Ocorrência da Sessão Plenaria', 'verbose_name_plural': 'Ocorrências da Sessão Plenaria'}, + ), + migrations.AlterModelOptions( + name='orador', + options={'ordering': ('id',), 'verbose_name': 'Orador das Explicações Pessoais', 'verbose_name_plural': 'Oradores das Explicações Pessoais'}, + ), + migrations.AlterModelOptions( + name='oradorexpediente', + options={'ordering': ('id',), 'verbose_name': 'Orador do Expediente', 'verbose_name_plural': 'Oradores do Expediente'}, + ), + migrations.AlterModelOptions( + name='oradorordemdia', + options={'ordering': ('id',), 'verbose_name': 'Orador da Ordem do Dia', 'verbose_name_plural': 'Oradores da Ordem do Dia'}, + ), + migrations.AlterModelOptions( + name='registroleitura', + options={'ordering': ('id',), 'verbose_name': 'Leitura', 'verbose_name_plural': 'Leituras'}, + ), + migrations.AlterModelOptions( + name='registrovotacao', + options={'ordering': ('id',), 'verbose_name': 'Votação', 'verbose_name_plural': 'Votações'}, + ), + migrations.AlterModelOptions( + name='resumoordenacao', + options={'ordering': ('id',), 'verbose_name': 'Ordenação do Resumo de uma Sessão', 'verbose_name_plural': 'Ordenação do Resumo de uma Sessão'}, + ), + migrations.AlterModelOptions( + name='retiradapauta', + options={'ordering': ('id',), 'verbose_name': 'Retirada de Pauta', 'verbose_name_plural': 'Retirada de Pauta'}, + ), + migrations.AlterModelOptions( + name='sessaoplenaria', + options={'ordering': ('data_inicio', 'hora_inicio'), 'verbose_name': 'Sessão Plenária', 'verbose_name_plural': 'Sessões Plenárias'}, + ), + migrations.AlterModelOptions( + name='tiporesultadovotacao', + options={'ordering': ('id',), 'verbose_name': 'Tipo de Resultado de Votação', 'verbose_name_plural': 'Tipos de Resultado de Votação'}, + ), + migrations.AlterModelOptions( + name='votoparlamentar', + options={'ordering': ('id',), 'verbose_name': 'Registro de Votação de Parlamentar', 'verbose_name_plural': 'Registros de Votações de Parlamentares'}, + ), + ] diff --git a/sapl/sessao/migrations/0055_auto_20210304_1221.py b/sapl/sessao/migrations/0055_auto_20210304_1221.py new file mode 100644 index 000000000..f5f21d9ae --- /dev/null +++ b/sapl/sessao/migrations/0055_auto_20210304_1221.py @@ -0,0 +1,17 @@ +# Generated by Django 2.2.13 on 2021-03-04 15:21 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('sessao', '0054_auto_20201013_1053'), + ] + + operations = [ + migrations.AlterModelOptions( + name='bancada', + options={'ordering': ('-legislatura__numero', 'nome'), 'verbose_name': 'Bancada Parlamentar', 'verbose_name_plural': 'Bancadas Parlamentares'}, + ), + ] diff --git a/sapl/sessao/models.py b/sapl/sessao/models.py index 84f493acd..47019abdb 100644 --- a/sapl/sessao/models.py +++ b/sapl/sessao/models.py @@ -30,6 +30,7 @@ class CargoBancada(models.Model): class Meta: verbose_name = _('Cargo de Bancada') verbose_name_plural = _('Cargos de Bancada') + ordering = ('-cargo_unico', 'nome_cargo') def __str__(self): return self.nome_cargo @@ -67,7 +68,7 @@ class Bancada(models.Model): class Meta: verbose_name = _('Bancada Parlamentar') verbose_name_plural = _('Bancadas Parlamentares') - ordering = ('-legislatura__numero', ) + ordering = ('-legislatura__numero', 'nome') def __str__(self): return self.nome @@ -204,23 +205,34 @@ class SessaoPlenaria(models.Model): storage=OverwriteStorage(), upload_to=anexo_upload_path, verbose_name=_('Anexo da Sessão')) - iniciada = models.NullBooleanField(blank=True, - choices=YES_NO_CHOICES, - verbose_name=_('Sessão iniciada?'), - default=True) - finalizada = models.NullBooleanField(blank=True, - choices=YES_NO_CHOICES, - verbose_name=_('Sessão finalizada?'), - default=False) - interativa = models.NullBooleanField(blank=True, - choices=YES_NO_CHOICES, - verbose_name=_('Sessão interativa')) + iniciada = models.BooleanField( + null=True, + blank=True, + default=True, + choices=YES_NO_CHOICES, + verbose_name=_('Sessão iniciada?') + ) + finalizada = models.BooleanField( + null=True, + blank=True, + default=False, + choices=YES_NO_CHOICES, + verbose_name=_('Sessão finalizada?') + ) + interativa = models.BooleanField( + null=True, + blank=True, + default=False, + choices=YES_NO_CHOICES, + verbose_name=_('Sessão interativa') + ) tema_solene = models.TextField( blank=True, max_length=500, verbose_name=_('Tema da Sessão Solene')) class Meta: verbose_name = _('Sessão Plenária') verbose_name_plural = _('Sessões Plenárias') + ordering = ('data_inicio', 'hora_inicio') def __str__(self): @@ -326,14 +338,20 @@ class AbstractOrdemDia(models.Model): resultado = models.TextField(blank=True, verbose_name=_('Resultado')) tipo_votacao = models.PositiveIntegerField( verbose_name=_('Tipo de votação'), choices=TIPO_VOTACAO_CHOICES, default=1) - votacao_aberta = models.NullBooleanField( + votacao_aberta = models.BooleanField( + null=True, blank=True, + default=False, choices=YES_NO_CHOICES, - verbose_name=_('Votação iniciada?')) - registro_aberto = models.NullBooleanField( + verbose_name=_('Votação iniciada?') + ) + registro_aberto = models.BooleanField( + null=True, blank=True, + default=False, choices=YES_NO_CHOICES, - verbose_name=_('Registro de Votação Iniciado?')) + verbose_name=_('Registro de Votação Iniciado?') + ) class Meta: abstract = True @@ -387,6 +405,7 @@ class ExpedienteSessao(models.Model): # ExpedienteSessaoPlenaria class Meta: verbose_name = _('Expediente de Sessão Plenaria') verbose_name_plural = _('Expedientes de Sessão Plenaria') + ordering = ('id',) def __str__(self): return '%s - %s' % (self.tipo, self.sessao_plenaria) @@ -402,6 +421,7 @@ class OcorrenciaSessao(models.Model): # OcorrenciaSessaoPlenaria class Meta: verbose_name = _('Ocorrência da Sessão Plenaria') verbose_name_plural = _('Ocorrências da Sessão Plenaria') + ordering = ('id',) def __str__(self): return '%s - %s' % (self.sessao_plenaria, self.conteudo) @@ -417,6 +437,7 @@ class IntegranteMesa(models.Model): # MesaSessaoPlenaria class Meta: verbose_name = _('Participação em Mesa de Sessão Plenaria') verbose_name_plural = _('Participações em Mesas de Sessão Plenaria') + ordering = ('id',) def __str__(self): return '%s - %s' % (self.cargo, self.parlamentar) @@ -466,6 +487,7 @@ class Orador(AbstractOrador): # Oradores class Meta: verbose_name = _('Orador das Explicações Pessoais') verbose_name_plural = _('Oradores das Explicações Pessoais') + ordering = ('id',) @reversion.register() @@ -474,6 +496,7 @@ class OradorExpediente(AbstractOrador): # OradoresExpediente class Meta: verbose_name = _('Orador do Expediente') verbose_name_plural = _('Oradores do Expediente') + ordering = ('id',) @reversion.register() @@ -482,6 +505,7 @@ class OradorOrdemDia(AbstractOrador): # OradoresOrdemDia class Meta: verbose_name = _('Orador da Ordem do Dia') verbose_name_plural = _('Oradores da Ordem do Dia') + ordering = ('id',) @reversion.register() @@ -525,6 +549,7 @@ class TipoResultadoVotacao(models.Model): class Meta: verbose_name = _('Tipo de Resultado de Votação') verbose_name_plural = _('Tipos de Resultado de Votação') + ordering = ('id',) def __str__(self): return self.nome @@ -568,6 +593,7 @@ class RegistroVotacao(models.Model): class Meta: verbose_name = _('Votação') verbose_name_plural = _('Votações') + ordering = ('id',) def __str__(self): return _('Ordem: %(ordem)s - Votação: %(votacao)s - ' @@ -626,6 +652,7 @@ class VotoParlamentar(models.Model): # RegistroVotacaoParlamentar class Meta: verbose_name = _('Registro de Votação de Parlamentar') verbose_name_plural = _('Registros de Votações de Parlamentares') + ordering = ('id',) def __str__(self): return _('Votação: %(votacao)s - Parlamentar: %(parlamentar)s') % { @@ -729,6 +756,7 @@ class ResumoOrdenacao(models.Model): class Meta: verbose_name = _('Ordenação do Resumo de uma Sessão') verbose_name_plural = _('Ordenação do Resumo de uma Sessão') + ordering = ('id',) def __str__(self): return 'Ordenação do Resumo de uma Sessão' @@ -798,6 +826,7 @@ class JustificativaAusencia(models.Model): class Meta: verbose_name = _('Justificativa de Ausência') verbose_name_plural = _('Justificativas de Ausências') + ordering = ('id',) def __str__(self): return 'Justificativa de Ausência' @@ -863,6 +892,7 @@ class RetiradaPauta(models.Model): class Meta: verbose_name = _('Retirada de Pauta') verbose_name_plural = _('Retirada de Pauta') + ordering = ('id',) def __str__(self): return _('Ordem: %(ordem)s - Requerente: %(requerente)s - ' @@ -913,6 +943,7 @@ class RegistroLeitura(models.Model): class Meta: verbose_name = _('Leitura') verbose_name_plural = _('Leituras') + ordering = ('id',) def __str__(self): return _('Leitura - ' diff --git a/sapl/sessao/tests/test_sessao_view.py b/sapl/sessao/tests/test_sessao_view.py index 322d7fd5f..00284465b 100644 --- a/sapl/sessao/tests/test_sessao_view.py +++ b/sapl/sessao/tests/test_sessao_view.py @@ -1,5 +1,5 @@ import pytest -from django.core.urlresolvers import reverse +from django.urls import reverse from django.utils.translation import ugettext_lazy as _ from model_bakery import baker diff --git a/sapl/sessao/urls.py b/sapl/sessao/urls.py index 5eb8872e7..2630e6515 100644 --- a/sapl/sessao/urls.py +++ b/sapl/sessao/urls.py @@ -34,7 +34,10 @@ from sapl.sessao.views import (AdicionarVariasMateriasExpediente, recuperar_nome_tipo_sessao, ExpedienteLeituraView, OrdemDiaLeituraView, - retirar_leitura) + retirar_leitura, + TransferenciaMateriasExpediente, TransferenciaMateriasOrdemDia, + filtra_materias_copia_sessao_ajax, verifica_materia_sessao_plenaria_ajax) + from .apps import AppConfig @@ -75,6 +78,12 @@ urlpatterns = [ url(r'^sessao/sessao-legislativa-legislatura-ajax/', sessao_legislativa_legislatura_ajax, name='sessao_legislativa_legislatura_ajax_view'), + url(r'^sessao/filtra-materias-copia-sessao-ajax/', + filtra_materias_copia_sessao_ajax, + name='filtra_materias_copia_sessao_ajax_view'), + url(r'^sessao/verifica-materia-sessao-plenaria-ajax/', + verifica_materia_sessao_plenaria_ajax, + name='verifica_materia_sessao_plenaria_ajax_view'), url(r'^sessao/(?P\d+)/(?P\d+)/abrir-votacao$', abrir_votacao, @@ -191,5 +200,11 @@ urlpatterns = [ url(r'^sessao/(?P\d+)/(?P\d+)/(?P\d+)/retirar-leitura$', retirar_leitura, name='retirar_leitura'), - + + url(r'^sessao/(?P\d+)/transf-mat-exp$', + TransferenciaMateriasExpediente.as_view(), + name="transf_mat_exp"), + url(r'^sessao/(?P\d+)/transf-mat-ordemdia$', + TransferenciaMateriasOrdemDia.as_view(), + name="transf_mat_ordemdia"), ] diff --git a/sapl/sessao/views.py b/sapl/sessao/views.py index 26da9d23a..566965746 100755 --- a/sapl/sessao/views.py +++ b/sapl/sessao/views.py @@ -7,7 +7,7 @@ from django.contrib import messages from django.contrib.auth.decorators import permission_required from django.contrib.auth.mixins import PermissionRequiredMixin from django.core.exceptions import ObjectDoesNotExist -from django.core.urlresolvers import reverse +from django.urls import reverse from django.db.models import Max, Q from django.http import JsonResponse from django.http.response import Http404, HttpResponseRedirect @@ -29,7 +29,7 @@ from sapl.crud.base import (RP_DETAIL, RP_LIST, Crud, CrudAux, PermissionRequiredForAppCrudMixin, make_pagination) from sapl.materia.forms import filtra_tramitacao_status from sapl.materia.models import (Autoria, TipoMateriaLegislativa, - Tramitacao) + Tramitacao, MateriaEmTramitacao, Numeracao) from sapl.materia.views import MateriaLegislativaPesquisaView from sapl.parlamentares.models import (Filiacao, Legislatura, Mandato, Parlamentar, SessaoLegislativa) @@ -77,7 +77,8 @@ def reordena_materias(request, pk, tipo, ordenacao): "1": ("materia__tipo__sequencia_regimental", "materia__ano", "materia__numero"), "2": ("materia__ano", "materia__numero"), "3": ("-materia__ano", "materia__numero"), - "4": ("materia__autores", "materia__ano", "materia__numero") + "4": ("materia__autores", "materia__ano", "materia__numero"), + "5": ("numero_ordem",) } TIPOS_URLS_SUCESSO = { @@ -86,11 +87,12 @@ def reordena_materias(request, pk, tipo, ordenacao): } materias = TIPOS_MATERIAS[tipo].objects.filter(sessao_plenaria_id=pk).order_by(*TIPOS_ORDENACAO[ordenacao]) - materias = OrderedDict.fromkeys(materias) + update_list = [] for numero, materia in enumerate(materias, 1): materia.numero_ordem = numero - materia.save() + update_list.append(materia) + TIPOS_MATERIAS[tipo].objects.bulk_update(update_list, ['numero_ordem']) return HttpResponseRedirect(reverse(TIPOS_URLS_SUCESSO[tipo], kwargs={'pk': pk})) @@ -202,56 +204,44 @@ def customize_link_materia(context, pk, has_permission, is_expediente): for i, row in enumerate(context['rows']): materia = context['object_list'][i].materia obj = context['object_list'][i] - url_materia = reverse('sapl.materia:materialegislativa_detail', - kwargs={'pk': materia.id}) - numeracao = materia.numeracao_set.first() - autoria = materia.autoria_set.filter( - primeiro_autor=True).first() - autor = autoria.autor if autoria else None - num_protocolo = materia.numero_protocolo + url_materia = reverse('sapl.materia:materialegislativa_detail', kwargs={'pk': materia.id}) + numeracao = materia.numeracao_set.first() if materia.numeracao_set.first() else "-" + autoria = materia.autoria_set.filter(primeiro_autor=True) + autor = ', '.join([str(a.autor) for a in autoria]) if autoria else "-" + num_protocolo = materia.numero_protocolo if materia.numero_protocolo else "-" data_inicio_sessao = SessaoPlenaria.objects.get(id=pk).data_inicio - tramitacao = Tramitacao.objects.filter(materia=materia, - turno__isnull=False, - data_tramitacao__lte=data_inicio_sessao - ).exclude(turno__exact='' - ).select_related( - 'materia', - 'status', - 'materia__tipo').order_by( - '-data_tramitacao' - ).first() - turno = ' ' + tramitacao = Tramitacao.objects\ + .select_related('materia', 'status', 'materia__tipo')\ + .filter(materia=materia, turno__isnull=False, data_tramitacao__lte=data_inicio_sessao)\ + .exclude(turno__exact='')\ + .order_by('-data_tramitacao', '-id')\ + .first() + turno = '-' if tramitacao: for t in Tramitacao.TURNO_CHOICES: if t[0] == tramitacao.turno: turno = t[1] break - - title_materia = """%s
        - Processo: %s
        - Autor: %s
        - Protocolo: %s
        - Turno: %s
        - """ % (obj.materia.id, - url_materia, - row[1][0], - numeracao if numeracao else '', - autor if autor else '', - num_protocolo if num_protocolo else '', - turno) - + materia_em_tramitacao = MateriaEmTramitacao.objects\ + .select_related("materia", "tramitacao")\ + .filter(materia=materia)\ + .first() + + title_materia = f"""{row[1][0]}
        + Processo: {numeracao}
        + Autor: {autor}
        + Protocolo: {num_protocolo}
        + Turno: {turno}
        + """ # Na linha abaixo, o segundo argumento é None para não colocar # url em toda a string de title_materia context['rows'][i][1] = (title_materia, None) - exist_resultado = obj.registrovotacao_set.filter( - materia=obj.materia).exists() - exist_retirada = obj.retiradapauta_set.filter( - materia=obj.materia).exists() - exist_leitura = obj.registroleitura_set.filter( - materia=obj.materia).exists() + exist_resultado = obj.registrovotacao_set.filter(materia=obj.materia).exists() + exist_retirada = obj.retiradapauta_set.filter(materia=obj.materia).exists() + exist_leitura = obj.registroleitura_set.filter(materia=obj.materia).exists() if (obj.tipo_votacao != 4 and not exist_resultado and not exist_retirada) or\ (obj.tipo_votacao == 4 and not exist_leitura): @@ -529,6 +519,194 @@ def get_presencas_generic(model, sessao, legislatura): yield (m.parlamentar, False) +# Constantes de identificação de categoria de Matéria Legislativa +# para Cópia de Matérias entre Sessões +MATERIAS_EXPEDIENTE = 1 +MATERIAS_ORDEMDIA = 2 + + +def filtra_materias_copia_sessao_ajax(request): + categoria_materia = int(request.GET['categoria_materia']) + sessao_plenaria = request.GET['sessao_plenaria_atual'] + sessao_plenaria_destino = request.GET['sessao_plenaria_destino'] + + if categoria_materia == MATERIAS_EXPEDIENTE: + materias_sessao_destino = ExpedienteMateria.objects.filter( + sessao_plenaria=sessao_plenaria_destino + ).values_list('materia__id') + + lista_materias_disponiveis_copia = ExpedienteMateria.objects.filter( + sessao_plenaria=sessao_plenaria + ).exclude(materia__id__in=materias_sessao_destino) + + elif categoria_materia == MATERIAS_ORDEMDIA: + materias_sessao_destino = OrdemDia.objects.filter( + sessao_plenaria=sessao_plenaria_destino + ).values_list('materia__id') + + lista_materias_disponiveis_copia = OrdemDia.objects.filter( + sessao_plenaria=sessao_plenaria + ).exclude(materia__id__in=materias_sessao_destino) + + lista_materias = [ + { + 'id': opcao.id, + 'materia_id': opcao.materia.id, + 'materia_tipo_sigla': opcao.materia.tipo.sigla, + 'materia_numero': opcao.materia.numero, + 'materia_ano': opcao.materia.ano, + 'materia_tipo_descricao': opcao.materia.tipo.descricao + } for opcao in lista_materias_disponiveis_copia + ] + + return JsonResponse({ 'materias': lista_materias }) + + +class TransferenciaMateriasSessaoAbstract(PermissionRequiredMixin, ListView): + logger = logging.getLogger(__name__) + template_name = 'sessao/transf_mat_sessao.html' + + def get_context_data(self, **kwargs): + context = super( + TransferenciaMateriasSessaoAbstract, self + ).get_context_data(**kwargs) + + sessao_plenaria_atual = SessaoPlenaria.objects.get(pk=self.kwargs['pk']) + + context['subnav_template_name'] = 'sessao/subnav.yaml' + context['root_pk'] = self.kwargs['pk'] + + if not sessao_plenaria_atual.finalizada: + msg = _('A sessão plenária deve estar finalizada.') + messages.add_message(self.request, messages.ERROR, msg) + return context + + if self.expediente: + context['title'] = '%s (%s)' % ( + self.title, sessao_plenaria_atual.__str__() + ) + + context["categoria_materia"] = self.categoria_materia + materias_sessao = ExpedienteMateria.objects.filter( + sessao_plenaria=sessao_plenaria_atual + ).exists() + + elif self.ordem: + context["title"] = '%s (%s)' % ( + self.title, sessao_plenaria_atual.__str__() + ) + + context["categoria_materia"] = self.categoria_materia + materias_sessao = OrdemDia.objects.filter( + sessao_plenaria=sessao_plenaria_atual + ).exists() + + if materias_sessao: + context['sessoes_destino'] = SessaoPlenaria.objects.filter( + data_inicio__gte=sessao_plenaria_atual.data_inicio + ).exclude(pk=sessao_plenaria_atual.pk).order_by("-data_inicio") + + context['materias_sessao'] = materias_sessao + return context + + def post(self, request, *args, **kwargs): + marcadas = request.POST.getlist('opcao_id') + + if not marcadas: + msg = _('Nenhuma matéria foi selecionada.') + messages.add_message(request, messages.ERROR, msg) + return self.get(request, self.kwargs) + + sessao_plenaria_destino_id = request.POST['sessao_plenaria'] + if not sessao_plenaria_destino_id: + self.logger.error( + "Sessão plenária de destino inexistente." + ) + + msg = _('Ocorreu um erro inesperado. Tente novamente.') + messages.add_message(request, messages.ERROR, msg) + + msg_c = _( + 'Se o problema persistir, entre em contato com o suporte do ' \ + 'Interlegis.' + ) + messages.add_message(request, messages.WARNING, msg_c) + + return self.get(request, self.kwargs) + + sessao = SessaoPlenaria.objects.get(id=sessao_plenaria_destino_id) + if self.expediente: + lista_expediente = [] + + exp = ExpedienteMateria.objects.filter(sessao_plenaria=sessao) + numero_ordem = exp.last().numero_ordem if exp.exists() else 0 + for num_ordem, expediente in enumerate( + ExpedienteMateria.objects.filter(id__in=marcadas), + numero_ordem+1 + ): + lista_expediente.append( + ExpedienteMateria( + sessao_plenaria=sessao, materia=expediente.materia, + data_ordem=expediente.data_ordem, + observacao=expediente.observacao, + numero_ordem=num_ordem, + tipo_votacao=expediente.tipo_votacao, + votacao_aberta=False, registro_aberto=False + ) + ) + ExpedienteMateria.objects.bulk_create(lista_expediente) + + elif self.ordem: + lista_ordemdia = [] + + o = OrdemDia.objects.filter(sessao_plenaria=sessao) + numero_ordem = o.last().numero_ordem if o.exists() else 0 + for num_ordem, ordemdia in enumerate( + OrdemDia.objects.filter(id__in=marcadas), numero_ordem+1 + ): + lista_ordemdia.append( + OrdemDia( + sessao_plenaria=sessao, materia=ordemdia.materia, + data_ordem=ordemdia.data_ordem, + observacao=ordemdia.observacao, + numero_ordem=num_ordem, + tipo_votacao=ordemdia.tipo_votacao, + votacao_aberta=False, registro_aberto=False + ) + ) + OrdemDia.objects.bulk_create(lista_ordemdia) + + msg = _('Matéria(s) copiada(s) com sucesso.') + messages.add_message(request, messages.SUCCESS, msg) + + success_url = reverse( + self.listagem_url, kwargs={'pk': sessao_plenaria_destino_id} + ) + return HttpResponseRedirect(success_url) + + +class TransferenciaMateriasExpediente(TransferenciaMateriasSessaoAbstract): + expediente = True + ordem = False + title = "Copiar Matérias do Expediente" + categoria_materia = MATERIAS_EXPEDIENTE + listagem_url = 'sapl.sessao:expedientemateria_list' + + model = ExpedienteMateria + permission_required = ('sessao.change_expedientemateria', ) + + +class TransferenciaMateriasOrdemDia(TransferenciaMateriasSessaoAbstract): + expediente = False + ordem = True + title = "Copiar Matérias da Ordem do Dia" + categoria_materia = MATERIAS_ORDEMDIA + listagem_url = 'sapl.sessao:ordemdia_list' + + model = OrdemDia + permission_required = ('sessao.change_ordemdia', ) + + class TipoExpedienteCrud(CrudAux): model = TipoExpediente @@ -560,6 +738,11 @@ class MateriaOrdemDiaCrud(MasterDetailCrud): class CreateView(MasterDetailCrud.CreateView): form_class = OrdemDiaForm + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context["tipo_materia_sessao"] = MATERIAS_ORDEMDIA + return context + def get_initial(self): self.initial['data_ordem'] = SessaoPlenaria.objects.get( pk=self.kwargs['pk']).data_inicio.strftime('%d/%m/%Y') @@ -577,11 +760,25 @@ class MateriaOrdemDiaCrud(MasterDetailCrud): class UpdateView(MasterDetailCrud.UpdateView): form_class = OrdemDiaForm + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + + context["tipo_materia_sessao"] = MATERIAS_ORDEMDIA + + context["tipo_materia_salvo"] = self.object.materia.tipo.id + context["numero_materia_salvo"] = self.object.materia.numero + context["ano_materia_salvo"] = self.object.materia.ano + + return context + def get_initial(self): initial = super().get_initial() + initial['tipo_materia'] = self.object.materia.tipo.id initial['numero_materia'] = self.object.materia.numero initial['ano_materia'] = self.object.materia.ano + initial['numero_ordem'] = self.object.numero_ordem + return initial class DetailView(MasterDetailCrud.DetailView): @@ -598,6 +795,7 @@ class MateriaOrdemDiaCrud(MasterDetailCrud): self.paginate_by = None context = super().get_context_data(**kwargs) + has_permition = self.request.user.has_module_perms(AppConfig.label) return customize_link_materia(context, self.kwargs['pk'], has_permition, False) @@ -653,6 +851,11 @@ class ExpedienteMateriaCrud(MasterDetailCrud): class CreateView(MasterDetailCrud.CreateView): form_class = ExpedienteMateriaForm + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context["tipo_materia_sessao"] = MATERIAS_EXPEDIENTE + return context + def get_initial(self): initial = super().get_initial() initial['data_ordem'] = SessaoPlenaria.objects.get( @@ -671,11 +874,25 @@ class ExpedienteMateriaCrud(MasterDetailCrud): class UpdateView(MasterDetailCrud.UpdateView): form_class = ExpedienteMateriaForm + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + + context["tipo_materia_sessao"] = MATERIAS_EXPEDIENTE + + context["tipo_materia_salvo"] = self.object.materia.tipo.id + context["numero_materia_salvo"] = self.object.materia.numero + context["ano_materia_salvo"] = self.object.materia.ano + + return context + def get_initial(self): initial = super().get_initial() + initial['tipo_materia'] = self.object.materia.tipo.id initial['numero_materia'] = self.object.materia.numero initial['ano_materia'] = self.object.materia.ano + initial['numero_ordem'] = self.object.numero_ordem + return initial class DetailView(MasterDetailCrud.DetailView): @@ -706,6 +923,8 @@ class OradorCrud(MasterDetailCrud): class CreateView(MasterDetailCrud.CreateView): form_class = OradorForm + template_name = 'sessao/oradores_create.html' + def get_initial(self): return {'id_sessao': self.kwargs['pk']} @@ -718,6 +937,8 @@ class OradorCrud(MasterDetailCrud): if tipo_sessao.nome == "Solene": context.update( {'subnav_template_name': 'sessao/subnav-solene.yaml'}) + ultimo_orador = Orador.objects.filter(sessao_plenaria=kwargs['root_pk']).order_by("-numero_ordem").first() + context["ultima_ordem"] = ultimo_orador.numero_ordem if ultimo_orador else 0 return context def get_success_url(self): @@ -775,6 +996,7 @@ class OradorExpedienteCrud(OradorCrud): class CreateView(MasterDetailCrud.CreateView): form_class = OradorExpedienteForm + template_name = 'sessao/oradores_create.html' def get_initial(self): return {'id_sessao': self.kwargs['pk']} @@ -787,6 +1009,8 @@ class OradorExpedienteCrud(OradorCrud): if tipo_sessao.nome == "Solene": context.update( {'subnav_template_name': 'sessao/subnav-solene.yaml'}) + ultimo_orador = OradorExpediente.objects.filter(sessao_plenaria=kwargs['root_pk']).order_by("-numero_ordem").first() + context["ultima_ordem"] = ultimo_orador.numero_ordem if ultimo_orador else 0 return context def get_success_url(self): @@ -850,9 +1074,9 @@ class OradorExpedienteCrud(OradorCrud): class OradorOrdemDiaCrud(OradorCrud): model = OradorOrdemDia - class CreateView(MasterDetailCrud.CreateView): form_class = OradorOrdemDiaForm + template_name = 'sessao/oradores_create.html' def get_initial(self): return {'id_sessao': self.kwargs['pk']} @@ -861,6 +1085,12 @@ class OradorOrdemDiaCrud(OradorCrud): return reverse('sapl.sessao:oradorordemdia_list', kwargs={'pk': self.kwargs['pk']}) + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + ultimo_orador = OradorOrdemDia.objects.filter(sessao_plenaria=kwargs['root_pk']).order_by("-numero_ordem").first() + context["ultima_ordem"] = ultimo_orador.numero_ordem if ultimo_orador else 0 + return context + class UpdateView(MasterDetailCrud.UpdateView): form_class = OradorOrdemDiaForm @@ -875,6 +1105,7 @@ class OradorOrdemDiaCrud(OradorCrud): class BancadaCrud(CrudAux): model = Bancada + public = [RP_DETAIL, RP_LIST] class CreateView(CrudAux.CreateView): form_class = BancadaForm @@ -882,6 +1113,12 @@ class BancadaCrud(CrudAux): def get_success_url(self): return reverse('sapl.sessao:bancada_list') + class UpdateView(CrudAux.UpdateView): + form_class = BancadaForm + + def get_success_url(self): + return reverse('sapl.sessao:bancada_list') + def recuperar_numero_sessao_view(request): try: @@ -1136,7 +1373,7 @@ class PainelView(PermissionRequiredForAppCrudMixin, TemplateView): logger = logging.getLogger(__name__) def get(self, request, *args, **kwargs): - if request.user.is_anonymous(): + if request.user.is_anonymous: self.template_name = 'painel/index.html' request.session['discurso'] = 'stop' @@ -1689,29 +1926,15 @@ def get_expedientes(sessao_plenaria): def get_materias_expediente(sessao_plenaria): - materias = ExpedienteMateria.objects.filter( - sessao_plenaria_id=sessao_plenaria.id) - materias_expediente = [] - for m in materias: - - ementa = m.materia.ementa - titulo = m.materia - numero = m.numero_ordem - + for m in ExpedienteMateria.objects.select_related("materia").filter(sessao_plenaria_id=sessao_plenaria.id): tramitacao = '' - tramitacoes = Tramitacao.objects.filter( - materia=m.materia).order_by('-pk') - for aux_tramitacao in tramitacoes: + for aux_tramitacao in Tramitacao.objects.filter(materia=m.materia).order_by('-data_tramitacao', '-id'): if aux_tramitacao.turno: tramitacao = aux_tramitacao break - turno = None - if tramitacao: - turno = get_turno(tramitacao.turno) - - rv = m.registrovotacao_set.first() + rv = m.registrovotacao_set.filter(materia=m.materia).first() rp = m.retiradapauta_set.filter(materia=m.materia).first() if rv: resultado = rv.tipo_resultado_votacao.nome @@ -1720,30 +1943,26 @@ def get_materias_expediente(sessao_plenaria): resultado = rp.tipo_de_retirada.descricao resultado_observacao = rp.observacao else: - if m.tipo_votacao == 4: - resultado = _('Matéria lida') - else: - resultado = _('Matéria não votada') - resultado_observacao = _(' ') - - autoria = Autoria.objects.filter(materia_id=m.materia_id) - autor = [str(x.autor) for x in autoria] - - mat = {'ementa': ementa, - 'titulo': titulo, - 'numero': numero, - 'turno': turno, - 'resultado': resultado, - 'resultado_observacao': resultado_observacao, - 'autor': autor, - 'numero_protocolo': m.materia.numero_protocolo, - 'numero_processo': m.materia.numeracao_set.last(), - 'observacao': m.observacao - } - materias_expediente.append(mat) + resultado = _('Matéria lida') if m.tipo_votacao == 4 else _('Matéria não votada') + resultado_observacao = '' + + materia_em_tramitacao = m.materia.materiaemtramitacao_set.first() + materias_expediente.append({ + 'ementa': m.materia.ementa, + 'titulo': m.materia, + 'numero': m.numero_ordem, + 'turno': get_turno(tramitacao.turno) if tramitacao else None, + 'situacao': materia_em_tramitacao.tramitacao.status if materia_em_tramitacao else _("Não informada"), + 'resultado': resultado, + 'resultado_observacao': resultado_observacao, + 'autor': [str(x.autor) for x in Autoria.objects.select_related("autor").filter(materia_id=m.materia_id)], + 'numero_protocolo': m.materia.numero_protocolo, + 'numero_processo': m.materia.numeracao_set.last(), + 'observacao_materia': m.materia.observacao, + 'observacao': m.observacao + }) - context = {'materia_expediente': materias_expediente} - return context + return {'materia_expediente': materias_expediente} def get_oradores_expediente(sessao_plenaria): @@ -1811,26 +2030,14 @@ def get_assinaturas(sessao_plenaria): def get_materias_ordem_do_dia(sessao_plenaria): - ordem = OrdemDia.objects.filter(sessao_plenaria_id=sessao_plenaria.id) materias_ordem = [] - for o in ordem: - ementa = o.materia.ementa - ementa_observacao = o.observacao - titulo = o.materia - numero = o.numero_ordem - + for o in OrdemDia.objects.filter(sessao_plenaria_id=sessao_plenaria.id): tramitacao = '' - tramitacoes = Tramitacao.objects.filter( - materia=o.materia).order_by('-pk') - for aux_tramitacao in tramitacoes: + for aux_tramitacao in Tramitacao.objects.filter(materia=o.materia).order_by('-data_tramitacao', '-id'): if aux_tramitacao.turno: tramitacao = aux_tramitacao break - turno = None - if tramitacao: - turno = get_turno(tramitacao.turno) - # Verificar resultado rv = o.registrovotacao_set.filter(materia=o.materia).first() rp = o.retiradapauta_set.filter(materia=o.materia).first() @@ -1841,55 +2048,46 @@ def get_materias_ordem_do_dia(sessao_plenaria): resultado = rp.tipo_de_retirada.descricao resultado_observacao = rp.observacao else: - if o.tipo_votacao == 4: - resultado = _('Matéria lida') - else: - resultado = _('Matéria não votada') - resultado_observacao = _(' ') + resultado = _('Matéria lida') if o.tipo_votacao == 4 else _('Matéria não votada') + resultado_observacao = '' - voto_sim = "" - voto_nao = "" - voto_abstencoes = "" voto_nominal = [] - if o.tipo_votacao == 2: - votos = VotoParlamentar.objects.filter(ordem=o.id) - for voto in votos: - aux_voto = (voto.parlamentar.nome_completo, voto.voto) - voto_nominal.append(aux_voto) - try: - voto = RegistroVotacao.objects.filter(ordem=o.id).last() + for voto in VotoParlamentar.objects.filter(ordem=o.id): + voto_nominal.append((voto.parlamentar.nome_completo, voto.voto)) + + voto = RegistroVotacao.objects.filter(ordem=o.id).last() + if voto: voto_sim = voto.numero_votos_sim voto_nao = voto.numero_votos_nao voto_abstencoes = voto.numero_abstencoes - except AttributeError: + else: voto_sim = " Não Informado" voto_nao = " Não Informado" voto_abstencoes = " Não Informado" - autoria = Autoria.objects.filter( - materia_id=o.materia_id) - autor = [str(x.autor) for x in autoria] - mat = {'ementa': ementa, - 'ementa_observacao': ementa_observacao, - 'titulo': titulo, - 'numero': numero, - 'turno': turno, - 'resultado': resultado, - 'resultado_observacao': resultado_observacao, - 'autor': autor, - 'numero_protocolo': o.materia.numero_protocolo, - 'numero_processo': o.materia.numeracao_set.last(), - 'tipo_votacao': o.TIPO_VOTACAO_CHOICES[o.tipo_votacao], - 'voto_sim': voto_sim, - 'voto_nao': voto_nao, - 'voto_abstencoes': voto_abstencoes, - 'voto_nominal': voto_nominal, - } - materias_ordem.append(mat) + materia_em_tramitacao = o.materia.materiaemtramitacao_set.first() + materias_ordem.append({ + 'ementa': o.materia.ementa, + 'ementa_observacao': o.observacao, + 'titulo': o.materia, + 'numero': o.numero_ordem, + 'turno': get_turno(tramitacao.turno) if tramitacao else None, + 'situacao': materia_em_tramitacao.tramitacao.status if materia_em_tramitacao else _("Não informada"), + 'resultado': resultado, + 'resultado_observacao': resultado_observacao, + 'autor': [str(x.autor) for x in Autoria.objects.select_related("autor").filter(materia_id=o.materia_id)], + 'numero_protocolo': o.materia.numero_protocolo, + 'numero_processo': o.materia.numeracao_set.last(), + 'tipo_votacao': o.TIPO_VOTACAO_CHOICES[o.tipo_votacao], + 'voto_sim': voto_sim, + 'voto_nao': voto_nao, + 'voto_abstencoes': voto_abstencoes, + 'voto_nominal': voto_nominal, + 'observacao': o.observacao + }) - context = {'materias_ordem': materias_ordem} - return context + return {'materias_ordem': materias_ordem} def get_oradores_ordemdia(sessao_plenaria): @@ -1957,25 +2155,20 @@ class ResumoView(DetailView): context = self.get_context_data(object=self.object) # Votos de Votação Nominal de Matérias Expediente - materias_expediente_votacao_nominal = ExpedienteMateria.objects.filter( - sessao_plenaria_id=self.object.id, - tipo_votacao=2).order_by('-materia') - votacoes = [] - for mevn in materias_expediente_votacao_nominal: - + for mevn in ExpedienteMateria.objects.filter(sessao_plenaria_id=self.object.id, tipo_votacao=2)\ + .order_by('-materia'): votos_materia = [] titulo_materia = mevn.materia registro = RegistroVotacao.objects.filter(expediente=mevn) if registro: - for vp in VotoParlamentar.objects.filter(votacao=registro).order_by('parlamentar'): + for vp in VotoParlamentar.objects.filter(votacao__in=registro).order_by('parlamentar'): votos_materia.append(vp) - dados_votacao = { + votacoes.append({ 'titulo': titulo_materia, 'votos': votos_materia - } - votacoes.append(dados_votacao) + }) context.update({'votos_nominais_materia_expediente': votacoes}) @@ -2009,24 +2202,19 @@ class ResumoView(DetailView): # ===================================================================== # Matérias Ordem do Dia # Votos de Votação Nominal de Matérias Ordem do Dia - materias_ordem_dia_votacao_nominal = OrdemDia.objects.filter( - sessao_plenaria_id=self.object.id, - tipo_votacao=2).order_by('-materia') - votacoes_od = [] - for modvn in materias_ordem_dia_votacao_nominal: + for modvn in OrdemDia.objects.filter(sessao_plenaria_id=self.object.id, tipo_votacao=2).order_by('-materia'): votos_materia_od = [] t_materia = modvn.materia registro_od = RegistroVotacao.objects.filter(ordem=modvn) if registro_od: - for vp_od in VotoParlamentar.objects.filter(votacao=registro_od).order_by('parlamentar'): + for vp_od in VotoParlamentar.objects.filter(votacao__in=registro_od).order_by('parlamentar'): votos_materia_od.append(vp_od) - dados_votacao_od = { + votacoes_od.append({ 'titulo': t_materia, 'votos': votos_materia_od - } - votacoes_od.append(dados_votacao_od) + }) context.update({'votos_nominais_materia_ordem_dia': votacoes_od}) @@ -2292,9 +2480,7 @@ class VotacaoEditView(SessaoPermissionMixin): if(int(request.POST['anular_votacao']) == 1): RegistroVotacao.objects.filter(ordem_id=ordem_id).delete() - ordem = OrdemDia.objects.get( - sessao_plenaria_id=self.object.id, - materia_id=materia_id) + ordem = OrdemDia.objects.get(id=ordem_id) ordem.votacao_aberta = False ordem.resultado = '' ordem.save() @@ -2473,9 +2659,7 @@ class VotacaoView(SessaoPermissionMixin): 'e da ordem de id={}. '.format(materia_id, ordem_id) + str(e)) return self.form_invalid(form) else: - ordem = OrdemDia.objects.get( - sessao_plenaria_id=self.object.id, - materia_id=materia_id) + ordem = OrdemDia.objects.get(id=ordem_id) resultado = TipoResultadoVotacao.objects.get( id=request.POST['resultado_votacao']) ordem.resultado = resultado.nome @@ -3231,9 +3415,7 @@ class VotacaoExpedienteView(SessaoPermissionMixin): self.logger.error("user=" + username + ". " + str(e)) return self.form_invalid(form) else: - expediente = ExpedienteMateria.objects.get( - sessao_plenaria_id=self.object.id, - materia_id=materia_id) + expediente = ExpedienteMateria.objects.get(id=expediente_id) resultado = TipoResultadoVotacao.objects.get( id=request.POST['resultado_votacao']) expediente.resultado = resultado.nome @@ -3330,10 +3512,7 @@ class VotacaoExpedienteEditView(SessaoPermissionMixin): if int(request.POST['anular_votacao']) == 1: RegistroVotacao.objects.filter( expediente_id=expediente_id).delete() - - expediente = ExpedienteMateria.objects.get( - sessao_plenaria_id=self.object.id, - materia_id=materia_id) + expediente = ExpedienteMateria.objects.get(id=expediente_id) expediente.votacao_aberta = False expediente.resultado = '' expediente.save() @@ -3387,132 +3566,105 @@ class PautaSessaoDetailView(DetailView): # ===================================================================== # Identificação Básica abertura = self.object.data_inicio.strftime('%d/%m/%Y') - if self.object.data_fim: - encerramento = self.object.data_fim.strftime('%d/%m/%Y') - else: - encerramento = "" - + encerramento = self.object.data_fim.strftime('%d/%m/%Y') if self.object.data_fim else "" hora_inicio = self.object.hora_inicio hora_fim = self.object.hora_fim - context.update({'basica': [ - _('Tipo de Sessão: %(tipo)s') % {'tipo': self.object.tipo}, - _('Abertura: %(abertura)s - %(hora_inicio)s') % { - 'abertura': abertura, 'hora_inicio': hora_inicio}, - _('Encerramento: %(encerramento)s - %(hora_fim)s') % { - 'encerramento': encerramento, 'hora_fim': hora_fim}, - ]}) + context.update({ + 'basica': [ + _(f'Tipo de Sessão: {self.object.tipo}'), + _(f'Abertura: {abertura} - {hora_inicio}'), + _(f'Encerramento: {encerramento} - {hora_fim}') + ] + }) # ===================================================================== # Matérias Expediente - materias = ExpedienteMateria.objects.filter( - sessao_plenaria_id=self.object.id) - materias_expediente = [] - for m in materias: - ementa = m.materia.ementa - titulo = m.materia - numero = m.numero_ordem - - ultima_tramitacao = m.materia.tramitacao_set.last() - - situacao = ultima_tramitacao.status if ultima_tramitacao else None - - if situacao is None: - situacao = _("Não informada") - rv = m.registrovotacao_set.all() + for m in ExpedienteMateria.objects \ + .prefetch_related('registrovotacao_set') \ + .select_related("materia", "materia__tipo") \ + .filter(sessao_plenaria_id=self.object.id): + rv = m.registrovotacao_set.first() if rv: - resultado = rv[0].tipo_resultado_votacao.nome - resultado_observacao = rv[0].observacao + resultado = rv.tipo_resultado_votacao.nome + resultado_observacao = rv.observacao else: resultado = _('Matéria não votada') resultado_observacao = _(' ') - autoria = Autoria.objects.filter(materia_id=m.materia_id) - autor = [str(x.autor) for x in autoria] - - mat = {'id': m.materia_id, - 'ementa': ementa, - 'observacao': m.observacao, - 'titulo': titulo, - 'numero': numero, - 'resultado': resultado, - 'resultado_observacao': resultado_observacao, - 'situacao': situacao, - 'autor': autor - } - materias_expediente.append(mat) - + ultima_tramitacao = m.materia.tramitacao_set.order_by('-data_tramitacao', '-id').first() + numeracao = m.materia.numeracao_set.first() + + materias_expediente.append({ + 'id': m.materia_id, + 'ementa': m.materia.ementa, + 'observacao': m.observacao, + 'titulo': m.materia, + 'numero': m.numero_ordem, + 'resultado': resultado, + 'resultado_observacao': resultado_observacao, + 'situacao': ultima_tramitacao.status if ultima_tramitacao else _("Não informada"), + 'processo': f'{str(numeracao.numero_materia)}/{str(numeracao.ano_materia)}' if numeracao else '-', + 'autor': [str(x.autor) for x in m.materia.autoria_set.select_related('autor').all()] + }) context.update({'materia_expediente': materias_expediente}) # ===================================================================== # Expedientes - expediente = ExpedienteSessao.objects.filter( - sessao_plenaria_id=self.object.id).order_by('tipo__ordenacao') - expedientes = [] - for e in expediente: + for e in ExpedienteSessao.objects.select_related("tipo").filter(sessao_plenaria_id=self.object.id)\ + .order_by('tipo__ordenacao'): conteudo = e.conteudo from sapl.relatorios.views import is_empty if not is_empty(conteudo): tipo = e.tipo conteudo = sub(' ', ' ', conteudo) - ex = {'tipo': tipo, 'conteudo': conteudo} - expedientes.append(ex) + expedientes.append({'tipo': tipo, 'conteudo': conteudo}) context.update({'expedientes': expedientes}) # ===================================================================== # Orador Expediente - oradores = OradorExpediente.objects.filter( - sessao_plenaria_id=self.object.id).order_by('numero_ordem') - context.update({'oradores': oradores}) + context.update({ + 'oradores': OradorExpediente.objects.filter(sessao_plenaria_id=self.object.id).order_by('numero_ordem') + }) # ===================================================================== # Matérias Ordem do Dia - ordem = OrdemDia.objects.filter( - sessao_plenaria_id=self.object.id) - materias_ordem = [] - for o in ordem: - ementa = o.materia.ementa - titulo = o.materia - numero = o.numero_ordem - - ultima_tramitacao = o.materia.tramitacao_set.last() - - situacao = ultima_tramitacao.status if ultima_tramitacao else None - - if situacao is None: - situacao = _("Não informada") + for o in OrdemDia.objects \ + .prefetch_related('registrovotacao_set') \ + .select_related("materia", "materia__tipo") \ + .filter(sessao_plenaria_id=self.object.id): # Verificar resultado - rv = o.registrovotacao_set.all() + rv = o.registrovotacao_set.first() if rv: - resultado = rv[0].tipo_resultado_votacao.nome - resultado_observacao = rv[0].observacao + resultado = rv.tipo_resultado_votacao.nome + resultado_observacao = rv.observacao else: resultado = _('Matéria não votada') resultado_observacao = _(' ') - autoria = Autoria.objects.filter( - materia_id=o.materia_id) - autor = [str(x.autor) for x in autoria] - - mat = {'id': o.materia_id, - 'ementa': ementa, - 'observacao': o.observacao, - 'titulo': titulo, - 'numero': numero, - 'resultado': resultado, - 'resultado_observacao': resultado_observacao, - 'situacao': situacao, - 'autor': autor - } - materias_ordem.append(mat) - - context.update({'materias_ordem': materias_ordem}) - context.update({'subnav_template_name': 'sessao/pauta_subnav.yaml'}) + ultima_tramitacao = o.materia.tramitacao_set.order_by('-data_tramitacao', '-id').first() + numeracao = o.materia.numeracao_set.first() + + materias_ordem.append({ + 'id': o.materia_id, + 'ementa': o.materia.ementa, + 'observacao': o.observacao, + 'titulo': o.materia, + 'numero': o.numero_ordem, + 'resultado': resultado, + 'resultado_observacao': resultado_observacao, + 'situacao': ultima_tramitacao.status if ultima_tramitacao else _("Não informada"), + 'processo': f'{str(numeracao.numero_materia)}/{str(numeracao.ano_materia)}' if numeracao else '-', + 'autor': [str(x.autor) for x in Autoria.objects.select_related("autor").filter(materia_id=o.materia_id)] + }) - is_pdf = True if request.build_absolute_uri().split( - '/')[-1] == 'pdf' else False + context.update({ + 'materias_ordem': materias_ordem, + 'subnav_template_name': 'sessao/pauta_subnav.yaml' + }) - if is_pdf: + # Verifica se é um PDF + if request.build_absolute_uri().split('/')[-1] == 'pdf': return relatorio_pauta_sessao_weasy(self, request, context) else: return self.render_to_response(context) @@ -3604,11 +3756,31 @@ def retira_materias_ja_adicionadas(id_sessao, model): return lista_id_materias +def verifica_materia_sessao_plenaria_ajax(request): + # Define se a matéria é do expediente ou da ordem do dia + tipo_materia_sessao = int(request.GET['tipo_materia_sessao']) + + id_materia_selecionada = request.GET['id_materia_selecionada'] + pk_sessao_plenaria = request.GET['pk_sessao_plenaria'] + + if tipo_materia_sessao == MATERIAS_EXPEDIENTE: + is_materia_presente = ExpedienteMateria.objects.filter( + sessao_plenaria=pk_sessao_plenaria, materia=id_materia_selecionada + ).exists() + elif tipo_materia_sessao == MATERIAS_ORDEMDIA: + is_materia_presente = OrdemDia.objects.filter( + sessao_plenaria=pk_sessao_plenaria, materia=id_materia_selecionada + ).exists() + + return JsonResponse({ 'is_materia_presente': is_materia_presente }) + + class AdicionarVariasMateriasExpediente(PermissionRequiredForAppCrudMixin, MateriaLegislativaPesquisaView): filterset_class = AdicionarVariasMateriasFilterSet template_name = 'sessao/adicionar_varias_materias_expediente.html' app_label = AppConfig.label + tipo_materia_sessao = MATERIAS_EXPEDIENTE logger = logging.getLogger(__name__) @@ -3649,6 +3821,8 @@ class AdicionarVariasMateriasExpediente(PermissionRequiredForAppCrudMixin, context['filter_url'] = ('&' + qr.urlencode()) if len(qr) > 0 else '' context['pk_sessao'] = self.kwargs['pk'] + context["tipo_materia_sessao"] = self.tipo_materia_sessao + return context def post(self, request, *args, **kwargs): @@ -3700,6 +3874,7 @@ class AdicionarVariasMateriasExpediente(PermissionRequiredForAppCrudMixin, class AdicionarVariasMateriasOrdemDia(AdicionarVariasMateriasExpediente): filterset_class = AdicionarVariasMateriasFilterSet template_name = 'sessao/adicionar_varias_materias_ordem.html' + tipo_materia_sessao = MATERIAS_ORDEMDIA logger = logging.getLogger(__name__) diff --git a/sapl/settings.py b/sapl/settings.py index 3d803dacd..7bb5a25c9 100644 --- a/sapl/settings.py +++ b/sapl/settings.py @@ -41,7 +41,7 @@ ALLOWED_HOSTS = ['*'] LOGIN_REDIRECT_URL = '/' LOGIN_URL = '/login/?next=' -SAPL_VERSION = '3.1.161-RC3' +SAPL_VERSION = '3.1.162-RC6' if DEBUG: EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' @@ -65,9 +65,7 @@ SAPL_APPS = ( 'sapl.redireciona_urls', 'sapl.compilacao', 'sapl.api', - 'sapl.rules' - ) INSTALLED_APPS = ( @@ -84,7 +82,6 @@ INSTALLED_APPS = ( 'floppyforms', 'drf_yasg', - #'rest_framework_swagger', 'rest_framework', 'rest_framework.authtoken', 'django_filters', @@ -107,7 +104,7 @@ INSTALLED_APPS = ( # https://github.com/interlegis/sapl/issues/2055 HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.BaseSignalProcessor' # Disable auto index SEARCH_BACKEND = '' -SEARCH_URL = ['',''] +SEARCH_URL = ['', ''] # SOLR USE_SOLR = config('USE_SOLR', cast=bool, default=False) @@ -136,10 +133,10 @@ MIDDLEWARE = [ 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', - 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.security.SecurityMiddleware', + 'whitenoise.middleware.WhiteNoiseMiddleware', ] if DEBUG: INSTALLED_APPS += ('debug_toolbar', ) @@ -178,7 +175,6 @@ CACHES = { } - ROOT_URLCONF = 'sapl.urls' TEMPLATES = [ @@ -196,6 +192,9 @@ TEMPLATES = [ 'django.contrib.messages.context_processors.messages', 'sapl.context_processors.parliament_info', 'sapl.context_processors.mail_service_configured', + 'sapl.context_processors.google_recaptcha_configured', + 'sapl.context_processors.sapl_as_sapn', + ], 'debug': DEBUG }, @@ -242,7 +241,7 @@ EMAIL_RUNNING = None MAX_DOC_UPLOAD_SIZE = 150 * 1024 * 1024 # 150MB MAX_IMAGE_UPLOAD_SIZE = 2 * 1024 * 1024 # 2MB -DATA_UPLOAD_MAX_MEMORY_SIZE= 10 * 1024 * 1024 # 10MB +DATA_UPLOAD_MAX_MEMORY_SIZE = 10 * 1024 * 1024 # 10MB # Internationalization # https://docs.djangoproject.com/en/1.8/topics/i18n/ @@ -270,18 +269,20 @@ LOCALE_PATHS = ( 'locale', ) -FRONTEND_CUSTOM = config('FRONTEND_CUSTOM', default=False, cast=bool) - WEBPACK_LOADER = { 'DEFAULT': { 'CACHE': not DEBUG, 'BUNDLE_DIR_NAME': 'sapl/static/sapl/frontend', - 'STATS_FILE': (BASE_DIR if not FRONTEND_CUSTOM else PROJECT_DIR.parent.child('sapl-frontend')).child('webpack-stats.json'), + 'STATS_FILE': PROJECT_DIR.child('frontend').child(f'{"dev-" if DEBUG else ""}webpack-stats.json'), 'POLL_INTERVAL': 0.1, 'TIMEOUT': None, 'IGNORE': [r'.+\.hot-update.js', r'.+\.map'] } } +if DEBUG and not WEBPACK_LOADER['DEFAULT']['STATS_FILE'].exists(): + WEBPACK_LOADER['DEFAULT']['STATS_FILE'] = PROJECT_DIR.child( + 'frontend').child(f'webpack-stats.json') + STATIC_URL = '/static/' STATIC_ROOT = PROJECT_DIR.child("collected_static") @@ -289,10 +290,6 @@ STATIC_ROOT = PROJECT_DIR.child("collected_static") STATICFILES_DIRS = ( BASE_DIR.child('static'), ) -if FRONTEND_CUSTOM: - STATICFILES_DIRS = ( - PROJECT_DIR.parent.child('sapl-frontend').child('dist'), - ) STATICFILES_FINDERS = ( 'django.contrib.staticfiles.finders.FileSystemFinder', @@ -311,6 +308,8 @@ CRISPY_ALLOWED_TEMPLATE_PACKS = 'bootstrap4' CRISPY_FAIL_SILENTLY = not DEBUG FLOPPY_FORMS_USE_GIS = False +FORM_RENDERER = 'django.forms.renderers.DjangoTemplates' + # suprime texto de ajuda default do django-filter FILTERS_HELP_TEXT_FILTER = False @@ -368,4 +367,6 @@ def remove_warnings(): ) +LOGOUT_REDIRECT_URL = '/login' + remove_warnings() diff --git a/sapl/static/sapl/frontend/css/chunk-vendors.42151acc.css b/sapl/static/sapl/frontend/css/chunk-vendors.42151acc.css deleted file mode 100644 index 235e92052..000000000 --- a/sapl/static/sapl/frontend/css/chunk-vendors.42151acc.css +++ /dev/null @@ -1,126 +0,0 @@ -/*! - * Font Awesome Free 5.13.0 by @fontawesome - https://fontawesome.com - * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) - */.fa,.fab,.fad,.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:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{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-both,.fa-flip-horizontal.fa-flip-vertical,.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}:root .fa-flip-both,: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:2.5em}.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-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adobe:before{content:"\f778"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-freshener:before{content:"\f5d0"}.fa-airbnb:before{content:"\f834"}.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-alipay:before{content:"\f642"}.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-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.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-alt:before{content:"\f5d1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.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-artstation:before{content:"\f77a"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-atlas:before{content:"\f558"}.fa-atlassian:before{content:"\f77b"}.fa-atom:before{content:"\f5d2"}.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-award:before{content:"\f559"}.fa-aws:before{content:"\f375"}.fa-baby:before{content:"\f77c"}.fa-baby-carriage:before{content:"\f77d"}.fa-backspace:before{content:"\f55a"}.fa-backward:before{content:"\f04a"}.fa-bacon:before{content:"\f7e5"}.fa-bahai:before{content:"\f666"}.fa-balance-scale:before{content:"\f24e"}.fa-balance-scale-left:before{content:"\f515"}.fa-balance-scale-right:before{content:"\f516"}.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-battle-net:before{content:"\f835"}.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-bezier-curve:before{content:"\f55b"}.fa-bible:before{content:"\f647"}.fa-bicycle:before{content:"\f206"}.fa-biking:before{content:"\f84a"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-biohazard:before{content:"\f780"}.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-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blind:before{content:"\f29d"}.fa-blog:before{content:"\f781"}.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-bone:before{content:"\f5d7"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-book-dead:before{content:"\f6b7"}.fa-book-medical:before{content:"\f7e6"}.fa-book-open:before{content:"\f518"}.fa-book-reader:before{content:"\f5da"}.fa-bookmark:before{content:"\f02e"}.fa-bootstrap:before{content:"\f836"}.fa-border-all:before{content:"\f84c"}.fa-border-none:before{content:"\f850"}.fa-border-style:before{content:"\f853"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-box-open:before{content:"\f49e"}.fa-box-tissue:before{content:"\f95b"}.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-bread-slice:before{content:"\f7ec"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-brush:before{content:"\f55d"}.fa-btc:before{content:"\f15a"}.fa-buffer:before{content:"\f837"}.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-bus-alt:before{content:"\f55e"}.fa-business-time:before{content:"\f64a"}.fa-buy-n-large:before{content:"\f8a6"}.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-day:before{content:"\f783"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-times:before{content:"\f273"}.fa-calendar-week:before{content:"\f784"}.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-campground:before{content:"\f6bb"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-candy-cane:before{content:"\f786"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-car-alt:before{content:"\f5de"}.fa-car-battery:before{content:"\f5df"}.fa-car-crash:before{content:"\f5e1"}.fa-car-side:before{content:"\f5e4"}.fa-caravan:before{content:"\f8ff"}.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-carrot:before{content:"\f787"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cash-register:before{content:"\f788"}.fa-cat:before{content:"\f6be"}.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-centos:before{content:"\f789"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-charging-station:before{content:"\f5e7"}.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-double:before{content:"\f560"}.fa-check-square:before{content:"\f14a"}.fa-cheese:before{content:"\f7ef"}.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-chromecast:before{content:"\f838"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-city:before{content:"\f64f"}.fa-clinic-medical:before{content:"\f7f2"}.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-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-cocktail:before{content:"\f561"}.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-coins:before{content:"\f51e"}.fa-columns:before{content:"\f0db"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-medical:before{content:"\f7f5"}.fa-comment-slash:before{content:"\f4b3"}.fa-comments:before{content:"\f086"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compress:before{content:"\f066"}.fa-compress-alt:before{content:"\f422"}.fa-compress-arrows-alt:before{content:"\f78c"}.fa-concierge-bell:before{content:"\f562"}.fa-confluence:before{content:"\f78d"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-cotton-bureau:before{content:"\f89e"}.fa-couch:before{content:"\f4b8"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-credit-card:before{content:"\f09d"}.fa-critical-role:before{content:"\f6c9"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-crutch:before{content:"\f7f7"}.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-d-and-d-beyond:before{content:"\f6ca"}.fa-dailymotion:before{content:"\f952"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-delicious:before{content:"\f1a5"}.fa-democrat:before{content:"\f747"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dharmachakra:before{content:"\f655"}.fa-dhl:before{content:"\f790"}.fa-diagnoses:before{content:"\f470"}.fa-diaspora:before{content:"\f791"}.fa-dice:before{content:"\f522"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-digital-tachograph:before{content:"\f566"}.fa-directions:before{content:"\f5eb"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-disease:before{content:"\f7fa"}.fa-divide:before{content:"\f529"}.fa-dizzy:before{content:"\f567"}.fa-dna:before{content:"\f471"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dog:before{content:"\f6d3"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-flatbed:before{content:"\f474"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-drafting-compass:before{content:"\f568"}.fa-dragon:before{content:"\f6d5"}.fa-draw-polygon:before{content:"\f5ee"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before{content:"\f16b"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-drupal:before{content:"\f1a9"}.fa-dumbbell:before{content:"\f44b"}.fa-dumpster:before{content:"\f793"}.fa-dumpster-fire:before{content:"\f794"}.fa-dungeon:before{content:"\f6d9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-edge:before{content:"\f282"}.fa-edit:before{content:"\f044"}.fa-egg:before{content:"\f7fb"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-ethernet:before{content:"\f796"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-evernote:before{content:"\f839"}.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-alt:before{content:"\f424"}.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-fan:before{content:"\f863"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-faucet:before{content:"\f905"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before{content:"\f56b"}.fa-fedex:before{content:"\f797"}.fa-fedora:before{content:"\f798"}.fa-female:before{content:"\f182"}.fa-fighter-jet:before{content:"\f0fb"}.fa-figma:before{content:"\f799"}.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-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-download:before{content:"\f56d"}.fa-file-excel:before{content:"\f1c3"}.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.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-prescription:before{content:"\f572"}.fa-file-signature:before{content:"\f573"}.fa-file-upload:before{content:"\f574"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-alt:before{content:"\f7e4"}.fa-fire-extinguisher:before{content:"\f134"}.fa-firefox:before{content:"\f269"}.fa-firefox-browser:before{content:"\f907"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-fish:before{content:"\f578"}.fa-fist-raised:before{content:"\f6de"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flask:before{content:"\f0c3"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-flushed:before{content:"\f579"}.fa-fly:before{content:"\f417"}.fa-folder:before{content:"\f07b"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.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-font-awesome-logo-full:before{content:"\f4e6"}.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-frog:before{content:"\f52e"}.fa-frown:before{content:"\f119"}.fa-frown-open:before{content:"\f57a"}.fa-fulcrum:before{content:"\f50b"}.fa-funnel-dollar:before{content:"\f662"}.fa-futbol:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-gamepad:before{content:"\f11b"}.fa-gas-pump:before{content:"\f52f"}.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-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-gifts:before{content:"\f79c"}.fa-git:before{content:"\f1d3"}.fa-git-alt:before{content:"\f841"}.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-cheers:before{content:"\f79f"}.fa-glass-martini:before{content:"\f000"}.fa-glass-martini-alt:before{content:"\f57b"}.fa-glass-whiskey:before{content:"\f7a0"}.fa-glasses:before{content:"\f530"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-globe-africa:before{content:"\f57c"}.fa-globe-americas:before{content:"\f57d"}.fa-globe-asia:before{content:"\f57e"}.fa-globe-europe:before{content:"\f7a2"}.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-gopuram:before{content:"\f664"}.fa-graduation-cap:before{content:"\f19d"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-grimace:before{content:"\f57f"}.fa-grin:before{content:"\f580"}.fa-grin-alt:before{content:"\f581"}.fa-grin-beam:before{content:"\f582"}.fa-grin-beam-sweat:before{content:"\f583"}.fa-grin-hearts:before{content:"\f584"}.fa-grin-squint:before{content:"\f585"}.fa-grin-squint-tears:before{content:"\f586"}.fa-grin-stars:before{content:"\f587"}.fa-grin-tears:before{content:"\f588"}.fa-grin-tongue:before{content:"\f589"}.fa-grin-tongue-squint:before{content:"\f58a"}.fa-grin-tongue-wink:before{content:"\f58b"}.fa-grin-wink:before{content:"\f58c"}.fa-grip-horizontal:before{content:"\f58d"}.fa-grip-lines:before{content:"\f7a4"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-grip-vertical:before{content:"\f58e"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-guitar:before{content:"\f7a6"}.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-hackerrank:before{content:"\f5f7"}.fa-hamburger:before{content:"\f805"}.fa-hammer:before{content:"\f6e3"}.fa-hamsa:before{content:"\f665"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-medical:before{content:"\f95c"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-holding-water:before{content:"\f4c1"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-middle-finger:before{content:"\f806"}.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-sparkles:before{content:"\f95d"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-helping:before{content:"\f4c4"}.fa-hands-wash:before{content:"\f95e"}.fa-handshake:before{content:"\f2b5"}.fa-handshake-alt-slash:before{content:"\f95f"}.fa-handshake-slash:before{content:"\f960"}.fa-hanukiah:before{content:"\f6e6"}.fa-hard-hat:before{content:"\f807"}.fa-hashtag:before{content:"\f292"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-hat-wizard:before{content:"\f6e8"}.fa-hdd:before{content:"\f0a0"}.fa-head-side-cough:before{content:"\f961"}.fa-head-side-cough-slash:before{content:"\f962"}.fa-head-side-mask:before{content:"\f963"}.fa-head-side-virus:before{content:"\f964"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heart-broken:before{content:"\f7a9"}.fa-heartbeat:before{content:"\f21e"}.fa-helicopter:before{content:"\f533"}.fa-highlighter:before{content:"\f591"}.fa-hiking:before{content:"\f6ec"}.fa-hippo:before{content:"\f6ed"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hockey-puck:before{content:"\f453"}.fa-holly-berry:before{content:"\f7aa"}.fa-home:before{content:"\f015"}.fa-hooli:before{content:"\f427"}.fa-hornbill:before{content:"\f592"}.fa-horse:before{content:"\f6f0"}.fa-horse-head:before{content:"\f7ab"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hospital-user:before{content:"\f80d"}.fa-hot-tub:before{content:"\f593"}.fa-hotdog:before{content:"\f80f"}.fa-hotel:before{content:"\f594"}.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-house-damage:before{content:"\f6f1"}.fa-house-user:before{content:"\f965"}.fa-houzz:before{content:"\f27c"}.fa-hryvnia:before{content:"\f6f2"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-i-cursor:before{content:"\f246"}.fa-ice-cream:before{content:"\f810"}.fa-icicles:before{content:"\f7ad"}.fa-icons:before{content:"\f86d"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-ideal:before{content:"\f913"}.fa-igloo:before{content:"\f7ae"}.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-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-instagram:before{content:"\f16d"}.fa-instagram-square:before{content:"\f955"}.fa-intercom:before{content:"\f7af"}.fa-internet-explorer:before{content:"\f26b"}.fa-invision:before{content:"\f7b0"}.fa-ioxhost:before{content:"\f208"}.fa-italic:before{content:"\f033"}.fa-itch-io:before{content:"\f83a"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jedi:before{content:"\f669"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-jira:before{content:"\f7b1"}.fa-joget:before{content:"\f3b7"}.fa-joint:before{content:"\f595"}.fa-joomla:before{content:"\f1aa"}.fa-journal-whills:before{content:"\f66a"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-kaaba:before{content:"\f66b"}.fa-kaggle:before{content:"\f5fa"}.fa-key:before{content:"\f084"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-khanda:before{content:"\f66d"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kiss:before{content:"\f596"}.fa-kiss-beam:before{content:"\f597"}.fa-kiss-wink-heart:before{content:"\f598"}.fa-kiwi-bird:before{content:"\f535"}.fa-korvue:before{content:"\f42f"}.fa-landmark:before{content:"\f66f"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laptop-house:before{content:"\f966"}.fa-laptop-medical:before{content:"\f812"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-laugh:before{content:"\f599"}.fa-laugh-beam:before{content:"\f59a"}.fa-laugh-squint:before{content:"\f59b"}.fa-laugh-wink:before{content:"\f59c"}.fa-layer-group:before{content:"\f5fd"}.fa-leaf:before{content:"\f06c"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.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-luggage-cart:before{content:"\f59d"}.fa-lungs:before{content:"\f604"}.fa-lungs-virus:before{content:"\f967"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-mail-bulk:before{content:"\f674"}.fa-mailchimp:before{content:"\f59e"}.fa-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-map:before{content:"\f279"}.fa-map-marked:before{content:"\f59f"}.fa-map-marked-alt:before{content:"\f5a0"}.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-markdown:before{content:"\f60f"}.fa-marker:before{content:"\f5a1"}.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-mask:before{content:"\f6fa"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-mdb:before{content:"\f8ca"}.fa-medal:before{content:"\f5a2"}.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-megaport:before{content:"\f5a3"}.fa-meh:before{content:"\f11a"}.fa-meh-blank:before{content:"\f5a4"}.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-memory:before{content:"\f538"}.fa-mendeley:before{content:"\f7b3"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-meteor:before{content:"\f753"}.fa-microblog:before{content:"\f91a"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microscope:before{content:"\f610"}.fa-microsoft:before{content:"\f3ca"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-square:before{content:"\f146"}.fa-mitten:before{content:"\f7b5"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mixer:before{content:"\f956"}.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:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-motorcycle:before{content:"\f21c"}.fa-mountain:before{content:"\f6fc"}.fa-mouse:before{content:"\f8cc"}.fa-mouse-pointer:before{content:"\f245"}.fa-mug-hot:before{content:"\f7b6"}.fa-music:before{content:"\f001"}.fa-napster:before{content:"\f3d2"}.fa-neos:before{content:"\f612"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nimblr:before{content:"\f5a8"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.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-oil-can:before{content:"\f613"}.fa-old-republic:before{content:"\f510"}.fa-om:before{content:"\f679"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-orcid:before{content:"\f8d2"}.fa-osi:before{content:"\f41a"}.fa-otter:before{content:"\f700"}.fa-outdent:before{content:"\f03b"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-pager:before{content:"\f815"}.fa-paint-brush:before{content:"\f1fc"}.fa-paint-roller:before{content:"\f5aa"}.fa-palette:before{content:"\f53f"}.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-parking:before{content:"\f540"}.fa-passport:before{content:"\f5ab"}.fa-pastafarianism:before{content:"\f67b"}.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-peace:before{content:"\f67c"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-square:before{content:"\f14b"}.fa-pencil-alt:before{content:"\f303"}.fa-pencil-ruler:before{content:"\f5ae"}.fa-penny-arcade:before{content:"\f704"}.fa-people-arrows:before{content:"\f968"}.fa-people-carry:before{content:"\f4ce"}.fa-pepper-hot:before{content:"\f816"}.fa-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-person-booth:before{content:"\f756"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before{content:"\f095"}.fa-phone-alt:before{content:"\f879"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-square-alt:before{content:"\f87b"}.fa-phone-volume:before{content:"\f2a0"}.fa-photo-video:before{content:"\f87c"}.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-pied-piper-square:before{content:"\f91e"}.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-pizza-slice:before{content:"\f818"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-departure:before{content:"\f5b0"}.fa-plane-slash:before{content:"\f969"}.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-poll:before{content:"\f681"}.fa-poll-h:before{content:"\f682"}.fa-poo:before{content:"\f2fe"}.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-pray:before{content:"\f683"}.fa-praying-hands:before{content:"\f684"}.fa-prescription:before{content:"\f5b1"}.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-project-diagram:before{content:"\f542"}.fa-pump-medical:before{content:"\f96a"}.fa-pump-soap:before{content:"\f96b"}.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-quran:before{content:"\f687"}.fa-r-project:before{content:"\f4f7"}.fa-radiation:before{content:"\f7b9"}.fa-radiation-alt:before{content:"\f7ba"}.fa-rainbow:before{content:"\f75b"}.fa-random:before{content:"\f074"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-record-vinyl:before{content:"\f8d9"}.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-redhat:before{content:"\f7bc"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-registered:before{content:"\f25d"}.fa-remove-format:before{content:"\f87d"}.fa-renren:before{content:"\f18b"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-republican:before{content:"\f75e"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-restroom:before{content:"\f7bd"}.fa-retweet:before{content:"\f079"}.fa-rev:before{content:"\f5b2"}.fa-ribbon:before{content:"\f4d6"}.fa-ring:before{content:"\f70b"}.fa-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-route:before{content:"\f4d7"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-vertical:before{content:"\f548"}.fa-running:before{content:"\f70c"}.fa-rupee-sign:before{content:"\f156"}.fa-sad-cry:before{content:"\f5b3"}.fa-sad-tear:before{content:"\f5b4"}.fa-safari:before{content:"\f267"}.fa-salesforce:before{content:"\f83b"}.fa-sass:before{content:"\f41e"}.fa-satellite:before{content:"\f7bf"}.fa-satellite-dish:before{content:"\f7c0"}.fa-save:before{content:"\f0c7"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before{content:"\f28a"}.fa-scroll:before{content:"\f70e"}.fa-sd-card:before{content:"\f7c2"}.fa-search:before{content:"\f002"}.fa-search-dollar:before{content:"\f688"}.fa-search-location:before{content:"\f689"}.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-shapes:before{content:"\f61f"}.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-shield-virus:before{content:"\f96c"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopify:before{content:"\f957"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shopware:before{content:"\f5b5"}.fa-shower:before{content:"\f2cc"}.fa-shuttle-van:before{content:"\f5b6"}.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-signature:before{content:"\f5b7"}.fa-sim-card:before{content:"\f7c4"}.fa-simplybuilt:before{content:"\f215"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skating:before{content:"\f7c5"}.fa-sketch:before{content:"\f7c6"}.fa-skiing:before{content:"\f7c9"}.fa-skiing-nordic:before{content:"\f7ca"}.fa-skull:before{content:"\f54c"}.fa-skull-crossbones:before{content:"\f714"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-slash:before{content:"\f715"}.fa-sleigh:before{content:"\f7cc"}.fa-sliders-h:before{content:"\f1de"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smile-beam:before{content:"\f5b8"}.fa-smile-wink:before{content:"\f4da"}.fa-smog:before{content:"\f75f"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-sms:before{content:"\f7cd"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snowboarding:before{content:"\f7ce"}.fa-snowflake:before{content:"\f2dc"}.fa-snowman:before{content:"\f7d0"}.fa-snowplow:before{content:"\f7d2"}.fa-soap:before{content:"\f96e"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-down-alt:before{content:"\f884"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-amount-up-alt:before{content:"\f885"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-sourcetree:before{content:"\f7d3"}.fa-spa:before{content:"\f5bb"}.fa-space-shuttle:before{content:"\f197"}.fa-speakap:before{content:"\f3f3"}.fa-speaker-deck:before{content:"\f83c"}.fa-spell-check:before{content:"\f891"}.fa-spider:before{content:"\f717"}.fa-spinner:before{content:"\f110"}.fa-splotch:before{content:"\f5bc"}.fa-spotify:before{content:"\f1bc"}.fa-spray-can:before{content:"\f5bd"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-square-root-alt:before{content:"\f698"}.fa-squarespace:before{content:"\f5be"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stackpath:before{content:"\f842"}.fa-stamp:before{content:"\f5bf"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.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-stopwatch-20:before{content:"\f96f"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-store-alt-slash:before{content:"\f970"}.fa-store-slash:before{content:"\f971"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.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-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-surprise:before{content:"\f5c2"}.fa-suse:before{content:"\f7d6"}.fa-swatchbook:before{content:"\f5c3"}.fa-swift:before{content:"\f8e1"}.fa-swimmer:before{content:"\f5c4"}.fa-swimming-pool:before{content:"\f5c5"}.fa-symfony:before{content:"\f83d"}.fa-synagogue:before{content:"\f69b"}.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-teamspeak:before{content:"\f4f9"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-low:before{content:"\f76b"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-tenge:before{content:"\f7d7"}.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-the-red-yeti:before{content:"\f69d"}.fa-theater-masks:before{content:"\f630"}.fa-themeco:before{content:"\f5c6"}.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-think-peaks:before{content:"\f731"}.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-tint-slash:before{content:"\f5c7"}.fa-tired:before{content:"\f5c8"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet:before{content:"\f7d8"}.fa-toilet-paper:before{content:"\f71e"}.fa-toilet-paper-slash:before{content:"\f972"}.fa-toolbox:before{content:"\f552"}.fa-tools:before{content:"\f7d9"}.fa-tooth:before{content:"\f5c9"}.fa-torah:before{content:"\f6a0"}.fa-torii-gate:before{content:"\f6a1"}.fa-tractor:before{content:"\f722"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before{content:"\f25c"}.fa-traffic-light:before{content:"\f637"}.fa-trailer:before{content:"\f941"}.fa-train:before{content:"\f238"}.fa-tram:before{content:"\f7da"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-trash-restore:before{content:"\f829"}.fa-trash-restore-alt:before{content:"\f82a"}.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-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-tshirt:before{content:"\f553"}.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-ubuntu:before{content:"\f7df"}.fa-uikit:before{content:"\f403"}.fa-umbraco:before{content:"\f8e8"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-uniregistry:before{content:"\f404"}.fa-unity:before{content:"\f949"}.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-ups:before{content:"\f7e0"}.fa-usb:before{content:"\f287"}.fa-user:before{content:"\f007"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-injured:before{content:"\f728"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before{content:"\f0f0"}.fa-user-minus:before{content:"\f503"}.fa-user-ninja:before{content:"\f504"}.fa-user-nurse:before{content:"\f82f"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-users-cog:before{content:"\f509"}.fa-usps:before{content:"\f7e1"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-vaadin:before{content:"\f408"}.fa-vector-square:before{content:"\f5cb"}.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-vihara:before{content:"\f6a7"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-virus:before{content:"\f974"}.fa-virus-slash:before{content:"\f975"}.fa-viruses:before{content:"\f976"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-voicemail:before{content:"\f897"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume-down:before{content:"\f027"}.fa-volume-mute:before{content:"\f6a9"}.fa-volume-off:before{content:"\f026"}.fa-volume-up:before{content:"\f028"}.fa-vote-yea:before{content:"\f772"}.fa-vr-cardboard:before{content:"\f729"}.fa-vuejs:before{content:"\f41f"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-warehouse:before{content:"\f494"}.fa-water:before{content:"\f773"}.fa-wave-square:before{content:"\f83e"}.fa-waze:before{content:"\f83f"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weight-hanging:before{content:"\f5cd"}.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-wind:before{content:"\f72e"}.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-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before{content:"\f5ce"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wolf-pack-battalion:before{content:"\f514"}.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-wpressr:before{content:"\f3e4"}.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-yammer:before{content:"\f840"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yarn:before{content:"\f7e3"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"}.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;font-display:block;src:url(../fonts/fa-brands-400.c1868c95.eot);src:url(../fonts/fa-brands-400.c1868c95.eot?#iefix) format("embedded-opentype"),url(../fonts/fa-brands-400.a06da7f0.woff2) format("woff2"),url(../fonts/fa-brands-400.ec3cfdde.woff) format("woff"),url(../fonts/fa-brands-400.13685372.ttf) format("truetype"),url(../img/fa-brands-400.0cb5a5c0.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;font-display:block;src:url(../fonts/fa-regular-400.261d666b.eot);src:url(../fonts/fa-regular-400.261d666b.eot?#iefix) format("embedded-opentype"),url(../fonts/fa-regular-400.c20b5b73.woff2) format("woff2"),url(../fonts/fa-regular-400.f89ea91e.woff) format("woff"),url(../fonts/fa-regular-400.db78b935.ttf) format("truetype"),url(../img/fa-regular-400.89ffa3ab.svg#fontawesome) format("svg")}.fab,.far{font-weight:400}@font-face{font-family:Font Awesome\ 5 Free;font-style:normal;font-weight:900;font-display:block;src:url(../fonts/fa-solid-900.a0369ea5.eot);src:url(../fonts/fa-solid-900.a0369ea5.eot?#iefix) format("embedded-opentype"),url(../fonts/fa-solid-900.b15db15f.woff2) format("woff2"),url(../fonts/fa-solid-900.bea989e8.woff) format("woff"),url(../fonts/fa-solid-900.1ab236ed.ttf) format("truetype"),url(../img/fa-solid-900.ec763292.svg#fontawesome) format("svg")}.fa,.far,.fas{font-family:Font Awesome\ 5 Free}.fa,.fas{font-weight:900} - -/*! - * jQuery UI CSS Framework 1.12.1 - * http://jqueryui.com - * - * Copyright jQuery Foundation and other contributors - * Released under the MIT license. - * http://jquery.org/license - * - * http://api.jqueryui.com/category/theming/ - */ - -/*! - * jQuery UI Draggable 1.12.1 - * http://jqueryui.com - * - * Copyright jQuery Foundation and other contributors - * Released under the MIT license. - * http://jquery.org/license - */ - -/*! - * jQuery UI Resizable 1.12.1 - * http://jqueryui.com - * - * Copyright jQuery Foundation and other contributors - * Released under the MIT license. - * http://jquery.org/license - */ - -/*! - * jQuery UI Button 1.12.1 - * http://jqueryui.com - * - * Copyright jQuery Foundation and other contributors - * Released under the MIT license. - * http://jquery.org/license - * - * http://api.jqueryui.com/button/#theming - */ - -/*! - * jQuery UI Checkboxradio 1.12.1 - * http://jqueryui.com - * - * Copyright jQuery Foundation and other contributors - * Released under the MIT license. - * http://jquery.org/license - * - * http://api.jqueryui.com/checkboxradio/#theming - */ - -/*! - * jQuery UI Controlgroup 1.12.1 - * http://jqueryui.com - * - * Copyright jQuery Foundation and other contributors - * Released under the MIT license. - * http://jquery.org/license - * - * http://api.jqueryui.com/controlgroup/#theming - */ - - -/*! - * jQuery UI Dialog 1.12.1 - * http://jqueryui.com - * - * Copyright jQuery Foundation and other contributors - * Released under the MIT license. - * http://jquery.org/license - * - * http://api.jqueryui.com/dialog/#theming - */ - -/*! - * jQuery UI Sortable 1.12.1 - * http://jqueryui.com - * - * Copyright jQuery Foundation and other contributors - * Released under the MIT license. - * http://jquery.org/license - */ - -/*! - * jQuery UI Datepicker 1.12.1 - * http://jqueryui.com - * - * Copyright jQuery Foundation and other contributors - * Released under the MIT license. - * http://jquery.org/license - * - * http://api.jqueryui.com/datepicker/#theming - */ - -/*! - * jQuery UI Autocomplete 1.12.1 - * http://jqueryui.com - * - * Copyright jQuery Foundation and other contributors - * Released under the MIT license. - * http://jquery.org/license - * - * http://api.jqueryui.com/autocomplete/#theming - */ - -/*! - * jQuery UI Menu 1.12.1 - * http://jqueryui.com - * - * Copyright jQuery Foundation and other contributors - * Released under the MIT license. - * http://jquery.org/license - * - * http://api.jqueryui.com/menu/#theming - */ - -/*! jQuery UI - v1.12.0 - 2016-07-08 -* http://jqueryui.com -* Includes: core.css, accordion.css, autocomplete.css, menu.css, button.css, controlgroup.css, checkboxradio.css, datepicker.css, dialog.css, draggable.css, resizable.css, progressbar.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css -* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Lucida%20Grande%2CLucida%20Sans%2CArial%2Csans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=6px&bgColorHeader=deedf7&bgTextureHeader=highlight_soft&bgImgOpacityHeader=100&borderColorHeader=aed0ea&fcHeader=222222&iconColorHeader=72a7cf&bgColorContent=f2f5f7&bgTextureContent=highlight_hard&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=362b36&iconColorContent=72a7cf&bgColorDefault=d7ebf9&bgTextureDefault=glass&bgImgOpacityDefault=80&borderColorDefault=aed0ea&fcDefault=2779aa&iconColorDefault=3d80b3&bgColorHover=e4f1fb&bgTextureHover=glass&bgImgOpacityHover=100&borderColorHover=74b2e2&fcHover=0070a3&iconColorHover=2694e8&bgColorActive=3baae3&bgTextureActive=glass&bgImgOpacityActive=50&borderColorActive=2694e8&fcActive=ffffff&iconColorActive=ffffff&bgColorHighlight=ffef8f&bgTextureHighlight=highlight_soft&bgImgOpacityHighlight=25&borderColorHighlight=f9dd34&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=cd0a0a&bgTextureError=flat&bgImgOpacityError=15&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffffff&bgColorOverlay=eeeeee&bgTextureOverlay=diagonals_thick&bgImgOpacityOverlay=90&opacityOverlay=80&bgColorShadow=000000&bgTextureShadow=highlight_hard&bgImgOpacityShadow=70&opacityShadow=30&thicknessShadow=7px&offsetTopShadow=-7px&offsetLeftShadow=-7px&cornerRadiusShadow=8px -* Copyright jQuery Foundation and other contributors; Licensed MIT */.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:after,.ui-helper-clearfix:before{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important;pointer-events:none}.ui-icon{display:inline-block;vertical-align:middle;margin-top:-.25em;position:relative;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-icon-block{left:50%;margin-left:-8px;display:block}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin:2px 0 0 0;padding:.5em .5em .5em .7em;font-size:100%}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:0}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{margin:0;cursor:pointer;list-style-image:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")}.ui-menu .ui-menu-item-wrapper{position:relative;padding:3px 1em 3px .4em}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-active,.ui-menu .ui-state-focus{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item-wrapper{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}.ui-button{padding:.4em 1em;display:inline-block;position:relative;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:visible}.ui-button,.ui-button:active,.ui-button:hover,.ui-button:link,.ui-button:visited{text-decoration:none}.ui-button-icon-only{width:2em;-webkit-box-sizing:border-box;box-sizing:border-box;text-indent:-9999px;white-space:nowrap}input.ui-button.ui-button-icon-only{text-indent:0}.ui-button-icon-only .ui-icon{position:absolute;top:50%;left:50%;margin-top:-8px;margin-left:-8px}.ui-button.ui-icon-notext .ui-icon{padding:0;width:2.1em;height:2.1em;text-indent:-9999px;white-space:nowrap}input.ui-button.ui-icon-notext .ui-icon{width:auto;height:auto;text-indent:0;white-space:normal;padding:.4em 1em}button.ui-button::-moz-focus-inner,input.ui-button::-moz-focus-inner{border:0;padding:0}.ui-controlgroup{vertical-align:middle;display:inline-block}.ui-controlgroup>.ui-controlgroup-item{float:left;margin-left:0;margin-right:0}.ui-controlgroup>.ui-controlgroup-item.ui-visual-focus,.ui-controlgroup>.ui-controlgroup-item:focus{z-index:9999}.ui-controlgroup-vertical>.ui-controlgroup-item{display:block;float:none;width:100%;margin-top:0;margin-bottom:0;text-align:left}.ui-controlgroup-vertical .ui-controlgroup-item{-webkit-box-sizing:border-box;box-sizing:border-box}.ui-controlgroup .ui-controlgroup-label{padding:.4em 1em}.ui-controlgroup .ui-controlgroup-label span{font-size:80%}.ui-controlgroup-horizontal .ui-controlgroup-label+.ui-controlgroup-item{border-left:none}.ui-controlgroup-vertical .ui-controlgroup-label+.ui-controlgroup-item{border-top:none}.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content{border-right:none}.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content{border-bottom:none}.ui-controlgroup-vertical .ui-spinner-input{width:75%;width:calc(100% - 2.4em)}.ui-controlgroup-vertical .ui-spinner .ui-spinner-up{border-top-style:solid}.ui-checkboxradio-label .ui-icon-background{-webkit-box-shadow:inset 1px 1px 1px #ccc;box-shadow:inset 1px 1px 1px #ccc;border-radius:.12em;border:none}.ui-checkboxradio-radio-label .ui-icon-background{width:16px;height:16px;border-radius:1em;overflow:visible;border:none}.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon,.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon{background-image:none;width:8px;height:8px;border-width:4px;border-style:solid}.ui-checkboxradio-disabled{pointer-events:none}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-next,.ui-datepicker .ui-datepicker-prev{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-next-hover,.ui-datepicker .ui-datepicker-prev-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-next span,.ui-datepicker .ui-datepicker-prev span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:45%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:700;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td a,.ui-datepicker td span{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-datepicker .ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat;left:.5em;top:.3em}.ui-dialog{position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:20px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-n{height:2px;top:0}.ui-dialog .ui-resizable-e{width:2px;right:0}.ui-dialog .ui-resizable-s{height:2px;bottom:0}.ui-dialog .ui-resizable-w{width:2px;left:0}.ui-dialog .ui-resizable-ne,.ui-dialog .ui-resizable-nw,.ui-dialog .ui-resizable-se,.ui-dialog .ui-resizable-sw{width:7px;height:7px}.ui-dialog .ui-resizable-se{right:0;bottom:0}.ui-dialog .ui-resizable-sw{left:0;bottom:0}.ui-dialog .ui-resizable-ne{right:0;top:0}.ui-dialog .ui-resizable-nw{left:0;top:0}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-draggable-handle{-ms-touch-action:none;touch-action:none}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:.1px;display:block;-ms-touch-action:none;touch-action:none}.ui-resizable-autohide .ui-resizable-handle,.ui-resizable-disabled .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");height:100%;filter:alpha(opacity=25);opacity:.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-selectable{-ms-touch-action:none;touch-action:none}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted #000}.ui-selectmenu-menu{padding:0;margin:0;position:absolute;top:0;left:0;display:none}.ui-selectmenu-menu .ui-menu{overflow:auto;overflow-x:hidden;padding-bottom:1px}.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup{font-size:1em;font-weight:700;line-height:1.5;padding:2px .4em;margin:.5em 0 0 0;height:auto;border:0}.ui-selectmenu-open{display:block}.ui-selectmenu-text{display:block;margin-right:20px;overflow:hidden;text-overflow:ellipsis}.ui-selectmenu-button.ui-button{text-align:left;white-space:nowrap;width:14em}.ui-selectmenu-icon.ui-icon{float:right;margin-top:0}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default;-ms-touch-action:none;touch-action:none}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{-webkit-filter:inherit;filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-sortable-handle{-ms-touch-action:none;touch-action:none}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:none;background:none;color:inherit;padding:.222em 0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:2em}.ui-spinner-button{width:1.6em;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top-style:none;border-bottom-style:none;border-right-style:none}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px}body .ui-tooltip{border-width:2px}.ui-widget{font-family:Lucida Grande,Lucida Sans,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget button,.ui-widget input,.ui-widget select,.ui-widget textarea{font-family:Lucida Grande,Lucida Sans,Arial,sans-serif;font-size:1em}.ui-widget.ui-widget-content{border:1px solid #aed0ea}.ui-widget-content{border:1px solid #ddd;background:#f2f5f7 url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAABkEAIAAACY3hF0AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0T///////8JWPfcAAAAB3RJTUUH4AcIFAkwQTDFlAAAAIpJREFUKM/tz6ENwkAUgOE/DYYJUA0KZkFUIetxqKJZgQUYguJBIQDVAQhhAESTtnf33r0mMAGakKA+/RHPZv01AYA/n2jxSMKeExXqLO9n6CI+rUYusbANkmptE8JKl/GIP8gjZviBzPWGy0OlBd0uZDqkG/u7lMlrzZaSdupTGdE0zoXw7eZP8Qbj00P2LE1L9gAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxNi0wNy0wOFQyMDowOTo0OCswMjowMDFydjoAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTYtMDctMDhUMjA6MDk6NDgrMDI6MDBAL86GAAAAAElFTkSuQmCC) 50% top repeat-x;color:#362b36}.ui-widget-content a{color:#362b36}.ui-widget-header{border:1px solid #aed0ea;background:#deedf7 url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAABkEAIAAACY3hF0AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0T///////8JWPfcAAAAB3RJTUUH4AcIFAkwQTDFlAAAAMFJREFUKM/lkD1qwgAYQB8fuHQpgpBO7eDgUByFdO0RuiX0Dj1DzqD0BmZyd9RFTKd2Kc2UQEUL5qdtSJOYCJ+Dh1Do9JYHDx7ZrFrsXwQA/g0CEipRG5cPwdYxvqjFGJ/vVTnYG6R1MW1C0nZhNq6ooQ4e8fVfr+kTdfLnOmF7kbfqiWihT8z5KrJVfcsmzh52kei7PjIVNXDwjsqMz/XPTfUrmDriTfQKh6WodazfMeSV8D7tVpcEQZKU5akvnTkO8y9eZNHr5WMAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTYtMDctMDhUMjA6MDk6NDgrMDI6MDAxcnY6AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE2LTA3LTA4VDIwOjA5OjQ4KzAyOjAwQC/OhgAAAABJRU5ErkJggg==) 50% 50% repeat-x;color:#222;font-weight:700}.ui-widget-header a{color:#222}.ui-button,.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default,html .ui-button.ui-state-disabled:active,html .ui-button.ui-state-disabled:hover{border:1px solid #aed0ea;background:#d7ebf9 url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAGQEAIAAACwqkHPAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0T///////8JWPfcAAAAB3RJTUUH4AcIFAkwQTDFlAAAAJhJREFUSMftzyEOggAYBeD33mZz02pwYxo1GDQT5BBsJr0RBzA4TkAyOzwBBTcx6BwGHEESSPAUTsOfvvzhHr38dy4AAAzDMIxvgzQtirrGyX9Om644QoCpuOQOM2RO2Wu2uMTltcmkkAld6cgrPDHmDZ4UMoGLfF4NWgePfXVuV9KGERbimAEmwgFrDEUHfXT+Im0YhvFDPkIzLk7A/EzKAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE2LTA3LTA4VDIwOjA5OjQ4KzAyOjAwMXJ2OgAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNi0wNy0wOFQyMDowOTo0OCswMjowMEAvzoYAAAAASUVORK5CYII=) 50% 50% repeat-x;font-weight:700;color:#2779aa}.ui-button,.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited,a.ui-button,a:link.ui-button,a:visited.ui-button{color:#2779aa;text-decoration:none}.ui-button:focus,.ui-button:hover,.ui-state-focus,.ui-state-hover,.ui-widget-content .ui-state-focus,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-focus,.ui-widget-header .ui-state-hover{border:1px solid #74b2e2;background:#e4f1fb url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAGQEAIAAACwqkHPAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0T///////8JWPfcAAAAB3RJTUUH4AcIFAkwQTDFlAAAAJxJREFUSMftz60KwmAYhuHnedEkiFGwujC2uGTRYjAurAp6Ip6BmCyLO4gVk8XgYTiTf3yD/cD2gcFjEA1vutoNN16Hamf3AgCAoiiK8m2QZcY0Da5h7rY9YYENxsIBt3CFHmL4wjVTBLjNi1n7wP1Ydq2D57Q826VwxRQBjNQTe0K+qC+2EnqM6X9ijjBhhKFghD46fzGtKIryQ95Jgy/jpWK+ggAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxNi0wNy0wOFQyMDowOTo0OCswMjowMDFydjoAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTYtMDctMDhUMjA6MDk6NDgrMDI6MDBAL86GAAAAAElFTkSuQmCC) 50% 50% repeat-x;font-weight:700;color:#0070a3}.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited,.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,a.ui-button:focus,a.ui-button:hover{color:#0070a3;text-decoration:none}.ui-visual-focus{-webkit-box-shadow:0 0 3px 1px #5e9ed6;box-shadow:0 0 3px 1px #5e9ed6}.ui-button.ui-state-active:hover,.ui-button:active,.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active,a.ui-button:active{border:1px solid #2694e8;background:#3baae3 url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAGQEAIAAACwqkHPAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0T///////8JWPfcAAAAB3RJTUUH4AcIFAkwQTDFlAAAAI5JREFUSMdjSJq6e/fLJiYGBgYGBoZRapQapUapUYrm1M1l79//SmRi7GZczWjBxFLJ2MRQz8Ryh2kNYx8Tix3TdYbZTKwsTLqM2yHUDibWdOYIhqNMbOlM4YzH0ORYFjIxMaxkYrVjus44m6G4/7DE6/dMTIGMjIyhTIzJDNoMfIPD06PUKDVKjVIDRwEAMuIhVFSEkAcAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTYtMDctMDhUMjA6MDk6NDgrMDI6MDAxcnY6AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE2LTA3LTA4VDIwOjA5OjQ4KzAyOjAwQC/OhgAAAABJRU5ErkJggg==) 50% 50% repeat-x;font-weight:700;color:#fff}.ui-icon-background,.ui-state-active .ui-icon-background{border:#2694e8;background-color:#fff}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#fff;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #f9dd34;background:#ffef8f url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAABkEAIAAACY3hF0AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0T///////8JWPfcAAAAB3RJTUUH4AcIFAkwQTDFlAAAAHNJREFUKM/lkM0Jg2AQBYdXyJc+tI/EJnKyEFvwbkuBCHoQ9CDiMfA8rCGCBSSQ0zD72B8WeynquwDgj/CiEzC5FDBSfswDNwG9s0AuoAtrnQIXAS1JwPNdTALv2cM69+3DBq4HG+OIWOvZlYCV5vtf+mlsEsU1wS9R7TYAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTYtMDctMDhUMjA6MDk6NDgrMDI6MDAxcnY6AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE2LTA3LTA4VDIwOjA5OjQ4KzAyOjAwQC/OhgAAAABJRU5ErkJggg==) 50% top repeat-x;color:#363636}.ui-state-checked{border:1px solid #f9dd34;background:#ffef8f}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#cd0a0a;color:#fff}.ui-state-error-text,.ui-state-error a,.ui-widget-content .ui-state-error-text,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error-text,.ui-widget-header .ui-state-error a{color:#fff}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:700}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:400}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon,.ui-widget-header .ui-icon{background-image:url(../img/ui-icons_72a7cf_256x240.55a4c5ce.png)}.ui-button .ui-icon{background-image:url(../img/ui-icons_3d80b3_256x240.24fcd129.png)}.ui-button:focus .ui-icon,.ui-button:hover .ui-icon,.ui-state-default .ui-icon,.ui-state-focus .ui-icon,.ui-state-hover .ui-icon{background-image:url(../img/ui-icons_2694e8_256x240.274157b3.png)}.ui-button:active .ui-icon,.ui-state-active .ui-icon{background-image:url(../img/ui-icons_ffffff_256x240.bb2a88be.png)}.ui-button .ui-state-highlight.ui-icon,.ui-state-highlight .ui-icon{background-image:url(../img/ui-icons_2e83ff_256x240.602e5d4d.png)}.ui-state-error-text .ui-icon,.ui-state-error .ui-icon{background-image:url(../img/ui-icons_ffffff_256x240.bb2a88be.png)}.ui-icon-blank{background-position:16px 16px}.ui-icon-caret-1-n{background-position:0 0}.ui-icon-caret-1-ne{background-position:-16px 0}.ui-icon-caret-1-e{background-position:-32px 0}.ui-icon-caret-1-se{background-position:-48px 0}.ui-icon-caret-1-s{background-position:-65px 0}.ui-icon-caret-1-sw{background-position:-80px 0}.ui-icon-caret-1-w{background-position:-96px 0}.ui-icon-caret-1-nw{background-position:-112px 0}.ui-icon-caret-2-n-s{background-position:-128px 0}.ui-icon-caret-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-65px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-65px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:1px -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-first,.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-left,.ui-corner-tl,.ui-corner-top{border-top-left-radius:6px}.ui-corner-all,.ui-corner-right,.ui-corner-top,.ui-corner-tr{border-top-right-radius:6px}.ui-corner-all,.ui-corner-bl,.ui-corner-bottom,.ui-corner-left{border-bottom-left-radius:6px}.ui-corner-all,.ui-corner-bottom,.ui-corner-br,.ui-corner-right{border-bottom-right-radius:6px}.ui-widget-overlay{background:#eee url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoEAAAAAD5BTvyAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0T//xSrMc0AAAAHdElNRQfgBwgUCTBBMMWUAAAAhElEQVRIx+3VMQrAIAyF4Wcmz+Y5e4Yey7E4dhGxIqWQf+iQN4ePgJKXrkM9rWhJPrXJ+5yx3AAproMcJxnLSalWkpseheFaMZZbNvRzD5DgJpDhBkhxHeQ4yVhOMpbbfGwfl09juc2G3lNhLLeAxCEzlotO8XPRKdEp0Snf5qJTftgpN3jsoxwYW8JUAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE2LTA3LTA4VDIwOjA5OjQ4KzAyOjAwMXJ2OgAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNi0wNy0wOFQyMDowOTo0OCswMjowMEAvzoYAAAAASUVORK5CYII=) 50% 50% repeat;opacity:.8;filter:Alpha(Opacity=80)}.ui-widget-shadow{-webkit-box-shadow:-7px -7px 7px #000;box-shadow:-7px -7px 7px #000} \ No newline at end of file diff --git a/sapl/static/sapl/frontend/css/chunk-vendors.42151acc.css.gz b/sapl/static/sapl/frontend/css/chunk-vendors.42151acc.css.gz deleted file mode 100644 index f850f722a..000000000 Binary files a/sapl/static/sapl/frontend/css/chunk-vendors.42151acc.css.gz and /dev/null differ diff --git a/sapl/static/sapl/frontend/css/chunk-vendors.e8d8c6de.css b/sapl/static/sapl/frontend/css/chunk-vendors.e8d8c6de.css new file mode 100644 index 000000000..b586be240 --- /dev/null +++ b/sapl/static/sapl/frontend/css/chunk-vendors.e8d8c6de.css @@ -0,0 +1,126 @@ +/*! + * Font Awesome Free 5.15.1 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + */.fa,.fab,.fad,.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:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes fa-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";transform:scaleX(-1)}.fa-flip-vertical{transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical,.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{transform:scale(-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.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-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.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-air-freshener:before{content:"\f5d0"}.fa-airbnb:before{content:"\f834"}.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-alipay:before{content:"\f642"}.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-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.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-alt:before{content:"\f5d1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.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-artstation:before{content:"\f77a"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-atlas:before{content:"\f558"}.fa-atlassian:before{content:"\f77b"}.fa-atom:before{content:"\f5d2"}.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-award:before{content:"\f559"}.fa-aws:before{content:"\f375"}.fa-baby:before{content:"\f77c"}.fa-baby-carriage:before{content:"\f77d"}.fa-backspace:before{content:"\f55a"}.fa-backward:before{content:"\f04a"}.fa-bacon:before{content:"\f7e5"}.fa-bacteria:before{content:"\e059"}.fa-bacterium:before{content:"\e05a"}.fa-bahai:before{content:"\f666"}.fa-balance-scale:before{content:"\f24e"}.fa-balance-scale-left:before{content:"\f515"}.fa-balance-scale-right:before{content:"\f516"}.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-battle-net:before{content:"\f835"}.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-bezier-curve:before{content:"\f55b"}.fa-bible:before{content:"\f647"}.fa-bicycle:before{content:"\f206"}.fa-biking:before{content:"\f84a"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-biohazard:before{content:"\f780"}.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-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blind:before{content:"\f29d"}.fa-blog:before{content:"\f781"}.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-bone:before{content:"\f5d7"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-book-dead:before{content:"\f6b7"}.fa-book-medical:before{content:"\f7e6"}.fa-book-open:before{content:"\f518"}.fa-book-reader:before{content:"\f5da"}.fa-bookmark:before{content:"\f02e"}.fa-bootstrap:before{content:"\f836"}.fa-border-all:before{content:"\f84c"}.fa-border-none:before{content:"\f850"}.fa-border-style:before{content:"\f853"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-box-open:before{content:"\f49e"}.fa-box-tissue:before{content:"\e05b"}.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-bread-slice:before{content:"\f7ec"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-brush:before{content:"\f55d"}.fa-btc:before{content:"\f15a"}.fa-buffer:before{content:"\f837"}.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-bus-alt:before{content:"\f55e"}.fa-business-time:before{content:"\f64a"}.fa-buy-n-large:before{content:"\f8a6"}.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-day:before{content:"\f783"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-times:before{content:"\f273"}.fa-calendar-week:before{content:"\f784"}.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-campground:before{content:"\f6bb"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-candy-cane:before{content:"\f786"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-car-alt:before{content:"\f5de"}.fa-car-battery:before{content:"\f5df"}.fa-car-crash:before{content:"\f5e1"}.fa-car-side:before{content:"\f5e4"}.fa-caravan:before{content:"\f8ff"}.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-carrot:before{content:"\f787"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cash-register:before{content:"\f788"}.fa-cat:before{content:"\f6be"}.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-centos:before{content:"\f789"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-charging-station:before{content:"\f5e7"}.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-double:before{content:"\f560"}.fa-check-square:before{content:"\f14a"}.fa-cheese:before{content:"\f7ef"}.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-chromecast:before{content:"\f838"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-city:before{content:"\f64f"}.fa-clinic-medical:before{content:"\f7f2"}.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-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-cloudflare:before{content:"\e07d"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-cocktail:before{content:"\f561"}.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-coins:before{content:"\f51e"}.fa-columns:before{content:"\f0db"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-medical:before{content:"\f7f5"}.fa-comment-slash:before{content:"\f4b3"}.fa-comments:before{content:"\f086"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compress:before{content:"\f066"}.fa-compress-alt:before{content:"\f422"}.fa-compress-arrows-alt:before{content:"\f78c"}.fa-concierge-bell:before{content:"\f562"}.fa-confluence:before{content:"\f78d"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-cotton-bureau:before{content:"\f89e"}.fa-couch:before{content:"\f4b8"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-credit-card:before{content:"\f09d"}.fa-critical-role:before{content:"\f6c9"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-crutch:before{content:"\f7f7"}.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-d-and-d-beyond:before{content:"\f6ca"}.fa-dailymotion:before{content:"\e052"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-deezer:before{content:"\e077"}.fa-delicious:before{content:"\f1a5"}.fa-democrat:before{content:"\f747"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dharmachakra:before{content:"\f655"}.fa-dhl:before{content:"\f790"}.fa-diagnoses:before{content:"\f470"}.fa-diaspora:before{content:"\f791"}.fa-dice:before{content:"\f522"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-digital-tachograph:before{content:"\f566"}.fa-directions:before{content:"\f5eb"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-disease:before{content:"\f7fa"}.fa-divide:before{content:"\f529"}.fa-dizzy:before{content:"\f567"}.fa-dna:before{content:"\f471"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dog:before{content:"\f6d3"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-flatbed:before{content:"\f474"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-drafting-compass:before{content:"\f568"}.fa-dragon:before{content:"\f6d5"}.fa-draw-polygon:before{content:"\f5ee"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before{content:"\f16b"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-drupal:before{content:"\f1a9"}.fa-dumbbell:before{content:"\f44b"}.fa-dumpster:before{content:"\f793"}.fa-dumpster-fire:before{content:"\f794"}.fa-dungeon:before{content:"\f6d9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-edge:before{content:"\f282"}.fa-edge-legacy:before{content:"\e078"}.fa-edit:before{content:"\f044"}.fa-egg:before{content:"\f7fb"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-ethernet:before{content:"\f796"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-evernote:before{content:"\f839"}.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-alt:before{content:"\f424"}.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-fan:before{content:"\f863"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-faucet:before{content:"\e005"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before{content:"\f56b"}.fa-fedex:before{content:"\f797"}.fa-fedora:before{content:"\f798"}.fa-female:before{content:"\f182"}.fa-fighter-jet:before{content:"\f0fb"}.fa-figma:before{content:"\f799"}.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-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-download:before{content:"\f56d"}.fa-file-excel:before{content:"\f1c3"}.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.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-prescription:before{content:"\f572"}.fa-file-signature:before{content:"\f573"}.fa-file-upload:before{content:"\f574"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-alt:before{content:"\f7e4"}.fa-fire-extinguisher:before{content:"\f134"}.fa-firefox:before{content:"\f269"}.fa-firefox-browser:before{content:"\e007"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-fish:before{content:"\f578"}.fa-fist-raised:before{content:"\f6de"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flask:before{content:"\f0c3"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-flushed:before{content:"\f579"}.fa-fly:before{content:"\f417"}.fa-folder:before{content:"\f07b"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.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-font-awesome-logo-full:before{content:"\f4e6"}.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-frog:before{content:"\f52e"}.fa-frown:before{content:"\f119"}.fa-frown-open:before{content:"\f57a"}.fa-fulcrum:before{content:"\f50b"}.fa-funnel-dollar:before{content:"\f662"}.fa-futbol:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-gamepad:before{content:"\f11b"}.fa-gas-pump:before{content:"\f52f"}.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-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-gifts:before{content:"\f79c"}.fa-git:before{content:"\f1d3"}.fa-git-alt:before{content:"\f841"}.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-cheers:before{content:"\f79f"}.fa-glass-martini:before{content:"\f000"}.fa-glass-martini-alt:before{content:"\f57b"}.fa-glass-whiskey:before{content:"\f7a0"}.fa-glasses:before{content:"\f530"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-globe-africa:before{content:"\f57c"}.fa-globe-americas:before{content:"\f57d"}.fa-globe-asia:before{content:"\f57e"}.fa-globe-europe:before{content:"\f7a2"}.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-pay:before{content:"\e079"}.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-gopuram:before{content:"\f664"}.fa-graduation-cap:before{content:"\f19d"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-grimace:before{content:"\f57f"}.fa-grin:before{content:"\f580"}.fa-grin-alt:before{content:"\f581"}.fa-grin-beam:before{content:"\f582"}.fa-grin-beam-sweat:before{content:"\f583"}.fa-grin-hearts:before{content:"\f584"}.fa-grin-squint:before{content:"\f585"}.fa-grin-squint-tears:before{content:"\f586"}.fa-grin-stars:before{content:"\f587"}.fa-grin-tears:before{content:"\f588"}.fa-grin-tongue:before{content:"\f589"}.fa-grin-tongue-squint:before{content:"\f58a"}.fa-grin-tongue-wink:before{content:"\f58b"}.fa-grin-wink:before{content:"\f58c"}.fa-grip-horizontal:before{content:"\f58d"}.fa-grip-lines:before{content:"\f7a4"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-grip-vertical:before{content:"\f58e"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-guilded:before{content:"\e07e"}.fa-guitar:before{content:"\f7a6"}.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-hackerrank:before{content:"\f5f7"}.fa-hamburger:before{content:"\f805"}.fa-hammer:before{content:"\f6e3"}.fa-hamsa:before{content:"\f665"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-medical:before{content:"\e05c"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-holding-water:before{content:"\f4c1"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-middle-finger:before{content:"\f806"}.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-sparkles:before{content:"\e05d"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-helping:before{content:"\f4c4"}.fa-hands-wash:before{content:"\e05e"}.fa-handshake:before{content:"\f2b5"}.fa-handshake-alt-slash:before{content:"\e05f"}.fa-handshake-slash:before{content:"\e060"}.fa-hanukiah:before{content:"\f6e6"}.fa-hard-hat:before{content:"\f807"}.fa-hashtag:before{content:"\f292"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-hat-wizard:before{content:"\f6e8"}.fa-hdd:before{content:"\f0a0"}.fa-head-side-cough:before{content:"\e061"}.fa-head-side-cough-slash:before{content:"\e062"}.fa-head-side-mask:before{content:"\e063"}.fa-head-side-virus:before{content:"\e064"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heart-broken:before{content:"\f7a9"}.fa-heartbeat:before{content:"\f21e"}.fa-helicopter:before{content:"\f533"}.fa-highlighter:before{content:"\f591"}.fa-hiking:before{content:"\f6ec"}.fa-hippo:before{content:"\f6ed"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hive:before{content:"\e07f"}.fa-hockey-puck:before{content:"\f453"}.fa-holly-berry:before{content:"\f7aa"}.fa-home:before{content:"\f015"}.fa-hooli:before{content:"\f427"}.fa-hornbill:before{content:"\f592"}.fa-horse:before{content:"\f6f0"}.fa-horse-head:before{content:"\f7ab"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hospital-user:before{content:"\f80d"}.fa-hot-tub:before{content:"\f593"}.fa-hotdog:before{content:"\f80f"}.fa-hotel:before{content:"\f594"}.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-house-damage:before{content:"\f6f1"}.fa-house-user:before{content:"\e065"}.fa-houzz:before{content:"\f27c"}.fa-hryvnia:before{content:"\f6f2"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-i-cursor:before{content:"\f246"}.fa-ice-cream:before{content:"\f810"}.fa-icicles:before{content:"\f7ad"}.fa-icons:before{content:"\f86d"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-ideal:before{content:"\e013"}.fa-igloo:before{content:"\f7ae"}.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-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-innosoft:before{content:"\e080"}.fa-instagram:before{content:"\f16d"}.fa-instagram-square:before{content:"\e055"}.fa-instalod:before{content:"\e081"}.fa-intercom:before{content:"\f7af"}.fa-internet-explorer:before{content:"\f26b"}.fa-invision:before{content:"\f7b0"}.fa-ioxhost:before{content:"\f208"}.fa-italic:before{content:"\f033"}.fa-itch-io:before{content:"\f83a"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jedi:before{content:"\f669"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-jira:before{content:"\f7b1"}.fa-joget:before{content:"\f3b7"}.fa-joint:before{content:"\f595"}.fa-joomla:before{content:"\f1aa"}.fa-journal-whills:before{content:"\f66a"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-kaaba:before{content:"\f66b"}.fa-kaggle:before{content:"\f5fa"}.fa-key:before{content:"\f084"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-khanda:before{content:"\f66d"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kiss:before{content:"\f596"}.fa-kiss-beam:before{content:"\f597"}.fa-kiss-wink-heart:before{content:"\f598"}.fa-kiwi-bird:before{content:"\f535"}.fa-korvue:before{content:"\f42f"}.fa-landmark:before{content:"\f66f"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laptop-house:before{content:"\e066"}.fa-laptop-medical:before{content:"\f812"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-laugh:before{content:"\f599"}.fa-laugh-beam:before{content:"\f59a"}.fa-laugh-squint:before{content:"\f59b"}.fa-laugh-wink:before{content:"\f59c"}.fa-layer-group:before{content:"\f5fd"}.fa-leaf:before{content:"\f06c"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.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-luggage-cart:before{content:"\f59d"}.fa-lungs:before{content:"\f604"}.fa-lungs-virus:before{content:"\e067"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-mail-bulk:before{content:"\f674"}.fa-mailchimp:before{content:"\f59e"}.fa-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-map:before{content:"\f279"}.fa-map-marked:before{content:"\f59f"}.fa-map-marked-alt:before{content:"\f5a0"}.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-markdown:before{content:"\f60f"}.fa-marker:before{content:"\f5a1"}.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-mask:before{content:"\f6fa"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-mdb:before{content:"\f8ca"}.fa-medal:before{content:"\f5a2"}.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-megaport:before{content:"\f5a3"}.fa-meh:before{content:"\f11a"}.fa-meh-blank:before{content:"\f5a4"}.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-memory:before{content:"\f538"}.fa-mendeley:before{content:"\f7b3"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-meteor:before{content:"\f753"}.fa-microblog:before{content:"\e01a"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microscope:before{content:"\f610"}.fa-microsoft:before{content:"\f3ca"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-square:before{content:"\f146"}.fa-mitten:before{content:"\f7b5"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mixer:before{content:"\e056"}.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:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-motorcycle:before{content:"\f21c"}.fa-mountain:before{content:"\f6fc"}.fa-mouse:before{content:"\f8cc"}.fa-mouse-pointer:before{content:"\f245"}.fa-mug-hot:before{content:"\f7b6"}.fa-music:before{content:"\f001"}.fa-napster:before{content:"\f3d2"}.fa-neos:before{content:"\f612"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nimblr:before{content:"\f5a8"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.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-octopus-deploy:before{content:"\e082"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-oil-can:before{content:"\f613"}.fa-old-republic:before{content:"\f510"}.fa-om:before{content:"\f679"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-orcid:before{content:"\f8d2"}.fa-osi:before{content:"\f41a"}.fa-otter:before{content:"\f700"}.fa-outdent:before{content:"\f03b"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-pager:before{content:"\f815"}.fa-paint-brush:before{content:"\f1fc"}.fa-paint-roller:before{content:"\f5aa"}.fa-palette:before{content:"\f53f"}.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-parking:before{content:"\f540"}.fa-passport:before{content:"\f5ab"}.fa-pastafarianism:before{content:"\f67b"}.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-peace:before{content:"\f67c"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-square:before{content:"\f14b"}.fa-pencil-alt:before{content:"\f303"}.fa-pencil-ruler:before{content:"\f5ae"}.fa-penny-arcade:before{content:"\f704"}.fa-people-arrows:before{content:"\e068"}.fa-people-carry:before{content:"\f4ce"}.fa-pepper-hot:before{content:"\f816"}.fa-perbyte:before{content:"\e083"}.fa-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-person-booth:before{content:"\f756"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before{content:"\f095"}.fa-phone-alt:before{content:"\f879"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-square-alt:before{content:"\f87b"}.fa-phone-volume:before{content:"\f2a0"}.fa-photo-video:before{content:"\f87c"}.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-pied-piper-square:before{content:"\e01e"}.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-pizza-slice:before{content:"\f818"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-departure:before{content:"\f5b0"}.fa-plane-slash:before{content:"\e069"}.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-poll:before{content:"\f681"}.fa-poll-h:before{content:"\f682"}.fa-poo:before{content:"\f2fe"}.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-pray:before{content:"\f683"}.fa-praying-hands:before{content:"\f684"}.fa-prescription:before{content:"\f5b1"}.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-project-diagram:before{content:"\f542"}.fa-pump-medical:before{content:"\e06a"}.fa-pump-soap:before{content:"\e06b"}.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-quran:before{content:"\f687"}.fa-r-project:before{content:"\f4f7"}.fa-radiation:before{content:"\f7b9"}.fa-radiation-alt:before{content:"\f7ba"}.fa-rainbow:before{content:"\f75b"}.fa-random:before{content:"\f074"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-record-vinyl:before{content:"\f8d9"}.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-redhat:before{content:"\f7bc"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-registered:before{content:"\f25d"}.fa-remove-format:before{content:"\f87d"}.fa-renren:before{content:"\f18b"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-republican:before{content:"\f75e"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-restroom:before{content:"\f7bd"}.fa-retweet:before{content:"\f079"}.fa-rev:before{content:"\f5b2"}.fa-ribbon:before{content:"\f4d6"}.fa-ring:before{content:"\f70b"}.fa-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-route:before{content:"\f4d7"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-vertical:before{content:"\f548"}.fa-running:before{content:"\f70c"}.fa-rupee-sign:before{content:"\f156"}.fa-rust:before{content:"\e07a"}.fa-sad-cry:before{content:"\f5b3"}.fa-sad-tear:before{content:"\f5b4"}.fa-safari:before{content:"\f267"}.fa-salesforce:before{content:"\f83b"}.fa-sass:before{content:"\f41e"}.fa-satellite:before{content:"\f7bf"}.fa-satellite-dish:before{content:"\f7c0"}.fa-save:before{content:"\f0c7"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before{content:"\f28a"}.fa-scroll:before{content:"\f70e"}.fa-sd-card:before{content:"\f7c2"}.fa-search:before{content:"\f002"}.fa-search-dollar:before{content:"\f688"}.fa-search-location:before{content:"\f689"}.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-shapes:before{content:"\f61f"}.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-shield-virus:before{content:"\e06c"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopify:before{content:"\e057"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shopware:before{content:"\f5b5"}.fa-shower:before{content:"\f2cc"}.fa-shuttle-van:before{content:"\f5b6"}.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-signature:before{content:"\f5b7"}.fa-sim-card:before{content:"\f7c4"}.fa-simplybuilt:before{content:"\f215"}.fa-sink:before{content:"\e06d"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skating:before{content:"\f7c5"}.fa-sketch:before{content:"\f7c6"}.fa-skiing:before{content:"\f7c9"}.fa-skiing-nordic:before{content:"\f7ca"}.fa-skull:before{content:"\f54c"}.fa-skull-crossbones:before{content:"\f714"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-slash:before{content:"\f715"}.fa-sleigh:before{content:"\f7cc"}.fa-sliders-h:before{content:"\f1de"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smile-beam:before{content:"\f5b8"}.fa-smile-wink:before{content:"\f4da"}.fa-smog:before{content:"\f75f"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-sms:before{content:"\f7cd"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snowboarding:before{content:"\f7ce"}.fa-snowflake:before{content:"\f2dc"}.fa-snowman:before{content:"\f7d0"}.fa-snowplow:before{content:"\f7d2"}.fa-soap:before{content:"\e06e"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-down-alt:before{content:"\f884"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-amount-up-alt:before{content:"\f885"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-sourcetree:before{content:"\f7d3"}.fa-spa:before{content:"\f5bb"}.fa-space-shuttle:before{content:"\f197"}.fa-speakap:before{content:"\f3f3"}.fa-speaker-deck:before{content:"\f83c"}.fa-spell-check:before{content:"\f891"}.fa-spider:before{content:"\f717"}.fa-spinner:before{content:"\f110"}.fa-splotch:before{content:"\f5bc"}.fa-spotify:before{content:"\f1bc"}.fa-spray-can:before{content:"\f5bd"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-square-root-alt:before{content:"\f698"}.fa-squarespace:before{content:"\f5be"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stackpath:before{content:"\f842"}.fa-stamp:before{content:"\f5bf"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.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-stopwatch-20:before{content:"\e06f"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-store-alt-slash:before{content:"\e070"}.fa-store-slash:before{content:"\e071"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.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-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-surprise:before{content:"\f5c2"}.fa-suse:before{content:"\f7d6"}.fa-swatchbook:before{content:"\f5c3"}.fa-swift:before{content:"\f8e1"}.fa-swimmer:before{content:"\f5c4"}.fa-swimming-pool:before{content:"\f5c5"}.fa-symfony:before{content:"\f83d"}.fa-synagogue:before{content:"\f69b"}.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-teamspeak:before{content:"\f4f9"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-low:before{content:"\f76b"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-tenge:before{content:"\f7d7"}.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-the-red-yeti:before{content:"\f69d"}.fa-theater-masks:before{content:"\f630"}.fa-themeco:before{content:"\f5c6"}.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-think-peaks:before{content:"\f731"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-ticket-alt:before{content:"\f3ff"}.fa-tiktok:before{content:"\e07b"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-tint:before{content:"\f043"}.fa-tint-slash:before{content:"\f5c7"}.fa-tired:before{content:"\f5c8"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet:before{content:"\f7d8"}.fa-toilet-paper:before{content:"\f71e"}.fa-toilet-paper-slash:before{content:"\e072"}.fa-toolbox:before{content:"\f552"}.fa-tools:before{content:"\f7d9"}.fa-tooth:before{content:"\f5c9"}.fa-torah:before{content:"\f6a0"}.fa-torii-gate:before{content:"\f6a1"}.fa-tractor:before{content:"\f722"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before{content:"\f25c"}.fa-traffic-light:before{content:"\f637"}.fa-trailer:before{content:"\e041"}.fa-train:before{content:"\f238"}.fa-tram:before{content:"\f7da"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-trash-restore:before{content:"\f829"}.fa-trash-restore-alt:before{content:"\f82a"}.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-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-tshirt:before{content:"\f553"}.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-ubuntu:before{content:"\f7df"}.fa-uikit:before{content:"\f403"}.fa-umbraco:before{content:"\f8e8"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-uncharted:before{content:"\e084"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-uniregistry:before{content:"\f404"}.fa-unity:before{content:"\e049"}.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-unsplash:before{content:"\e07c"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-ups:before{content:"\f7e0"}.fa-usb:before{content:"\f287"}.fa-user:before{content:"\f007"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-injured:before{content:"\f728"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before{content:"\f0f0"}.fa-user-minus:before{content:"\f503"}.fa-user-ninja:before{content:"\f504"}.fa-user-nurse:before{content:"\f82f"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-users-cog:before{content:"\f509"}.fa-users-slash:before{content:"\e073"}.fa-usps:before{content:"\f7e1"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-vaadin:before{content:"\f408"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-vest:before{content:"\e085"}.fa-vest-patches:before{content:"\e086"}.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-vihara:before{content:"\f6a7"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-virus:before{content:"\e074"}.fa-virus-slash:before{content:"\e075"}.fa-viruses:before{content:"\e076"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-voicemail:before{content:"\f897"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume-down:before{content:"\f027"}.fa-volume-mute:before{content:"\f6a9"}.fa-volume-off:before{content:"\f026"}.fa-volume-up:before{content:"\f028"}.fa-vote-yea:before{content:"\f772"}.fa-vr-cardboard:before{content:"\f729"}.fa-vuejs:before{content:"\f41f"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-warehouse:before{content:"\f494"}.fa-watchman-monitoring:before{content:"\e087"}.fa-water:before{content:"\f773"}.fa-wave-square:before{content:"\f83e"}.fa-waze:before{content:"\f83f"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weight-hanging:before{content:"\f5cd"}.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-wind:before{content:"\f72e"}.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-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before{content:"\f5ce"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wodu:before{content:"\e088"}.fa-wolf-pack-battalion:before{content:"\f514"}.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-wpressr:before{content:"\f3e4"}.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-yammer:before{content:"\f840"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yarn:before{content:"\f7e3"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"}.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;font-display:block;src:url(../fonts/fa-brands-400.e2ca6541.eot);src:url(../fonts/fa-brands-400.e2ca6541.eot?#iefix) format("embedded-opentype"),url(../fonts/fa-brands-400.f075c50f.woff2) format("woff2"),url(../fonts/fa-brands-400.ad527cc5.woff) format("woff"),url(../fonts/fa-brands-400.8300bd7f.ttf) format("truetype"),url(../img/fa-brands-400.2f122423.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;font-display:block;src:url(../fonts/fa-regular-400.b01516c1.eot);src:url(../fonts/fa-regular-400.b01516c1.eot?#iefix) format("embedded-opentype"),url(../fonts/fa-regular-400.4a74738e.woff2) format("woff2"),url(../fonts/fa-regular-400.3c6879c4.woff) format("woff"),url(../fonts/fa-regular-400.49f00693.ttf) format("truetype"),url(../img/fa-regular-400.3602b7e8.svg#fontawesome) format("svg")}.fab,.far{font-weight:400}@font-face{font-family:Font Awesome\ 5 Free;font-style:normal;font-weight:900;font-display:block;src:url(../fonts/fa-solid-900.8ac31674.eot);src:url(../fonts/fa-solid-900.8ac31674.eot?#iefix) format("embedded-opentype"),url(../fonts/fa-solid-900.8e1ed89b.woff2) format("woff2"),url(../fonts/fa-solid-900.4451e1d8.woff) format("woff"),url(../fonts/fa-solid-900.205f07b3.ttf) format("truetype"),url(../img/fa-solid-900.664de393.svg#fontawesome) format("svg")}.fa,.far,.fas{font-family:Font Awesome\ 5 Free}.fa,.fas{font-weight:900} + +/*! + * jQuery UI CSS Framework 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/category/theming/ + */ + +/*! + * jQuery UI Draggable 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +/*! + * jQuery UI Resizable 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +/*! + * jQuery UI Button 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/button/#theming + */ + +/*! + * jQuery UI Checkboxradio 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/checkboxradio/#theming + */ + +/*! + * jQuery UI Controlgroup 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/controlgroup/#theming + */ + + +/*! + * jQuery UI Dialog 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/dialog/#theming + */ + +/*! + * jQuery UI Sortable 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +/*! + * jQuery UI Datepicker 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/datepicker/#theming + */ + +/*! + * jQuery UI Autocomplete 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/autocomplete/#theming + */ + +/*! + * jQuery UI Menu 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/menu/#theming + */ + +/*! jQuery UI - v1.12.0 - 2016-07-08 +* http://jqueryui.com +* Includes: core.css, accordion.css, autocomplete.css, menu.css, button.css, controlgroup.css, checkboxradio.css, datepicker.css, dialog.css, draggable.css, resizable.css, progressbar.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css +* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Lucida%20Grande%2CLucida%20Sans%2CArial%2Csans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=6px&bgColorHeader=deedf7&bgTextureHeader=highlight_soft&bgImgOpacityHeader=100&borderColorHeader=aed0ea&fcHeader=222222&iconColorHeader=72a7cf&bgColorContent=f2f5f7&bgTextureContent=highlight_hard&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=362b36&iconColorContent=72a7cf&bgColorDefault=d7ebf9&bgTextureDefault=glass&bgImgOpacityDefault=80&borderColorDefault=aed0ea&fcDefault=2779aa&iconColorDefault=3d80b3&bgColorHover=e4f1fb&bgTextureHover=glass&bgImgOpacityHover=100&borderColorHover=74b2e2&fcHover=0070a3&iconColorHover=2694e8&bgColorActive=3baae3&bgTextureActive=glass&bgImgOpacityActive=50&borderColorActive=2694e8&fcActive=ffffff&iconColorActive=ffffff&bgColorHighlight=ffef8f&bgTextureHighlight=highlight_soft&bgImgOpacityHighlight=25&borderColorHighlight=f9dd34&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=cd0a0a&bgTextureError=flat&bgImgOpacityError=15&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffffff&bgColorOverlay=eeeeee&bgTextureOverlay=diagonals_thick&bgImgOpacityOverlay=90&opacityOverlay=80&bgColorShadow=000000&bgTextureShadow=highlight_hard&bgImgOpacityShadow=70&opacityShadow=30&thicknessShadow=7px&offsetTopShadow=-7px&offsetLeftShadow=-7px&cornerRadiusShadow=8px +* Copyright jQuery Foundation and other contributors; Licensed MIT */.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:after,.ui-helper-clearfix:before{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important;pointer-events:none}.ui-icon{display:inline-block;vertical-align:middle;margin-top:-.25em;position:relative;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-icon-block{left:50%;margin-left:-8px;display:block}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin:2px 0 0 0;padding:.5em .5em .5em .7em;font-size:100%}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:0}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{margin:0;cursor:pointer;list-style-image:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")}.ui-menu .ui-menu-item-wrapper{position:relative;padding:3px 1em 3px .4em}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-active,.ui-menu .ui-state-focus{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item-wrapper{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}.ui-button{padding:.4em 1em;display:inline-block;position:relative;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:visible}.ui-button,.ui-button:active,.ui-button:hover,.ui-button:link,.ui-button:visited{text-decoration:none}.ui-button-icon-only{width:2em;box-sizing:border-box;text-indent:-9999px;white-space:nowrap}input.ui-button.ui-button-icon-only{text-indent:0}.ui-button-icon-only .ui-icon{position:absolute;top:50%;left:50%;margin-top:-8px;margin-left:-8px}.ui-button.ui-icon-notext .ui-icon{padding:0;width:2.1em;height:2.1em;text-indent:-9999px;white-space:nowrap}input.ui-button.ui-icon-notext .ui-icon{width:auto;height:auto;text-indent:0;white-space:normal;padding:.4em 1em}button.ui-button::-moz-focus-inner,input.ui-button::-moz-focus-inner{border:0;padding:0}.ui-controlgroup{vertical-align:middle;display:inline-block}.ui-controlgroup>.ui-controlgroup-item{float:left;margin-left:0;margin-right:0}.ui-controlgroup>.ui-controlgroup-item.ui-visual-focus,.ui-controlgroup>.ui-controlgroup-item:focus{z-index:9999}.ui-controlgroup-vertical>.ui-controlgroup-item{display:block;float:none;width:100%;margin-top:0;margin-bottom:0;text-align:left}.ui-controlgroup-vertical .ui-controlgroup-item{box-sizing:border-box}.ui-controlgroup .ui-controlgroup-label{padding:.4em 1em}.ui-controlgroup .ui-controlgroup-label span{font-size:80%}.ui-controlgroup-horizontal .ui-controlgroup-label+.ui-controlgroup-item{border-left:none}.ui-controlgroup-vertical .ui-controlgroup-label+.ui-controlgroup-item{border-top:none}.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content{border-right:none}.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content{border-bottom:none}.ui-controlgroup-vertical .ui-spinner-input{width:75%;width:calc(100% - 2.4em)}.ui-controlgroup-vertical .ui-spinner .ui-spinner-up{border-top-style:solid}.ui-checkboxradio-label .ui-icon-background{box-shadow:inset 1px 1px 1px #ccc;border-radius:.12em;border:none}.ui-checkboxradio-radio-label .ui-icon-background{width:16px;height:16px;border-radius:1em;overflow:visible;border:none}.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon,.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon{background-image:none;width:8px;height:8px;border-width:4px;border-style:solid}.ui-checkboxradio-disabled{pointer-events:none}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-next,.ui-datepicker .ui-datepicker-prev{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-next-hover,.ui-datepicker .ui-datepicker-prev-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-next span,.ui-datepicker .ui-datepicker-prev span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:45%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:700;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td a,.ui-datepicker td span{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-datepicker .ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat;left:.5em;top:.3em}.ui-dialog{position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:20px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-n{height:2px;top:0}.ui-dialog .ui-resizable-e{width:2px;right:0}.ui-dialog .ui-resizable-s{height:2px;bottom:0}.ui-dialog .ui-resizable-w{width:2px;left:0}.ui-dialog .ui-resizable-ne,.ui-dialog .ui-resizable-nw,.ui-dialog .ui-resizable-se,.ui-dialog .ui-resizable-sw{width:7px;height:7px}.ui-dialog .ui-resizable-se{right:0;bottom:0}.ui-dialog .ui-resizable-sw{left:0;bottom:0}.ui-dialog .ui-resizable-ne{right:0;top:0}.ui-dialog .ui-resizable-nw{left:0;top:0}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-draggable-handle{touch-action:none}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:.1px;display:block;touch-action:none}.ui-resizable-autohide .ui-resizable-handle,.ui-resizable-disabled .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");height:100%;filter:alpha(opacity=25);opacity:.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-selectable{touch-action:none}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted #000}.ui-selectmenu-menu{padding:0;margin:0;position:absolute;top:0;left:0;display:none}.ui-selectmenu-menu .ui-menu{overflow:auto;overflow-x:hidden;padding-bottom:1px}.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup{font-size:1em;font-weight:700;line-height:1.5;padding:2px .4em;margin:.5em 0 0 0;height:auto;border:0}.ui-selectmenu-open{display:block}.ui-selectmenu-text{display:block;margin-right:20px;overflow:hidden;text-overflow:ellipsis}.ui-selectmenu-button.ui-button{text-align:left;white-space:nowrap;width:14em}.ui-selectmenu-icon.ui-icon{float:right;margin-top:0}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default;touch-action:none}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-sortable-handle{touch-action:none}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:none;background:none;color:inherit;padding:.222em 0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:2em}.ui-spinner-button{width:1.6em;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top-style:none;border-bottom-style:none;border-right-style:none}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px}body .ui-tooltip{border-width:2px}.ui-widget{font-family:Lucida Grande,Lucida Sans,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget button,.ui-widget input,.ui-widget select,.ui-widget textarea{font-family:Lucida Grande,Lucida Sans,Arial,sans-serif;font-size:1em}.ui-widget.ui-widget-content{border:1px solid #aed0ea}.ui-widget-content{border:1px solid #ddd;background:#f2f5f7 url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAABkEAIAAACY3hF0AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0T///////8JWPfcAAAAB3RJTUUH4AcIFAkwQTDFlAAAAIpJREFUKM/tz6ENwkAUgOE/DYYJUA0KZkFUIetxqKJZgQUYguJBIQDVAQhhAESTtnf33r0mMAGakKA+/RHPZv01AYA/n2jxSMKeExXqLO9n6CI+rUYusbANkmptE8JKl/GIP8gjZviBzPWGy0OlBd0uZDqkG/u7lMlrzZaSdupTGdE0zoXw7eZP8Qbj00P2LE1L9gAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxNi0wNy0wOFQyMDowOTo0OCswMjowMDFydjoAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTYtMDctMDhUMjA6MDk6NDgrMDI6MDBAL86GAAAAAElFTkSuQmCC) 50% top repeat-x;color:#362b36}.ui-widget-content a{color:#362b36}.ui-widget-header{border:1px solid #aed0ea;background:#deedf7 url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAABkEAIAAACY3hF0AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0T///////8JWPfcAAAAB3RJTUUH4AcIFAkwQTDFlAAAAMFJREFUKM/lkD1qwgAYQB8fuHQpgpBO7eDgUByFdO0RuiX0Dj1DzqD0BmZyd9RFTKd2Kc2UQEUL5qdtSJOYCJ+Dh1Do9JYHDx7ZrFrsXwQA/g0CEipRG5cPwdYxvqjFGJ/vVTnYG6R1MW1C0nZhNq6ooQ4e8fVfr+kTdfLnOmF7kbfqiWihT8z5KrJVfcsmzh52kei7PjIVNXDwjsqMz/XPTfUrmDriTfQKh6WodazfMeSV8D7tVpcEQZKU5akvnTkO8y9eZNHr5WMAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTYtMDctMDhUMjA6MDk6NDgrMDI6MDAxcnY6AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE2LTA3LTA4VDIwOjA5OjQ4KzAyOjAwQC/OhgAAAABJRU5ErkJggg==) 50% 50% repeat-x;color:#222;font-weight:700}.ui-widget-header a{color:#222}.ui-button,.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default,html .ui-button.ui-state-disabled:active,html .ui-button.ui-state-disabled:hover{border:1px solid #aed0ea;background:#d7ebf9 url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAGQEAIAAACwqkHPAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0T///////8JWPfcAAAAB3RJTUUH4AcIFAkwQTDFlAAAAJhJREFUSMftzyEOggAYBeD33mZz02pwYxo1GDQT5BBsJr0RBzA4TkAyOzwBBTcx6BwGHEESSPAUTsOfvvzhHr38dy4AAAzDMIxvgzQtirrGyX9Om644QoCpuOQOM2RO2Wu2uMTltcmkkAld6cgrPDHmDZ4UMoGLfF4NWgePfXVuV9KGERbimAEmwgFrDEUHfXT+Im0YhvFDPkIzLk7A/EzKAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE2LTA3LTA4VDIwOjA5OjQ4KzAyOjAwMXJ2OgAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNi0wNy0wOFQyMDowOTo0OCswMjowMEAvzoYAAAAASUVORK5CYII=) 50% 50% repeat-x;font-weight:700;color:#2779aa}.ui-button,.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited,a.ui-button,a:link.ui-button,a:visited.ui-button{color:#2779aa;text-decoration:none}.ui-button:focus,.ui-button:hover,.ui-state-focus,.ui-state-hover,.ui-widget-content .ui-state-focus,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-focus,.ui-widget-header .ui-state-hover{border:1px solid #74b2e2;background:#e4f1fb url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAGQEAIAAACwqkHPAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0T///////8JWPfcAAAAB3RJTUUH4AcIFAkwQTDFlAAAAJxJREFUSMftz60KwmAYhuHnedEkiFGwujC2uGTRYjAurAp6Ip6BmCyLO4gVk8XgYTiTf3yD/cD2gcFjEA1vutoNN16Hamf3AgCAoiiK8m2QZcY0Da5h7rY9YYENxsIBt3CFHmL4wjVTBLjNi1n7wP1Ydq2D57Q826VwxRQBjNQTe0K+qC+2EnqM6X9ijjBhhKFghD46fzGtKIryQ95Jgy/jpWK+ggAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxNi0wNy0wOFQyMDowOTo0OCswMjowMDFydjoAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTYtMDctMDhUMjA6MDk6NDgrMDI6MDBAL86GAAAAAElFTkSuQmCC) 50% 50% repeat-x;font-weight:700;color:#0070a3}.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited,.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,a.ui-button:focus,a.ui-button:hover{color:#0070a3;text-decoration:none}.ui-visual-focus{box-shadow:0 0 3px 1px #5e9ed6}.ui-button.ui-state-active:hover,.ui-button:active,.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active,a.ui-button:active{border:1px solid #2694e8;background:#3baae3 url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAGQEAIAAACwqkHPAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0T///////8JWPfcAAAAB3RJTUUH4AcIFAkwQTDFlAAAAI5JREFUSMdjSJq6e/fLJiYGBgYGBoZRapQapUapUYrm1M1l79//SmRi7GZczWjBxFLJ2MRQz8Ryh2kNYx8Tix3TdYbZTKwsTLqM2yHUDibWdOYIhqNMbOlM4YzH0ORYFjIxMaxkYrVjus44m6G4/7DE6/dMTIGMjIyhTIzJDNoMfIPD06PUKDVKjVIDRwEAMuIhVFSEkAcAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTYtMDctMDhUMjA6MDk6NDgrMDI6MDAxcnY6AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE2LTA3LTA4VDIwOjA5OjQ4KzAyOjAwQC/OhgAAAABJRU5ErkJggg==) 50% 50% repeat-x;font-weight:700;color:#fff}.ui-icon-background,.ui-state-active .ui-icon-background{border:#2694e8;background-color:#fff}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#fff;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #f9dd34;background:#ffef8f url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAABkEAIAAACY3hF0AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0T///////8JWPfcAAAAB3RJTUUH4AcIFAkwQTDFlAAAAHNJREFUKM/lkM0Jg2AQBYdXyJc+tI/EJnKyEFvwbkuBCHoQ9CDiMfA8rCGCBSSQ0zD72B8WeynquwDgj/CiEzC5FDBSfswDNwG9s0AuoAtrnQIXAS1JwPNdTALv2cM69+3DBq4HG+OIWOvZlYCV5vtf+mlsEsU1wS9R7TYAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTYtMDctMDhUMjA6MDk6NDgrMDI6MDAxcnY6AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE2LTA3LTA4VDIwOjA5OjQ4KzAyOjAwQC/OhgAAAABJRU5ErkJggg==) 50% top repeat-x;color:#363636}.ui-state-checked{border:1px solid #f9dd34;background:#ffef8f}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#cd0a0a;color:#fff}.ui-state-error-text,.ui-state-error a,.ui-widget-content .ui-state-error-text,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error-text,.ui-widget-header .ui-state-error a{color:#fff}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:700}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:400}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon,.ui-widget-header .ui-icon{background-image:url(../img/ui-icons_72a7cf_256x240.55a4c5ce.png)}.ui-button .ui-icon{background-image:url(../img/ui-icons_3d80b3_256x240.24fcd129.png)}.ui-button:focus .ui-icon,.ui-button:hover .ui-icon,.ui-state-default .ui-icon,.ui-state-focus .ui-icon,.ui-state-hover .ui-icon{background-image:url(../img/ui-icons_2694e8_256x240.274157b3.png)}.ui-button:active .ui-icon,.ui-state-active .ui-icon{background-image:url(../img/ui-icons_ffffff_256x240.bb2a88be.png)}.ui-button .ui-state-highlight.ui-icon,.ui-state-highlight .ui-icon{background-image:url(../img/ui-icons_2e83ff_256x240.602e5d4d.png)}.ui-state-error-text .ui-icon,.ui-state-error .ui-icon{background-image:url(../img/ui-icons_ffffff_256x240.bb2a88be.png)}.ui-icon-blank{background-position:16px 16px}.ui-icon-caret-1-n{background-position:0 0}.ui-icon-caret-1-ne{background-position:-16px 0}.ui-icon-caret-1-e{background-position:-32px 0}.ui-icon-caret-1-se{background-position:-48px 0}.ui-icon-caret-1-s{background-position:-65px 0}.ui-icon-caret-1-sw{background-position:-80px 0}.ui-icon-caret-1-w{background-position:-96px 0}.ui-icon-caret-1-nw{background-position:-112px 0}.ui-icon-caret-2-n-s{background-position:-128px 0}.ui-icon-caret-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-65px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-65px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:1px -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-first,.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-left,.ui-corner-tl,.ui-corner-top{border-top-left-radius:6px}.ui-corner-all,.ui-corner-right,.ui-corner-top,.ui-corner-tr{border-top-right-radius:6px}.ui-corner-all,.ui-corner-bl,.ui-corner-bottom,.ui-corner-left{border-bottom-left-radius:6px}.ui-corner-all,.ui-corner-bottom,.ui-corner-br,.ui-corner-right{border-bottom-right-radius:6px}.ui-widget-overlay{background:#eee url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoEAAAAAD5BTvyAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0T//xSrMc0AAAAHdElNRQfgBwgUCTBBMMWUAAAAhElEQVRIx+3VMQrAIAyF4Wcmz+Y5e4Yey7E4dhGxIqWQf+iQN4ePgJKXrkM9rWhJPrXJ+5yx3AAproMcJxnLSalWkpseheFaMZZbNvRzD5DgJpDhBkhxHeQ4yVhOMpbbfGwfl09juc2G3lNhLLeAxCEzlotO8XPRKdEp0Snf5qJTftgpN3jsoxwYW8JUAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE2LTA3LTA4VDIwOjA5OjQ4KzAyOjAwMXJ2OgAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNi0wNy0wOFQyMDowOTo0OCswMjowMEAvzoYAAAAASUVORK5CYII=) 50% 50% repeat;opacity:.8;filter:Alpha(Opacity=80)}.ui-widget-shadow{box-shadow:-7px -7px 7px #000}.tox{box-sizing:content-box;color:#222f3e;cursor:auto;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:16px;font-style:normal;font-weight:400;line-height:normal;-webkit-tap-highlight-color:transparent;text-decoration:none;text-shadow:none;text-transform:none;vertical-align:initial;white-space:normal}.tox :not(svg):not(rect){box-sizing:inherit;color:inherit;cursor:inherit;direction:inherit;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;line-height:inherit;-webkit-tap-highlight-color:inherit;text-align:inherit;text-decoration:inherit;text-shadow:inherit;text-transform:inherit;vertical-align:inherit;white-space:inherit;background:transparent;border:0;float:none;height:auto;margin:0;max-width:none;outline:0;padding:0;position:static;width:auto}.tox:not([dir=rtl]){direction:ltr;text-align:left}.tox[dir=rtl]{direction:rtl;text-align:right}.tox-tinymce{border:1px solid #ccc;border-radius:0;box-shadow:none;box-sizing:border-box;display:flex;flex-direction:column;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;overflow:hidden;position:relative;visibility:inherit!important}.tox-tinymce-inline{border:none;box-shadow:none}.tox-tinymce-inline .tox-editor-header{border:1px solid #ccc;border-radius:0;box-shadow:none}.tox-tinymce-aux{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;z-index:1300}.tox-tinymce-aux :focus,.tox-tinymce :focus{outline:none}button::-moz-focus-inner{border:0}.tox .accessibility-issue__header{align-items:center;display:flex;margin-bottom:4px}.tox .accessibility-issue__description{align-items:stretch;border:1px solid #ccc;border-radius:3px;display:flex;justify-content:space-between}.tox .accessibility-issue__description>div{padding-bottom:4px}.tox .accessibility-issue__description>div>div{align-items:center;display:flex;margin-bottom:4px}.tox .accessibility-issue__description>:last-child:not(:only-child){border-color:#ccc;border-style:solid}.tox .accessibility-issue__repair{margin-top:16px}.tox .tox-dialog__body-content .accessibility-issue--info .accessibility-issue__description{background-color:rgba(32,122,183,.1);border-color:rgba(32,122,183,.4);color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--info .accessibility-issue__description>:last-child{border-color:rgba(32,122,183,.4)}.tox .tox-dialog__body-content .accessibility-issue--info .tox-form__group h2{color:#207ab7}.tox .tox-dialog__body-content .accessibility-issue--info .tox-icon svg{fill:#207ab7}.tox .tox-dialog__body-content .accessibility-issue--info a .tox-icon{color:#207ab7}.tox .tox-dialog__body-content .accessibility-issue--warn .accessibility-issue__description{background-color:rgba(255,165,0,.1);border-color:rgba(255,165,0,.5);color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--warn .accessibility-issue__description>:last-child{border-color:rgba(255,165,0,.5)}.tox .tox-dialog__body-content .accessibility-issue--warn .tox-form__group h2{color:#cc8500}.tox .tox-dialog__body-content .accessibility-issue--warn .tox-icon svg{fill:#cc8500}.tox .tox-dialog__body-content .accessibility-issue--warn a .tox-icon{color:#cc8500}.tox .tox-dialog__body-content .accessibility-issue--error .accessibility-issue__description{background-color:rgba(204,0,0,.1);border-color:rgba(204,0,0,.4);color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--error .accessibility-issue__description>:last-child{border-color:rgba(204,0,0,.4)}.tox .tox-dialog__body-content .accessibility-issue--error .tox-form__group h2{color:#c00}.tox .tox-dialog__body-content .accessibility-issue--error .tox-icon svg{fill:#c00}.tox .tox-dialog__body-content .accessibility-issue--error a .tox-icon{color:#c00}.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description{background-color:rgba(120,171,70,.1);border-color:rgba(120,171,70,.4);color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description>:last-child{border-color:rgba(120,171,70,.4)}.tox .tox-dialog__body-content .accessibility-issue--success .tox-form__group h2{color:#78ab46}.tox .tox-dialog__body-content .accessibility-issue--success .tox-icon svg{fill:#78ab46}.tox .tox-dialog__body-content .accessibility-issue--success a .tox-icon{color:#78ab46}.tox .tox-dialog__body-content .accessibility-issue__header h1,.tox .tox-dialog__body-content .tox-form__group .accessibility-issue__description h2{margin-top:0}.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header .tox-button{margin-left:4px}.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header>:nth-last-child(2){margin-left:auto}.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__description{padding:4px 4px 4px 8px}.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__description>:last-child{border-left-width:1px;padding-left:4px}.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header .tox-button{margin-right:4px}.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header>:nth-last-child(2){margin-right:auto}.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__description{padding:4px 8px 4px 4px}.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__description>:last-child{border-right-width:1px;padding-right:4px}.tox .tox-anchorbar,.tox .tox-bar{display:flex;flex:0 0 auto}.tox .tox-button{background-position:0 0;background-repeat:repeat;border-radius:3px;border-style:solid;border-width:1px;box-sizing:border-box;color:#fff;cursor:pointer;display:inline-block;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:14px;font-style:normal;font-weight:700;letter-spacing:normal;line-height:24px;margin:0;outline:none;padding:4px 16px;text-align:center;text-decoration:none;text-transform:capitalize;white-space:nowrap}.tox .tox-button,.tox .tox-button[disabled]{background-color:#207ab7;background-image:none;border-color:#207ab7;box-shadow:none}.tox .tox-button[disabled]{color:hsla(0,0%,100%,.5);cursor:not-allowed}.tox .tox-button:focus:not(:disabled),.tox .tox-button:hover:not(:disabled){background-color:#1c6ca1;background-image:none;border-color:#1c6ca1;box-shadow:none;color:#fff}.tox .tox-button:active:not(:disabled){background-color:#185d8c;background-image:none;border-color:#185d8c;box-shadow:none;color:#fff}.tox .tox-button--secondary{background-position:0 0;background-repeat:repeat;border-radius:3px;border-style:solid;border-width:1px;color:#222f3e;font-size:14px;font-style:normal;font-weight:700;letter-spacing:normal;outline:none;padding:4px 16px;text-decoration:none;text-transform:capitalize}.tox .tox-button--secondary,.tox .tox-button--secondary[disabled]{background-color:#f0f0f0;background-image:none;border-color:#f0f0f0;box-shadow:none}.tox .tox-button--secondary[disabled]{color:rgba(34,47,62,.5)}.tox .tox-button--secondary:focus:not(:disabled),.tox .tox-button--secondary:hover:not(:disabled){background-color:#e3e3e3;background-image:none;border-color:#e3e3e3;box-shadow:none;color:#222f3e}.tox .tox-button--secondary:active:not(:disabled){background-color:#d6d6d6;background-image:none;border-color:#d6d6d6;box-shadow:none;color:#222f3e}.tox .tox-button--icon,.tox .tox-button.tox-button--icon,.tox .tox-button.tox-button--secondary.tox-button--icon{padding:4px}.tox .tox-button--icon .tox-icon svg,.tox .tox-button.tox-button--icon .tox-icon svg,.tox .tox-button.tox-button--secondary.tox-button--icon .tox-icon svg{display:block;fill:currentColor}.tox .tox-button-link{background:0;border:none;box-sizing:border-box;cursor:pointer;display:inline-block;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:16px;font-weight:400;line-height:1.3;margin:0;padding:0;white-space:nowrap}.tox .tox-button-link--sm{font-size:14px}.tox .tox-button--naked{background-color:transparent;border-color:transparent;box-shadow:unset;color:#222f3e}.tox .tox-button--naked[disabled]{background-color:#f0f0f0;border-color:#f0f0f0;box-shadow:none;color:rgba(34,47,62,.5)}.tox .tox-button--naked:focus:not(:disabled),.tox .tox-button--naked:hover:not(:disabled){background-color:#e3e3e3;border-color:#e3e3e3;box-shadow:none;color:#222f3e}.tox .tox-button--naked:active:not(:disabled){background-color:#d6d6d6;border-color:#d6d6d6;box-shadow:none;color:#222f3e}.tox .tox-button--naked .tox-icon svg{fill:currentColor}.tox .tox-button--naked.tox-button--icon:hover:not(:disabled){color:#222f3e}.tox .tox-checkbox{align-items:center;border-radius:3px;cursor:pointer;display:flex;height:36px;min-width:36px}.tox .tox-checkbox__input{height:1px;overflow:hidden;position:absolute;top:auto;width:1px}.tox .tox-checkbox__icons{align-items:center;border-radius:3px;box-shadow:0 0 0 2px transparent;box-sizing:content-box;display:flex;height:24px;justify-content:center;padding:3px;width:24px}.tox .tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display:block;fill:rgba(34,47,62,.3)}.tox .tox-checkbox__icons .tox-checkbox-icon__checked svg,.tox .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{display:none;fill:#207ab7}.tox .tox-checkbox--disabled{color:rgba(34,47,62,.5);cursor:not-allowed}.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__checked svg,.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg,.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__unchecked svg{fill:rgba(34,47,62,.5)}.tox input.tox-checkbox__input:checked+.tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display:none}.tox input.tox-checkbox__input:checked+.tox-checkbox__icons .tox-checkbox-icon__checked svg{display:block}.tox input.tox-checkbox__input:indeterminate+.tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display:none}.tox input.tox-checkbox__input:indeterminate+.tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{display:block}.tox input.tox-checkbox__input:focus+.tox-checkbox__icons{border-radius:3px;box-shadow:inset 0 0 0 1px #207ab7;padding:3px}.tox:not([dir=rtl]) .tox-checkbox__label{margin-left:4px}.tox:not([dir=rtl]) .tox-checkbox__input{left:-10000px}.tox:not([dir=rtl]) .tox-bar .tox-checkbox{margin-left:4px}.tox[dir=rtl] .tox-checkbox__label{margin-right:4px}.tox[dir=rtl] .tox-checkbox__input{right:-10000px}.tox[dir=rtl] .tox-bar .tox-checkbox{margin-right:4px}.tox .tox-collection--toolbar .tox-collection__group{display:flex;padding:0}.tox .tox-collection--grid .tox-collection__group{display:flex;flex-wrap:wrap;max-height:208px;overflow-x:hidden;overflow-y:auto;padding:0}.tox .tox-collection--list .tox-collection__group{border-bottom-width:0;border-color:#ccc;border-left-width:0;border-right-width:0;border-style:solid;border-top-width:1px;padding:4px 0}.tox .tox-collection--list .tox-collection__group:first-child{border-top-width:0}.tox .tox-collection__group-heading{background-color:#e6e6e6;color:rgba(34,47,62,.7);cursor:default;font-size:12px;font-style:normal;font-weight:400;margin-bottom:4px;margin-top:-4px;padding:4px 8px;text-transform:none}.tox .tox-collection__group-heading,.tox .tox-collection__item{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.tox .tox-collection__item{align-items:center;color:#222f3e;cursor:pointer;display:flex}.tox .tox-collection--list .tox-collection__item{padding:4px 8px}.tox .tox-collection--grid .tox-collection__item,.tox .tox-collection--toolbar .tox-collection__item{border-radius:3px;padding:4px}.tox .tox-collection--list .tox-collection__item--enabled{background-color:#fff;color:#222f3e}.tox .tox-collection--list .tox-collection__item--active{background-color:#dee0e2}.tox .tox-collection--toolbar .tox-collection__item--enabled{background-color:#c8cbcf;color:#222f3e}.tox .tox-collection--toolbar .tox-collection__item--active{background-color:#dee0e2}.tox .tox-collection--grid .tox-collection__item--enabled{background-color:#c8cbcf;color:#222f3e}.tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled){background-color:#dee0e2;color:#222f3e}.tox .tox-collection--list .tox-collection__item--active:not(.tox-collection__item--state-disabled),.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled){color:#222f3e}.tox .tox-collection__item--state-disabled{background-color:transparent;color:rgba(34,47,62,.5);cursor:not-allowed}.tox .tox-collection__item-checkmark,.tox .tox-collection__item-icon{align-items:center;display:flex;height:24px;justify-content:center;width:24px}.tox .tox-collection__item-checkmark svg,.tox .tox-collection__item-icon svg{fill:currentColor}.tox .tox-collection--toolbar-lg .tox-collection__item-icon{height:48px;width:48px}.tox .tox-collection__item-label{color:currentColor;flex:1;-ms-flex-preferred-size:auto;font-style:normal;font-weight:400;word-break:break-all}.tox .tox-collection__item-accessory,.tox .tox-collection__item-label{display:inline-block;font-size:14px;line-height:24px;text-transform:none}.tox .tox-collection__item-accessory{color:rgba(34,47,62,.7);height:24px}.tox .tox-collection__item-caret{align-items:center;display:flex;min-height:24px}.tox .tox-collection__item-caret:after{content:"";font-size:0;min-height:inherit}.tox .tox-collection__item-caret svg{fill:#222f3e}.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-accessory+.tox-collection__item-checkmark,.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-checkmark svg{display:none}.tox .tox-collection--horizontal{background-color:#fff;border:1px solid #ccc;border-radius:3px;box-shadow:0 1px 3px rgba(0,0,0,.15);display:flex;flex:0 0 auto;flex-shrink:0;flex-wrap:nowrap;margin-bottom:0;overflow-x:auto;padding:0}.tox .tox-collection--horizontal .tox-collection__group{align-items:center;display:flex;flex-wrap:nowrap;margin:0;padding:0 4px}.tox .tox-collection--horizontal .tox-collection__item{height:34px;margin:2px 0 3px 0;padding:0 4px}.tox .tox-collection--horizontal .tox-collection__item-label{white-space:nowrap}.tox .tox-collection--horizontal .tox-collection__item-caret{margin-left:4px}.tox .tox-collection__item-container{display:flex}.tox .tox-collection__item-container--row{align-items:center;flex:1 1 auto;flex-direction:row}.tox .tox-collection__item-container--row.tox-collection__item-container--align-left{margin-right:auto}.tox .tox-collection__item-container--row.tox-collection__item-container--align-right{justify-content:flex-end;margin-left:auto}.tox .tox-collection__item-container--row.tox-collection__item-container--valign-top{align-items:flex-start;margin-bottom:auto}.tox .tox-collection__item-container--row.tox-collection__item-container--valign-middle{align-items:center}.tox .tox-collection__item-container--row.tox-collection__item-container--valign-bottom{align-items:flex-end;margin-top:auto}.tox .tox-collection__item-container--column{-ms-grid-row-align:center;align-self:center;flex:1 1 auto;flex-direction:column}.tox .tox-collection__item-container--column.tox-collection__item-container--align-left{align-items:flex-start}.tox .tox-collection__item-container--column.tox-collection__item-container--align-right{align-items:flex-end}.tox .tox-collection__item-container--column.tox-collection__item-container--valign-top{align-self:flex-start}.tox .tox-collection__item-container--column.tox-collection__item-container--valign-middle{-ms-grid-row-align:center;align-self:center}.tox .tox-collection__item-container--column.tox-collection__item-container--valign-bottom{align-self:flex-end}.tox:not([dir=rtl]) .tox-collection--horizontal .tox-collection__group:not(:last-of-type){border-right:1px solid #ccc}.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item>:not(:first-child){margin-left:8px}.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item>.tox-collection__item-label:first-child{margin-left:4px}.tox:not([dir=rtl]) .tox-collection__item-accessory{margin-left:16px;text-align:right}.tox:not([dir=rtl]) .tox-collection .tox-collection__item-caret{margin-left:16px}.tox[dir=rtl] .tox-collection--horizontal .tox-collection__group:not(:last-of-type){border-left:1px solid #ccc}.tox[dir=rtl] .tox-collection--list .tox-collection__item>:not(:first-child){margin-right:8px}.tox[dir=rtl] .tox-collection--list .tox-collection__item>.tox-collection__item-label:first-child{margin-right:4px}.tox[dir=rtl] .tox-collection__item-icon-rtl .tox-collection__item-icon svg{transform:rotateY(180deg)}.tox[dir=rtl] .tox-collection__item-accessory{margin-right:16px;text-align:left}.tox[dir=rtl] .tox-collection .tox-collection__item-caret{margin-right:16px;transform:rotateY(180deg)}.tox[dir=rtl] .tox-collection--horizontal .tox-collection__item-caret{margin-right:4px}.tox .tox-color-picker-container{display:flex;flex-direction:row;height:225px;margin:0}.tox .tox-sv-palette{box-sizing:border-box;display:flex;height:100%}.tox .tox-sv-palette-spectrum{height:100%}.tox .tox-sv-palette,.tox .tox-sv-palette-spectrum{width:225px}.tox .tox-sv-palette-thumb{background:none;border:1px solid #000;border-radius:50%;box-sizing:content-box;height:12px;position:absolute;width:12px}.tox .tox-sv-palette-inner-thumb{border:1px solid #fff;border-radius:50%;height:10px;position:absolute;width:10px}.tox .tox-hue-slider{box-sizing:border-box;height:100%;width:25px}.tox .tox-hue-slider-spectrum{background:linear-gradient(180deg,red,#ff0080,#f0f,#8000ff,#00f,#0080ff,#0ff,#00ff80,#0f0,#80ff00,#ff0,#ff8000,red);height:100%;width:100%}.tox .tox-hue-slider,.tox .tox-hue-slider-spectrum{width:20px}.tox .tox-hue-slider-thumb{background:#fff;border:1px solid #000;box-sizing:content-box;height:4px;width:100%}.tox .tox-rgb-form{flex-direction:column}.tox .tox-rgb-form,.tox .tox-rgb-form div{display:flex;justify-content:space-between}.tox .tox-rgb-form div{align-items:center;margin-bottom:5px;width:inherit}.tox .tox-rgb-form input{width:6em}.tox .tox-rgb-form input.tox-invalid{border:1px solid red!important}.tox .tox-rgb-form .tox-rgba-preview{border:1px solid #000;flex-grow:2;margin-bottom:0}.tox:not([dir=rtl]) .tox-hue-slider,.tox:not([dir=rtl]) .tox-sv-palette{margin-right:15px}.tox:not([dir=rtl]) .tox-hue-slider-thumb{margin-left:-1px}.tox:not([dir=rtl]) .tox-rgb-form label{margin-right:.5em}.tox[dir=rtl] .tox-hue-slider,.tox[dir=rtl] .tox-sv-palette{margin-left:15px}.tox[dir=rtl] .tox-hue-slider-thumb{margin-right:-1px}.tox[dir=rtl] .tox-rgb-form label{margin-left:.5em}.tox .tox-toolbar .tox-swatches,.tox .tox-toolbar__overflow .tox-swatches,.tox .tox-toolbar__primary .tox-swatches{margin:2px 0 3px 4px}.tox .tox-collection--list .tox-collection__group .tox-swatches-menu{border:0;margin:-4px 0}.tox .tox-swatches__row{display:flex}.tox .tox-swatch{height:30px;transition:transform .15s,box-shadow .15s;width:30px}.tox .tox-swatch:focus,.tox .tox-swatch:hover{box-shadow:inset 0 0 0 1px hsla(0,0%,49.8%,.3);transform:scale(.8)}.tox .tox-swatch--remove{align-items:center;display:flex;justify-content:center}.tox .tox-swatch--remove svg path{stroke:#e74c3c}.tox .tox-swatches__picker-btn{align-items:center;background-color:transparent;border:0;cursor:pointer;display:flex;height:30px;justify-content:center;outline:none;padding:0;width:30px}.tox .tox-swatches__picker-btn svg{height:24px;width:24px}.tox .tox-swatches__picker-btn:hover{background:#dee0e2}.tox:not([dir=rtl]) .tox-swatches__picker-btn{margin-left:auto}.tox[dir=rtl] .tox-swatches__picker-btn{margin-right:auto}.tox .tox-comment-thread{background:#fff;position:relative}.tox .tox-comment-thread>:not(:first-child){margin-top:8px}.tox .tox-comment{background:#fff;border:1px solid #ccc;border-radius:3px;box-shadow:0 4px 8px 0 rgba(34,47,62,.1);padding:8px 8px 16px 8px;position:relative}.tox .tox-comment__header{align-items:center;color:#222f3e;display:flex;justify-content:space-between}.tox .tox-comment__date{color:rgba(34,47,62,.7);font-size:12px}.tox .tox-comment__body{color:#222f3e;font-size:14px;font-style:normal;font-weight:400;line-height:1.3;margin-top:8px;position:relative;text-transform:none}.tox .tox-comment__body textarea{resize:none;white-space:normal;width:100%}.tox .tox-comment__expander{padding-top:8px}.tox .tox-comment__expander p{color:rgba(34,47,62,.7);font-size:14px;font-style:normal}.tox .tox-comment__body p{margin:0}.tox .tox-comment__buttonspacing{padding-top:16px;text-align:center}.tox .tox-comment-thread__overlay:after{background:#fff;bottom:0;content:"";display:flex;left:0;opacity:.9;position:absolute;right:0;top:0;z-index:5}.tox .tox-comment__reply{display:flex;flex-shrink:0;flex-wrap:wrap;justify-content:flex-end;margin-top:8px}.tox .tox-comment__reply>:first-child{margin-bottom:8px;width:100%}.tox .tox-comment__edit{display:flex;flex-wrap:wrap;justify-content:flex-end;margin-top:16px}.tox .tox-comment__gradient:after{background:linear-gradient(hsla(0,0%,100%,0),#fff);bottom:0;content:"";display:block;height:5em;margin-top:-40px;position:absolute;width:100%}.tox .tox-comment__overlay{background:#fff;bottom:0;display:flex;flex-direction:column;flex-grow:1;left:0;opacity:.9;position:absolute;right:0;text-align:center;top:0;z-index:5}.tox .tox-comment__loading-text{align-items:center;color:#222f3e;display:flex;flex-direction:column;position:relative}.tox .tox-comment__loading-text>div{padding-bottom:16px}.tox .tox-comment__overlaytext{bottom:0;flex-direction:column;font-size:14px;left:0;padding:1em;position:absolute;right:0;top:0;z-index:10}.tox .tox-comment__overlaytext p{background-color:#fff;box-shadow:0 0 8px 8px #fff;color:#222f3e;text-align:center}.tox .tox-comment__overlaytext div:nth-of-type(2){font-size:.8em}.tox .tox-comment__busy-spinner{align-items:center;background-color:#fff;bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0;z-index:20}.tox .tox-comment__scroll{display:flex;flex-direction:column;flex-shrink:1;overflow:auto}.tox .tox-conversations{margin:8px}.tox:not([dir=rtl]) .tox-comment__buttonspacing>:last-child,.tox:not([dir=rtl]) .tox-comment__edit,.tox:not([dir=rtl]) .tox-comment__edit>:last-child,.tox:not([dir=rtl]) .tox-comment__reply>:last-child{margin-left:8px}.tox[dir=rtl] .tox-comment__buttonspacing>:last-child,.tox[dir=rtl] .tox-comment__edit,.tox[dir=rtl] .tox-comment__edit>:last-child,.tox[dir=rtl] .tox-comment__reply>:last-child{margin-right:8px}.tox .tox-user{align-items:center;display:flex}.tox .tox-user__avatar svg{fill:rgba(34,47,62,.7)}.tox .tox-user__name{color:rgba(34,47,62,.7);font-size:12px;font-style:normal;font-weight:700;text-transform:uppercase}.tox:not([dir=rtl]) .tox-user__avatar svg{margin-right:8px}.tox:not([dir=rtl]) .tox-user__avatar+.tox-user__name,.tox[dir=rtl] .tox-user__avatar svg{margin-left:8px}.tox[dir=rtl] .tox-user__avatar+.tox-user__name{margin-right:8px}.tox .tox-dialog-wrap{align-items:center;bottom:0;display:flex;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:1100}.tox .tox-dialog-wrap__backdrop{background-color:hsla(0,0%,100%,.75);bottom:0;left:0;position:absolute;right:0;top:0;z-index:1}.tox .tox-dialog,.tox .tox-dialog-wrap__backdrop--opaque{background-color:#fff}.tox .tox-dialog{border-color:#ccc;border-radius:3px;border-style:solid;border-width:1px;box-shadow:0 16px 16px -10px rgba(34,47,62,.15),0 0 40px 1px rgba(34,47,62,.15);display:flex;flex-direction:column;max-height:100%;max-width:480px;overflow:hidden;position:relative;width:95vw;z-index:2}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-dialog{align-self:flex-start;margin:8px auto;width:calc(100vw - 16px)}}.tox .tox-dialog-inline{z-index:1100}.tox .tox-dialog__header{align-items:center;background-color:#fff;border-bottom:none;color:#222f3e;display:flex;font-size:16px;justify-content:space-between;padding:8px 16px 0 16px;position:relative}.tox .tox-dialog__header .tox-button{z-index:1}.tox .tox-dialog__draghandle{cursor:-webkit-grab;cursor:grab;height:100%;left:0;position:absolute;top:0;width:100%}.tox .tox-dialog__draghandle:active{cursor:-webkit-grabbing;cursor:grabbing}.tox .tox-dialog__dismiss{margin-left:auto}.tox .tox-dialog__title{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:20px;margin:0}.tox .tox-dialog__body,.tox .tox-dialog__title{font-style:normal;font-weight:400;line-height:1.3;text-transform:none}.tox .tox-dialog__body{color:#222f3e;display:flex;flex:1;-ms-flex-preferred-size:auto;font-size:16px;min-width:0;text-align:left}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-dialog__body{flex-direction:column}}.tox .tox-dialog__body-nav{align-items:flex-start;display:flex;flex-direction:column;padding:16px 16px}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-dialog__body-nav{flex-direction:row;-webkit-overflow-scrolling:touch;overflow-x:auto;padding-bottom:0}}.tox .tox-dialog__body-nav-item{border-bottom:2px solid transparent;color:rgba(34,47,62,.7);display:inline-block;font-size:14px;line-height:1.3;margin-bottom:8px;text-decoration:none;white-space:nowrap}.tox .tox-dialog__body-nav-item:focus{background-color:rgba(32,122,183,.1)}.tox .tox-dialog__body-nav-item--active{border-bottom:2px solid #207ab7;color:#207ab7}.tox .tox-dialog__body-content{box-sizing:border-box;display:flex;flex:1;flex-direction:column;-ms-flex-preferred-size:auto;max-height:650px;overflow:auto;-webkit-overflow-scrolling:touch;padding:16px 16px}.tox .tox-dialog__body-content>*{margin-bottom:0;margin-top:16px}.tox .tox-dialog__body-content>:first-child{margin-top:0}.tox .tox-dialog__body-content>:last-child{margin-bottom:0}.tox .tox-dialog__body-content>:only-child{margin-bottom:0;margin-top:0}.tox .tox-dialog__body-content a{color:#207ab7;cursor:pointer;text-decoration:none}.tox .tox-dialog__body-content a:active,.tox .tox-dialog__body-content a:focus,.tox .tox-dialog__body-content a:hover{color:#185d8c;text-decoration:none}.tox .tox-dialog__body-content svg{fill:#222f3e}.tox .tox-dialog__body-content ul{display:block;list-style-type:disc;margin-bottom:16px;-webkit-margin-end:0;margin-inline-end:0;-webkit-margin-start:0;margin-inline-start:0;-webkit-padding-start:2.5rem;padding-inline-start:2.5rem}.tox .tox-dialog__body-content .tox-form__group h1{font-size:20px}.tox .tox-dialog__body-content .tox-form__group h1,.tox .tox-dialog__body-content .tox-form__group h2{color:#222f3e;font-style:normal;font-weight:700;letter-spacing:normal;margin-bottom:16px;margin-top:2rem;text-transform:none}.tox .tox-dialog__body-content .tox-form__group h2{font-size:16px}.tox .tox-dialog__body-content .tox-form__group p{margin-bottom:16px}.tox .tox-dialog__body-content .tox-form__group h1:first-child,.tox .tox-dialog__body-content .tox-form__group h2:first-child,.tox .tox-dialog__body-content .tox-form__group p:first-child{margin-top:0}.tox .tox-dialog__body-content .tox-form__group h1:last-child,.tox .tox-dialog__body-content .tox-form__group h2:last-child,.tox .tox-dialog__body-content .tox-form__group p:last-child{margin-bottom:0}.tox .tox-dialog__body-content .tox-form__group h1:only-child,.tox .tox-dialog__body-content .tox-form__group h2:only-child,.tox .tox-dialog__body-content .tox-form__group p:only-child{margin-bottom:0;margin-top:0}.tox .tox-dialog--width-lg{height:650px;max-width:1200px}.tox .tox-dialog--width-md{max-width:800px}.tox .tox-dialog--width-md .tox-dialog__body-content{overflow:auto}.tox .tox-dialog__body-content--centered{text-align:center}.tox .tox-dialog__footer{align-items:center;background-color:#fff;border-top:1px solid #ccc;display:flex;justify-content:space-between;padding:8px 16px}.tox .tox-dialog__footer-end,.tox .tox-dialog__footer-start{display:flex}.tox .tox-dialog__busy-spinner{align-items:center;background-color:hsla(0,0%,100%,.75);bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0;z-index:3}.tox .tox-dialog__table{border-collapse:collapse;width:100%}.tox .tox-dialog__table thead th{font-weight:700;padding-bottom:8px}.tox .tox-dialog__table tbody tr{border-bottom:1px solid #ccc}.tox .tox-dialog__table tbody tr:last-child{border-bottom:none}.tox .tox-dialog__table td{padding-bottom:8px;padding-top:8px}.tox .tox-dialog__popups{position:absolute;width:100%;z-index:1100}.tox .tox-dialog__body-iframe{display:flex;flex:1;flex-direction:column;-ms-flex-preferred-size:auto}.tox .tox-dialog__body-iframe .tox-navobj{display:flex;flex:1;-ms-flex-preferred-size:auto}.tox .tox-dialog__body-iframe .tox-navobj :nth-child(2){flex:1;-ms-flex-preferred-size:auto;height:100%}.tox .tox-dialog-dock-fadeout{opacity:0;visibility:hidden}.tox .tox-dialog-dock-fadein{opacity:1;visibility:visible}.tox .tox-dialog-dock-transition{transition:visibility 0s linear .3s,opacity .3s ease}.tox .tox-dialog-dock-transition.tox-dialog-dock-fadein{transition-delay:0s}.tox.tox-platform-ie .tox-dialog-wrap{position:-ms-device-fixed}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav{margin-right:0}}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav-item:not(:first-child){margin-left:8px}}.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-end>*,.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-start>*{margin-left:8px}.tox[dir=rtl] .tox-dialog__body{text-align:right}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav{margin-left:0}}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav-item:not(:first-child){margin-right:8px}}.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-end>*,.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-start>*{margin-right:8px}body.tox-dialog__disable-scroll{overflow:hidden}.tox .tox-dropzone-container{display:flex;flex:1;-ms-flex-preferred-size:auto}.tox .tox-dropzone{align-items:center;background:#fff;border:2px dashed #ccc;box-sizing:border-box;display:flex;flex-direction:column;flex-grow:1;justify-content:center;min-height:100px;padding:10px}.tox .tox-dropzone p{color:rgba(34,47,62,.7);margin:0 0 16px 0}.tox .tox-edit-area{display:flex;flex:1;-ms-flex-preferred-size:auto;overflow:hidden;position:relative}.tox .tox-edit-area__iframe{background-color:#fff;border:0;box-sizing:border-box;flex:1;-ms-flex-preferred-size:auto;height:100%;position:absolute;width:100%}.tox.tox-inline-edit-area{border:1px dotted #ccc}.tox .tox-editor-container{display:flex;flex:1 1 auto;flex-direction:column;overflow:hidden}.tox .tox-editor-header{z-index:1}.tox:not(.tox-tinymce-inline) .tox-editor-header{box-shadow:none;transition:box-shadow .5s}.tox.tox-tinymce--toolbar-bottom .tox-editor-header,.tox.tox-tinymce-inline .tox-editor-header{margin-bottom:-1px}.tox.tox-tinymce--toolbar-sticky-on .tox-editor-header{box-shadow:0 4px 4px -3px rgba(0,0,0,.25)}.tox-editor-dock-fadeout{opacity:0;visibility:hidden}.tox-editor-dock-fadein{opacity:1;visibility:visible}.tox-editor-dock-transition{transition:visibility 0s linear .25s,opacity .25s ease}.tox-editor-dock-transition.tox-editor-dock-fadein{transition-delay:0s}.tox .tox-control-wrap{flex:1;position:relative}.tox .tox-control-wrap:not(.tox-control-wrap--status-invalid) .tox-control-wrap__status-icon-invalid,.tox .tox-control-wrap:not(.tox-control-wrap--status-unknown) .tox-control-wrap__status-icon-unknown,.tox .tox-control-wrap:not(.tox-control-wrap--status-valid) .tox-control-wrap__status-icon-valid{display:none}.tox .tox-control-wrap svg{display:block}.tox .tox-control-wrap__status-icon-wrap{position:absolute;top:50%;transform:translateY(-50%)}.tox .tox-control-wrap__status-icon-invalid svg{fill:#c00}.tox .tox-control-wrap__status-icon-unknown svg{fill:orange}.tox .tox-control-wrap__status-icon-valid svg{fill:green}.tox:not([dir=rtl]) .tox-control-wrap--status-invalid .tox-textfield,.tox:not([dir=rtl]) .tox-control-wrap--status-unknown .tox-textfield,.tox:not([dir=rtl]) .tox-control-wrap--status-valid .tox-textfield{padding-right:32px}.tox:not([dir=rtl]) .tox-control-wrap__status-icon-wrap{right:4px}.tox[dir=rtl] .tox-control-wrap--status-invalid .tox-textfield,.tox[dir=rtl] .tox-control-wrap--status-unknown .tox-textfield,.tox[dir=rtl] .tox-control-wrap--status-valid .tox-textfield{padding-left:32px}.tox[dir=rtl] .tox-control-wrap__status-icon-wrap{left:4px}.tox .tox-autocompleter,.tox .tox-autocompleter .tox-menu{max-width:25em}.tox .tox-autocompleter .tox-autocompleter-highlight{font-weight:700}.tox .tox-color-input{display:flex;position:relative;z-index:1}.tox .tox-color-input .tox-textfield{z-index:-1}.tox .tox-color-input span{border-color:rgba(34,47,62,.2);border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;height:24px;position:absolute;top:6px;width:24px}.tox .tox-color-input span:focus:not([aria-disabled=true]),.tox .tox-color-input span:hover:not([aria-disabled=true]){border-color:#207ab7;cursor:pointer}.tox .tox-color-input span:before{background-image:linear-gradient(45deg,rgba(0,0,0,.25) 25%,transparent 0),linear-gradient(-45deg,rgba(0,0,0,.25) 25%,transparent 0),linear-gradient(45deg,transparent 75%,rgba(0,0,0,.25) 0),linear-gradient(-45deg,transparent 75%,rgba(0,0,0,.25) 0);background-position:0 0,0 6px,6px -6px,-6px 0;background-size:12px 12px;border:1px solid #fff;border-radius:3px;box-sizing:border-box;content:"";height:24px;left:-1px;position:absolute;top:-1px;width:24px;z-index:-1}.tox .tox-color-input span[aria-disabled=true]{cursor:not-allowed}.tox:not([dir=rtl]) .tox-color-input .tox-textfield{padding-left:36px}.tox:not([dir=rtl]) .tox-color-input span{left:6px}.tox[dir=rtl] .tox-color-input .tox-textfield{padding-right:36px}.tox[dir=rtl] .tox-color-input span{right:6px}.tox .tox-label,.tox .tox-toolbar-label{color:rgba(34,47,62,.7);display:block;font-size:14px;font-style:normal;font-weight:400;line-height:1.3;padding:0 8px 0 0;text-transform:none;white-space:nowrap}.tox .tox-toolbar-label{padding:0 8px}.tox[dir=rtl] .tox-label{padding:0 0 0 8px}.tox .tox-form{display:flex;flex:1;flex-direction:column;-ms-flex-preferred-size:auto}.tox .tox-form__group{box-sizing:border-box;margin-bottom:4px}.tox .tox-form-group--maximize{flex:1}.tox .tox-form__group--error{color:#c00}.tox .tox-form__group--collection{display:flex}.tox .tox-form__grid{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between}.tox .tox-form__grid--2col>.tox-form__group{width:calc(50% - 4px)}.tox .tox-form__grid--3col>.tox-form__group{width:calc(33.33333% - 4px)}.tox .tox-form__grid--4col>.tox-form__group{width:calc(25% - 4px)}.tox .tox-form__controls-h-stack,.tox .tox-form__group--inline{align-items:center;display:flex}.tox .tox-form__group--stretched{display:flex;flex:1;flex-direction:column;-ms-flex-preferred-size:auto}.tox .tox-form__group--stretched .tox-textarea{flex:1;-ms-flex-preferred-size:auto}.tox .tox-form__group--stretched .tox-navobj{display:flex;flex:1;-ms-flex-preferred-size:auto}.tox .tox-form__group--stretched .tox-navobj :nth-child(2){flex:1;-ms-flex-preferred-size:auto;height:100%}.tox:not([dir=rtl]) .tox-form__controls-h-stack>:not(:first-child){margin-left:4px}.tox[dir=rtl] .tox-form__controls-h-stack>:not(:first-child){margin-right:4px}.tox .tox-lock.tox-locked .tox-lock-icon__unlock,.tox .tox-lock:not(.tox-locked) .tox-lock-icon__lock{display:none}.tox .tox-listboxfield .tox-listbox--select,.tox .tox-textarea,.tox .tox-textfield,.tox .tox-toolbar-textfield{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#ccc;border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;color:#222f3e;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:16px;line-height:24px;margin:0;min-height:34px;outline:none;padding:5px 4.75px;resize:none;width:100%}.tox .tox-textarea[disabled],.tox .tox-textfield[disabled]{background-color:#f2f2f2;color:rgba(34,47,62,.85);cursor:not-allowed}.tox .tox-listboxfield .tox-listbox--select:focus,.tox .tox-textarea:focus,.tox .tox-textfield:focus{background-color:#fff;border-color:#207ab7;box-shadow:none;outline:none}.tox .tox-toolbar-textfield{border-width:0;margin-bottom:3px;margin-top:2px;max-width:250px}.tox .tox-naked-btn{background-color:transparent;border:0;border-color:transparent;box-shadow:unset;color:#207ab7;cursor:pointer;display:block;margin:0;padding:0}.tox .tox-naked-btn svg{display:block;fill:#222f3e}.tox:not([dir=rtl]) .tox-toolbar-textfield+*{margin-left:4px}.tox[dir=rtl] .tox-toolbar-textfield+*{margin-right:4px}.tox .tox-listboxfield{cursor:pointer;position:relative}.tox .tox-listboxfield .tox-listbox--select[disabled]{background-color:#f2f2f2;color:rgba(34,47,62,.85);cursor:not-allowed}.tox .tox-listbox__select-label{cursor:default;flex:1;margin:0 4px}.tox .tox-listbox__select-chevron{align-items:center;display:flex;justify-content:center;width:16px}.tox .tox-listbox__select-chevron svg{fill:#222f3e}.tox .tox-listboxfield .tox-listbox--select{align-items:center;display:flex}.tox:not([dir=rtl]) .tox-listboxfield svg{right:8px}.tox[dir=rtl] .tox-listboxfield svg{left:8px}.tox .tox-selectfield{cursor:pointer;position:relative}.tox .tox-selectfield select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#ccc;border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;color:#222f3e;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:16px;line-height:24px;margin:0;min-height:34px;outline:none;padding:5px 4.75px;resize:none;width:100%}.tox .tox-selectfield select[disabled]{background-color:#f2f2f2;color:rgba(34,47,62,.85);cursor:not-allowed}.tox .tox-selectfield select::-ms-expand{display:none}.tox .tox-selectfield select:focus{background-color:#fff;border-color:#207ab7;box-shadow:none;outline:none}.tox .tox-selectfield svg{pointer-events:none;position:absolute;top:50%;transform:translateY(-50%)}.tox:not([dir=rtl]) .tox-selectfield select[size="0"],.tox:not([dir=rtl]) .tox-selectfield select[size="1"]{padding-right:24px}.tox:not([dir=rtl]) .tox-selectfield svg{right:8px}.tox[dir=rtl] .tox-selectfield select[size="0"],.tox[dir=rtl] .tox-selectfield select[size="1"]{padding-left:24px}.tox[dir=rtl] .tox-selectfield svg{left:8px}.tox .tox-textarea{-webkit-appearance:textarea;-moz-appearance:textarea;appearance:textarea;white-space:pre-wrap}.tox-fullscreen{border:0;height:100%;left:0;margin:0;overflow:hidden;-ms-scroll-chaining:none;overscroll-behavior:none;padding:0;position:fixed;top:0;touch-action:pinch-zoom;width:100%}.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle{display:none}.tox-shadowhost.tox-fullscreen,.tox.tox-tinymce.tox-fullscreen{z-index:1200}.tox-fullscreen .tox.tox-tinymce-aux,.tox-fullscreen~.tox.tox-tinymce-aux{z-index:1201}.tox .tox-help__more-link{list-style:none;margin-top:1em}.tox .tox-image-tools{width:100%}.tox .tox-image-tools__toolbar{align-items:center;display:flex;justify-content:center}.tox .tox-image-tools__image{background-color:#666;height:380px;overflow:auto;position:relative;width:100%}.tox .tox-image-tools__image,.tox .tox-image-tools__image+.tox-image-tools__toolbar{margin-top:8px}.tox .tox-image-tools__image-bg{background:url(data:image/gif;base64,R0lGODdhDAAMAIABAMzMzP///ywAAAAADAAMAAACFoQfqYeabNyDMkBQb81Uat85nxguUAEAOw==)}.tox .tox-image-tools__toolbar>.tox-spacer{flex:1;-ms-flex-preferred-size:auto}.tox .tox-croprect-block{background:#000;filter:alpha(opacity=50);opacity:.5;position:absolute;zoom:1}.tox .tox-croprect-handle{border:2px solid #fff;height:20px;left:0;position:absolute;top:0;width:20px}.tox .tox-croprect-handle-move{border:0;cursor:move;position:absolute}.tox .tox-croprect-handle-nw{border-width:2px 0 0 2px;cursor:nw-resize;left:100px;margin:-2px 0 0 -2px;top:100px}.tox .tox-croprect-handle-ne{border-width:2px 2px 0 0;cursor:ne-resize;left:200px;margin:-2px 0 0 -20px;top:100px}.tox .tox-croprect-handle-sw{border-width:0 0 2px 2px;cursor:sw-resize;left:100px;margin:-20px 2px 0 -2px;top:200px}.tox .tox-croprect-handle-se{border-width:0 2px 2px 0;cursor:se-resize;left:200px;margin:-20px 0 0 -20px;top:200px}.tox:not([dir=rtl]) .tox-image-tools__toolbar>.tox-slider:not(:first-of-type){margin-left:8px}.tox:not([dir=rtl]) .tox-image-tools__toolbar>.tox-button+.tox-slider,.tox:not([dir=rtl]) .tox-image-tools__toolbar>.tox-slider+.tox-button{margin-left:32px}.tox[dir=rtl] .tox-image-tools__toolbar>.tox-slider:not(:first-of-type){margin-right:8px}.tox[dir=rtl] .tox-image-tools__toolbar>.tox-button+.tox-slider,.tox[dir=rtl] .tox-image-tools__toolbar>.tox-slider+.tox-button{margin-right:32px}.tox .tox-insert-table-picker{display:flex;flex-wrap:wrap;width:170px}.tox .tox-insert-table-picker>div{border-color:#ccc;border-style:solid;border-width:0 1px 1px 0;box-sizing:border-box;height:17px;width:17px}.tox .tox-collection--list .tox-collection__group .tox-insert-table-picker{margin:-4px 0}.tox .tox-insert-table-picker .tox-insert-table-picker__selected{background-color:rgba(32,122,183,.5);border-color:rgba(32,122,183,.5)}.tox .tox-insert-table-picker__label{color:rgba(34,47,62,.7);display:block;font-size:14px;padding:4px;text-align:center;width:100%}.tox:not([dir=rtl]) .tox-insert-table-picker>div:nth-child(10n){border-right:0}.tox[dir=rtl] .tox-insert-table-picker>div:nth-child(10n+1){border-right:0}.tox .tox-menu{background-color:#fff;border:1px solid #ccc;border-radius:3px;box-shadow:0 4px 8px 0 rgba(34,47,62,.1);display:inline-block;overflow:hidden;vertical-align:top;z-index:1150}.tox .tox-menu.tox-collection.tox-collection--list{padding:0}.tox .tox-menu.tox-collection.tox-collection--grid,.tox .tox-menu.tox-collection.tox-collection--toolbar{padding:4px}.tox .tox-menu__label blockquote,.tox .tox-menu__label code,.tox .tox-menu__label h1,.tox .tox-menu__label h2,.tox .tox-menu__label h3,.tox .tox-menu__label h4,.tox .tox-menu__label h5,.tox .tox-menu__label h6,.tox .tox-menu__label p{margin:0}.tox .tox-menubar{background:url("data:image/svg+xml;charset=utf8,%3Csvg height='39px' viewBox='0 0 40 39px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='38px' width='100' height='1' fill='%23cccccc'/%3E%3C/svg%3E") left 0 top 0 #fff;background-color:#fff;display:flex;flex:0 0 auto;flex-shrink:0;flex-wrap:wrap;padding:0 4px 0 4px}.tox.tox-tinymce:not(.tox-tinymce-inline) .tox-editor-header:not(:first-child) .tox-menubar{border-top:1px solid #ccc}.tox .tox-mbtn{align-items:center;background:transparent;border:0;border-radius:3px;box-shadow:none;color:#222f3e;display:flex;flex:0 0 auto;font-size:14px;font-style:normal;font-weight:400;height:34px;justify-content:center;margin:2px 0 3px 0;outline:none;overflow:hidden;padding:0 4px;text-transform:none;width:auto}.tox .tox-mbtn[disabled]{background-color:transparent;border:0;box-shadow:none;color:rgba(34,47,62,.5);cursor:not-allowed}.tox .tox-mbtn:focus:not(:disabled){background:#dee0e2;border:0;box-shadow:none;color:#222f3e}.tox .tox-mbtn--active{background:#c8cbcf;border:0;box-shadow:none;color:#222f3e}.tox .tox-mbtn:hover:not(:disabled):not(.tox-mbtn--active){background:#dee0e2;border:0;box-shadow:none;color:#222f3e}.tox .tox-mbtn__select-label{cursor:default;font-weight:400;margin:0 4px}.tox .tox-mbtn[disabled] .tox-mbtn__select-label{cursor:not-allowed}.tox .tox-mbtn__select-chevron{align-items:center;display:flex;justify-content:center;width:16px;display:none}.tox .tox-notification{border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;display:-ms-grid;display:grid;-ms-grid-columns:minmax(40px,1fr) auto minmax(40px,1fr);grid-template-columns:minmax(40px,1fr) auto minmax(40px,1fr);margin-top:4px;opacity:0;padding:4px;transition:transform .1s ease-in,opacity .15s ease-in}.tox .tox-notification,.tox .tox-notification p{font-size:14px;font-weight:400}.tox .tox-notification a{text-decoration:underline}.tox .tox-notification--in{opacity:1}.tox .tox-notification--success{background-color:#e4eeda;border-color:#d7e6c8;color:#222f3e}.tox .tox-notification--success p{color:#222f3e}.tox .tox-notification--success a{color:#547831}.tox .tox-notification--success svg{fill:#222f3e}.tox .tox-notification--error{background-color:#f8dede;border-color:#f2bfbf;color:#222f3e}.tox .tox-notification--error p{color:#222f3e}.tox .tox-notification--error a{color:#c00}.tox .tox-notification--error svg{fill:#222f3e}.tox .tox-notification--warn,.tox .tox-notification--warning{background-color:#fffaea;border-color:#ffe89d;color:#222f3e}.tox .tox-notification--warn a,.tox .tox-notification--warning a,.tox .tox-notification--warning p,.tox .tox-notification--warn p{color:#222f3e}.tox .tox-notification--warning svg,.tox .tox-notification--warn svg{fill:#222f3e}.tox .tox-notification--info{background-color:#d9edf7;border-color:#779ecb;color:#222f3e}.tox .tox-notification--info a,.tox .tox-notification--info p{color:#222f3e}.tox .tox-notification--info svg{fill:#222f3e}.tox .tox-notification__body{-ms-grid-row-align:center;align-self:center;color:#222f3e;font-size:14px;-ms-grid-column-span:1;grid-column-end:3;-ms-grid-column:2;grid-column-start:2;-ms-grid-row-span:1;grid-row-end:2;-ms-grid-row:1;grid-row-start:1;text-align:center;white-space:normal;word-break:break-all;word-break:break-word}.tox .tox-notification__body>*{margin:0}.tox .tox-notification__body>*+*{margin-top:1rem}.tox .tox-notification__icon{-ms-grid-row-align:center;align-self:center;-ms-grid-column-span:1;grid-column-end:2;-ms-grid-column:1;grid-column-start:1;-ms-grid-row-span:1;grid-row-end:2;-ms-grid-row:1;grid-row-start:1;-ms-grid-column-align:end;justify-self:end}.tox .tox-notification__icon svg{display:block}.tox .tox-notification__dismiss{-ms-grid-row-align:start;align-self:start;-ms-grid-column-span:1;grid-column-end:4;-ms-grid-column:3;grid-column-start:3;-ms-grid-row-span:1;grid-row-end:2;-ms-grid-row:1;grid-row-start:1;-ms-grid-column-align:end;justify-self:end}.tox .tox-notification .tox-progress-bar{-ms-grid-column-span:3;grid-column-end:4;-ms-grid-column:1;grid-column-start:1;-ms-grid-row-span:1;grid-row-end:3;-ms-grid-row:2;grid-row-start:2;-ms-grid-column-align:center;justify-self:center}.tox .tox-pop{display:inline-block;position:relative}.tox .tox-pop--resizing{transition:width .1s ease}.tox .tox-pop--resizing .tox-toolbar{flex-wrap:nowrap}.tox .tox-pop__dialog{background-color:#fff;border:1px solid #ccc;border-radius:3px;box-shadow:0 1px 3px rgba(0,0,0,.15);min-width:0;overflow:hidden}.tox .tox-pop__dialog>:not(.tox-toolbar){margin:4px 4px 4px 8px}.tox .tox-pop__dialog .tox-toolbar{background-color:transparent;margin-bottom:-1px}.tox .tox-pop:after,.tox .tox-pop:before{border-style:solid;content:"";display:block;height:0;position:absolute;width:0}.tox .tox-pop.tox-pop--bottom:after,.tox .tox-pop.tox-pop--bottom:before{left:50%;top:100%}.tox .tox-pop.tox-pop--bottom:after{border-color:#fff transparent transparent transparent;border-width:8px;margin-left:-8px;margin-top:-1px}.tox .tox-pop.tox-pop--bottom:before{border-color:#ccc transparent transparent transparent;border-width:9px;margin-left:-9px}.tox .tox-pop.tox-pop--top:after,.tox .tox-pop.tox-pop--top:before{left:50%;top:0;transform:translateY(-100%)}.tox .tox-pop.tox-pop--top:after{border-color:transparent transparent #fff transparent;border-width:8px;margin-left:-8px;margin-top:1px}.tox .tox-pop.tox-pop--top:before{border-color:transparent transparent #ccc transparent;border-width:9px;margin-left:-9px}.tox .tox-pop.tox-pop--left:after,.tox .tox-pop.tox-pop--left:before{left:0;top:calc(50% - 1px);transform:translateY(-50%)}.tox .tox-pop.tox-pop--left:after{border-color:transparent #fff transparent transparent;border-width:8px;margin-left:-15px}.tox .tox-pop.tox-pop--left:before{border-color:transparent #ccc transparent transparent;border-width:10px;margin-left:-19px}.tox .tox-pop.tox-pop--right:after,.tox .tox-pop.tox-pop--right:before{left:100%;top:calc(50% + 1px);transform:translateY(-50%)}.tox .tox-pop.tox-pop--right:after{border-color:transparent transparent transparent #fff;border-width:8px;margin-left:-1px}.tox .tox-pop.tox-pop--right:before{border-color:transparent transparent transparent #ccc;border-width:10px;margin-left:-1px}.tox .tox-pop.tox-pop--align-left:after,.tox .tox-pop.tox-pop--align-left:before{left:20px}.tox .tox-pop.tox-pop--align-right:after,.tox .tox-pop.tox-pop--align-right:before{left:calc(100% - 20px)}.tox .tox-sidebar-wrap{display:flex;flex-direction:row;flex-grow:1;-ms-flex-preferred-size:0;min-height:0}.tox .tox-sidebar{background-color:#fff;display:flex;flex-direction:row;justify-content:flex-end}.tox .tox-sidebar__slider{display:flex;overflow:hidden}.tox .tox-sidebar__pane,.tox .tox-sidebar__pane-container{display:flex}.tox .tox-sidebar--sliding-closed{opacity:0}.tox .tox-sidebar--sliding-open{opacity:1}.tox .tox-sidebar--sliding-growing,.tox .tox-sidebar--sliding-shrinking{transition:width .5s ease,opacity .5s ease}.tox .tox-selector{background-color:#4099ff;border-color:#4099ff;border-style:solid;border-width:1px;box-sizing:border-box;display:inline-block;height:10px;position:absolute;width:10px}.tox.tox-platform-touch .tox-selector{height:12px;width:12px}.tox .tox-slider{align-items:center;display:flex;flex:1;-ms-flex-preferred-size:auto;height:24px;justify-content:center;position:relative}.tox .tox-slider__rail{background-color:transparent;border:1px solid #ccc;border-radius:3px;height:10px;min-width:120px;width:100%}.tox .tox-slider__handle{background-color:#207ab7;border:2px solid #185d8c;border-radius:3px;box-shadow:none;height:24px;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%);width:14px}.tox .tox-source-code{overflow:auto}.tox .tox-spinner{display:flex}.tox .tox-spinner>div{-webkit-animation:tam-bouncing-dots 1.5s ease-in-out 0s infinite both;animation:tam-bouncing-dots 1.5s ease-in-out 0s infinite both;background-color:rgba(34,47,62,.7);border-radius:100%;height:8px;width:8px}.tox .tox-spinner>div:first-child{-webkit-animation-delay:-.32s;animation-delay:-.32s}.tox .tox-spinner>div:nth-child(2){-webkit-animation-delay:-.16s;animation-delay:-.16s}@-webkit-keyframes tam-bouncing-dots{0%,80%,to{transform:scale(0)}40%{transform:scale(1)}}@keyframes tam-bouncing-dots{0%,80%,to{transform:scale(0)}40%{transform:scale(1)}}.tox:not([dir=rtl]) .tox-spinner>div:not(:first-child){margin-left:4px}.tox[dir=rtl] .tox-spinner>div:not(:first-child){margin-right:4px}.tox .tox-statusbar{align-items:center;background-color:#fff;border-top:1px solid #ccc;color:rgba(34,47,62,.7);display:flex;flex:0 0 auto;font-size:12px;font-weight:400;height:18px;overflow:hidden;padding:0 8px;position:relative;text-transform:uppercase}.tox .tox-statusbar__text-container{display:flex;flex:1 1 auto;justify-content:flex-end;overflow:hidden}.tox .tox-statusbar__path{display:flex;flex:1 1 auto;margin-right:auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tox .tox-statusbar__path>*{display:inline;white-space:nowrap}.tox .tox-statusbar__wordcount{flex:0 0 auto;margin-left:1ch}.tox .tox-statusbar__path-item,.tox .tox-statusbar__wordcount,.tox .tox-statusbar a{color:rgba(34,47,62,.7);text-decoration:none}.tox .tox-statusbar__path-item:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__path-item:hover:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__wordcount:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__wordcount:hover:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar a:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar a:hover:not(:disabled):not([aria-disabled=true]){cursor:pointer;text-decoration:underline}.tox .tox-statusbar__resize-handle{align-items:flex-end;align-self:stretch;cursor:nwse-resize;display:flex;flex:0 0 auto;justify-content:flex-end;margin-left:auto;margin-right:-8px;padding-left:1ch}.tox .tox-statusbar__resize-handle svg{display:block;fill:rgba(34,47,62,.7)}.tox:not([dir=rtl]) .tox-statusbar__path>*{margin-right:4px}.tox:not([dir=rtl]) .tox-statusbar__branding{margin-left:1ch}.tox[dir=rtl] .tox-statusbar{flex-direction:row-reverse}.tox[dir=rtl] .tox-statusbar__path>*{margin-left:4px}.tox .tox-throbber{z-index:1400}.tox .tox-throbber__busy-spinner{background-color:hsla(0,0%,100%,.6);bottom:0;left:0;position:absolute;right:0;top:0}.tox .tox-tbtn,.tox .tox-throbber__busy-spinner{align-items:center;display:flex;justify-content:center}.tox .tox-tbtn{background:transparent;border:0;border-radius:3px;box-shadow:none;color:#222f3e;flex:0 0 auto;font-size:14px;font-style:normal;font-weight:400;height:34px;margin:2px 0 3px 0;outline:none;overflow:hidden;padding:0;text-transform:none;width:34px}.tox .tox-tbtn svg{display:block;fill:#222f3e}.tox .tox-tbtn.tox-tbtn-more{padding-left:5px;padding-right:5px;width:inherit}.tox .tox-tbtn:focus,.tox .tox-tbtn:hover{background:#dee0e2;border:0;box-shadow:none}.tox .tox-tbtn:hover{color:#222f3e}.tox .tox-tbtn:hover svg{fill:#222f3e}.tox .tox-tbtn:active{background:#c8cbcf;border:0;box-shadow:none;color:#222f3e}.tox .tox-tbtn:active svg{fill:#222f3e}.tox .tox-tbtn--disabled,.tox .tox-tbtn--disabled:hover,.tox .tox-tbtn:disabled,.tox .tox-tbtn:disabled:hover{background:transparent;border:0;box-shadow:none;color:rgba(34,47,62,.5);cursor:not-allowed}.tox .tox-tbtn--disabled:hover svg,.tox .tox-tbtn--disabled svg,.tox .tox-tbtn:disabled:hover svg,.tox .tox-tbtn:disabled svg{fill:rgba(34,47,62,.5)}.tox .tox-tbtn--enabled,.tox .tox-tbtn--enabled:hover{background:#c8cbcf;border:0;box-shadow:none;color:#222f3e}.tox .tox-tbtn--enabled:hover>*,.tox .tox-tbtn--enabled>*{transform:none}.tox .tox-tbtn--enabled:hover svg,.tox .tox-tbtn--enabled svg{fill:#222f3e}.tox .tox-tbtn:focus:not(.tox-tbtn--disabled){color:#222f3e}.tox .tox-tbtn:focus:not(.tox-tbtn--disabled) svg{fill:#222f3e}.tox .tox-tbtn:active>*{transform:none}.tox .tox-tbtn--md{height:51px;width:51px}.tox .tox-tbtn--lg{flex-direction:column;height:68px;width:68px}.tox .tox-tbtn--return{-ms-grid-row-align:stretch;align-self:stretch;height:unset;width:16px}.tox .tox-tbtn--labeled{padding:0 4px;width:unset}.tox .tox-tbtn__vlabel{display:block;font-size:10px;font-weight:400;letter-spacing:-.025em;margin-bottom:4px;white-space:nowrap}.tox .tox-tbtn--select{margin:2px 0 3px 0;padding:0 4px;width:auto}.tox .tox-tbtn__select-label{cursor:default;font-weight:400;margin:0 4px}.tox .tox-tbtn__select-chevron{align-items:center;display:flex;justify-content:center;width:16px}.tox .tox-tbtn__select-chevron svg{fill:rgba(34,47,62,.5)}.tox .tox-tbtn--bespoke .tox-tbtn__select-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:7em}.tox .tox-split-button{border:0;border-radius:3px;box-sizing:border-box;display:flex;margin:2px 0 3px 0;overflow:hidden}.tox .tox-split-button:hover{box-shadow:inset 0 0 0 1px #dee0e2}.tox .tox-split-button:focus{background:#dee0e2;box-shadow:none;color:#222f3e}.tox .tox-split-button>*{border-radius:0}.tox .tox-split-button__chevron{width:16px}.tox .tox-split-button__chevron svg{fill:rgba(34,47,62,.5)}.tox .tox-split-button .tox-tbtn{margin:0}.tox.tox-platform-touch .tox-split-button .tox-tbtn:first-child{width:30px}.tox.tox-platform-touch .tox-split-button__chevron{width:20px}.tox .tox-split-button.tox-tbtn--disabled .tox-tbtn:focus,.tox .tox-split-button.tox-tbtn--disabled .tox-tbtn:hover,.tox .tox-split-button.tox-tbtn--disabled:focus,.tox .tox-split-button.tox-tbtn--disabled:hover{background:transparent;box-shadow:none;color:rgba(34,47,62,.5)}.tox .tox-toolbar-overlord{background-color:#fff}.tox .tox-toolbar,.tox .tox-toolbar__overflow,.tox .tox-toolbar__primary{background:url("data:image/svg+xml;charset=utf8,%3Csvg height='39px' viewBox='0 0 40 39px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='38px' width='100' height='1' fill='%23cccccc'/%3E%3C/svg%3E") left 0 top 0 #fff;background-color:#fff;display:flex;flex:0 0 auto;flex-shrink:0;flex-wrap:wrap;padding:0 0}.tox .tox-toolbar__overflow.tox-toolbar__overflow--closed{height:0;opacity:0;padding-bottom:0;padding-top:0;visibility:hidden}.tox .tox-toolbar__overflow--growing{transition:height .3s ease,opacity .2s linear .1s}.tox .tox-toolbar__overflow--shrinking{transition:opacity .3s ease,height .2s linear .1s,visibility 0s linear .3s}.tox .tox-menubar+.tox-toolbar,.tox .tox-menubar+.tox-toolbar-overlord .tox-toolbar__primary{border-top:1px solid #ccc;margin-top:-1px}.tox .tox-toolbar--scrolling{flex-wrap:nowrap;overflow-x:auto}.tox .tox-pop .tox-toolbar{border-width:0}.tox .tox-toolbar--no-divider{background-image:none}.tox-tinymce:not(.tox-tinymce-inline) .tox-editor-header:not(:first-child) .tox-toolbar-overlord:first-child .tox-toolbar__primary,.tox-tinymce:not(.tox-tinymce-inline) .tox-editor-header:not(:first-child) .tox-toolbar:first-child{border-top:1px solid #ccc}.tox.tox-tinymce-aux .tox-toolbar__overflow{background-color:#fff;border:1px solid #ccc;border-radius:3px;box-shadow:0 1px 3px rgba(0,0,0,.15)}.tox[dir=rtl] .tox-tbtn__icon-rtl svg{transform:rotateY(180deg)}.tox .tox-toolbar__group{align-items:center;display:flex;flex-wrap:wrap;margin:0 0;padding:0 4px 0 4px}.tox .tox-toolbar__group--pull-right{margin-left:auto}.tox .tox-toolbar--scrolling .tox-toolbar__group{flex-shrink:0;flex-wrap:nowrap}.tox:not([dir=rtl]) .tox-toolbar__group:not(:last-of-type){border-right:1px solid #ccc}.tox[dir=rtl] .tox-toolbar__group:not(:last-of-type){border-left:1px solid #ccc}.tox .tox-tooltip{display:inline-block;padding:8px;position:relative}.tox .tox-tooltip__body{background-color:#222f3e;border-radius:3px;box-shadow:0 2px 4px rgba(34,47,62,.3);color:hsla(0,0%,100%,.75);font-size:14px;font-style:normal;font-weight:400;padding:4px 8px;text-transform:none}.tox .tox-tooltip__arrow{position:absolute}.tox .tox-tooltip--down .tox-tooltip__arrow{border-top:8px solid #222f3e;bottom:0}.tox .tox-tooltip--down .tox-tooltip__arrow,.tox .tox-tooltip--up .tox-tooltip__arrow{border-left:8px solid transparent;border-right:8px solid transparent;left:50%;position:absolute;transform:translateX(-50%)}.tox .tox-tooltip--up .tox-tooltip__arrow{border-bottom:8px solid #222f3e;top:0}.tox .tox-tooltip--right .tox-tooltip__arrow{border-left:8px solid #222f3e;right:0}.tox .tox-tooltip--left .tox-tooltip__arrow,.tox .tox-tooltip--right .tox-tooltip__arrow{border-bottom:8px solid transparent;border-top:8px solid transparent;position:absolute;top:50%;transform:translateY(-50%)}.tox .tox-tooltip--left .tox-tooltip__arrow{border-right:8px solid #222f3e;left:0}.tox .tox-well{border:1px solid #ccc;border-radius:3px;padding:8px;width:100%}.tox .tox-well>:first-child{margin-top:0}.tox .tox-well>:last-child{margin-bottom:0}.tox .tox-well>:only-child{margin:0}.tox .tox-custom-editor{border:1px solid #ccc;border-radius:3px;display:flex;flex:1;position:relative}.tox .tox-dialog-loading:before{background-color:rgba(0,0,0,.5);content:"";height:100%;position:absolute;width:100%;z-index:1000}.tox .tox-tab{cursor:pointer}.tox .tox-dialog__body-content .tox-collection,.tox .tox-dialog__content-js{display:flex;flex:1;-ms-flex-preferred-size:auto}.tox .tox-image-tools-edit-panel,.tox .tox-image-tools__sidebar{height:60px} \ No newline at end of file diff --git a/sapl/static/sapl/frontend/css/chunk-vendors.e8d8c6de.css.gz b/sapl/static/sapl/frontend/css/chunk-vendors.e8d8c6de.css.gz new file mode 100644 index 000000000..d0570c4fe Binary files /dev/null and b/sapl/static/sapl/frontend/css/chunk-vendors.e8d8c6de.css.gz differ diff --git a/sapl/static/sapl/frontend/css/compilacao.90ba9ac3.css b/sapl/static/sapl/frontend/css/compilacao.90ba9ac3.css new file mode 100644 index 000000000..bcf13138c --- /dev/null +++ b/sapl/static/sapl/frontend/css/compilacao.90ba9ac3.css @@ -0,0 +1 @@ +a:link:after,a:visited:after{content:""}.test_import:nth-child(2n){background-color:#ccc}#wait_message{display:block;position:fixed;top:0;bottom:0;left:0;right:0;background-color:hsla(0,0%,86.3%,.75);z-index:99}#wait_message #msg{position:relative;margin:20% auto;padding:1.2em 2em;max-width:600px;text-align:center;font-size:1.5em;color:#677;border:1px solid #eee;background-color:#fff!important;-webkit-box-shadow:0 1px 2px #999;box-shadow:0 1px 2px #999}.text-center{text-align:center}.cp-notify{z-index:10000;position:fixed;top:2em;left:50%;min-width:600px;-webkit-transform:translate(-50%);transform:translate(-50%);opacity:.97}.cp-notify,.cp-notify.hide{-webkit-transition:all .4s ease;transition:all .4s ease}.cp-notify.hide{opacity:0;top:-1000px;display:block!important}.cp-notify .message{padding:1em;border:2px solid rgba(0,0,0,.1);border-radius:4px;color:rgba(0,0,0,.6);line-height:1em;font-size:1.3em;text-align:center;-webkit-box-shadow:0 0 100px rgba(0,0,0,.2);box-shadow:0 0 100px rgba(0,0,0,.2)}.cp .vigencia-active{margin-top:30px;display:block}.cp .cp-linha-vigencias{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;list-style:none;margin:4rem 0 3rem;padding:0;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.cp .cp-linha-vigencias ul{list-style:none;margin:0;padding:0}.cp .cp-linha-vigencias>li{display:-webkit-box;display:-ms-flexbox;display:flex;position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;line-height:0;background:#000;height:2px;text-align:center;max-width:4rem}.cp .cp-linha-vigencias>li .circle{display:block;width:10px;line-height:0;background:#000;height:10px;margin:-5px auto 0;border-radius:50%}.cp .cp-linha-vigencias>li>a{position:absolute;white-space:nowrap;line-height:1rem;text-align:center}.cp .cp-linha-vigencias>li:nth-child(2n)>a{top:100%;margin-top:5px}.cp .cp-linha-vigencias>li:nth-child(odd)>a{bottom:100%;margin-bottom:5px}.cp .cp-linha-vigencias>li ul{z-index:1;position:absolute;display:none;background:#fff;margin:30px 0;border:1px solid #aaa;-webkit-box-shadow:0 0 10px #aaa;box-shadow:0 0 10px #aaa;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.cp .cp-linha-vigencias>li ul:before{content:" ";width:2px;height:30px;position:absolute;display:block;background-color:#aaa;bottom:100%;left:50%;margin-left:-1px}.cp .cp-linha-vigencias>li ul li{text-align:left}.cp .cp-linha-vigencias>li ul a{display:block;white-space:nowrap;line-height:2rem;padding:0 10px;font-size:1rem}.cp .cp-linha-vigencias>li ul a:hover{background:#eee}.cp .cp-linha-vigencias>li.active .circle{display:block;width:20px;line-height:0;background:#aaa;height:20px;margin:-10px auto 0}.cp .cp-linha-vigencias>li.active:not(:last-child)>a{-webkit-transform:rotate(-90deg);transform:rotate(-90deg);margin-bottom:25px;font-weight:700}.cp .cp-linha-vigencias>li.active:first-child>a,.cp .cp-linha-vigencias>li.active:last-child>a{-webkit-transform:rotate(0deg);transform:rotate(0deg);margin-bottom:15px;font-weight:700}.cp .cp-linha-vigencias>li.active>a{margin-bottom:5px}.cp .cp-linha-vigencias>li.active:nth-child(2n)>a{bottom:100%;top:auto}.cp .cp-linha-vigencias>li.active ul{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.cp .cp-linha-vigencias>li.active ul li{text-align:left;width:100%}.cp .cp-vigencias .nav-link{padding:.5rem}.cp .cp-vigencias .dropdown-toggle:after{zoom:.8;margin:0}.cp .cp-vigencias .dropdown-menu{margin-left:.5rem}.cp .cp-vigencias .dropdown-item{padding:0}.cp .cp-vigencias .dropdown-item a{line-height:1;padding:.7rem}.cp .desativado .dpt-link,.cp .desativado .dpt-link *,.cp .desativado .dtxt,.cp .desativado .dtxt *,.cp .dpt .dptt>a.desativado .dpt-link,.cp .dpt .dptt>a.desativado .dpt-link *,.cp .dpt .dptt>a.desativado .dtxt,.cp .dpt .dptt>a.desativado .dtxt *{text-decoration:line-through;color:#999!important}.cp .desativado .dpt-link * table,.cp .desativado .dpt-link * table td,.cp .desativado .dpt-link table,.cp .desativado .dpt-link table td,.cp .desativado .dtxt * table,.cp .desativado .dtxt * table td,.cp .desativado .dtxt table,.cp .desativado .dtxt table td,.cp .dpt .dptt>a.desativado .dpt-link * table,.cp .dpt .dptt>a.desativado .dpt-link * table td,.cp .dpt .dptt>a.desativado .dpt-link table,.cp .dpt .dptt>a.desativado .dpt-link table td,.cp .dpt .dptt>a.desativado .dtxt * table,.cp .dpt .dptt>a.desativado .dtxt * table td,.cp .dpt .dptt>a.desativado .dtxt table,.cp .dpt .dptt>a.desativado .dtxt table td{border:1px dotted #ccc}.cp .desativado .dpt-img img,.cp .dpt .dptt>a.desativado .dpt-img img{-webkit-filter:grayscale(100%) contrast(110%);filter:grayscale(100%) contrast(110%);opacity:.5}.cp a{text-decoration:none;cursor:pointer}.cp .diff .desativado,.cp .diff .desativado *,.cp .diff .dpt .dptt>a.desativado,.cp .diff .dpt .dptt>a.desativado *,.cp .dpt .diff .dptt>a.desativado,.cp .dpt .diff .dptt>a.desativado *{text-decoration:line-through;color:#ddd!important;font-size:90%}.cp .diff .added{color:#04de2c}.cp .dpt{font-size:1em;position:relative}.cp .dpt.indent{padding-left:1em}.cp .dpt .dpt-img{text-align:center}.cp .dpt .dpt-img img{max-width:100%}.cp .dpt .ementa{padding:2em 0 2em 35%;font-weight:700}.cp .dpt .anexo,.cp .dpt .capitulo,.cp .dpt .disp_finais,.cp .dpt .disp_gerais,.cp .dpt .disp_preliminares,.cp .dpt .disp_transitorias,.cp .dpt .itemsecao,.cp .dpt .livro,.cp .dpt .parte,.cp .dpt .secao,.cp .dpt .subsecao,.cp .dpt .titulo,.cp .dpt .titulo_generico{text-align:center;margin-bottom:1em;font-size:1.5em;margin-top:3em;font-weight:700;font-variant:small-caps}.cp .dpt .titulo{margin-top:2em}.cp .dpt .capitulo{margin-top:1.5em;font-size:1.15em}.cp .dpt .secao{margin-top:1.2em;margin-bottom:.7em;font-weight:700;font-size:1.15em}.cp .dpt .itemsecao,.cp .dpt .subsecao{margin-top:1em;margin-bottom:.6em;font-weight:700;font-size:1.15em}.cp .dpt .artigo{font-size:1.15em;float:left}.cp .dpt .artigo .dptt{position:relative}.cp .dpt .caput,.cp .dpt .texto_n_estruturado{margin-top:.3333em;font-size:1.15em}.cp .dpt .paragrafo{font-size:1.1em;margin-top:.2222em}.cp .dpt .inciso{font-size:1.1em;margin-top:.1667em}.cp .dpt .alinea,.cp .dpt .item{font-size:1em;margin-top:2px}.cp .dpt .assinatura,.cp .dpt .fecho_lei{margin-top:.6em;font-size:1.15em}.cp .dpt .page-break{page-break-before:always}.cp .dpt .bloco_alteracao{padding-left:10%;font-style:italic;color:#018}.cp .dpt .bloco_alteracao a{text-decoration:underline}.cp .dpt .bloco_alteracao a,.cp .dpt .bloco_alteracao table,.cp .dpt .bloco_alteracao table td{color:#018!important}.cp .dpt .bloco_alteracao .desativado,.cp .dpt .bloco_alteracao .desativado a,.cp .dpt .bloco_alteracao .desativado table,.cp .dpt .bloco_alteracao .desativado table td,.cp .dpt .bloco_alteracao .dptt>a.desativado{text-decoration:line-through;color:#999!important}.cp .dpt .card-header{font-size:1.7rem}.cp .dpt .dn{font-weight:400;position:relative;font-size:80%}.cp .dpt .dn p,.cp .dpt .dn ul{font-weight:400;margin:0 0 0 0;list-style:none;padding:0}.cp .dpt .dn .dnl{display:block;text-align:left!important}.cp .dpt .dn .dnl *{display:inline}.cp .dpt .dn .dnl .bullet{padding:0 .333em;display:inline-block}.cp .dpt .dn .dnl .dnli{min-height:2.5em}.cp .dpt .dn .dnl .dnli:hover ul{font-size:1rem;clip:auto;opacity:1;background:hsla(0,0%,90.2%,.9)}.cp .dpt .dn .dnl .dnli:hover ul,.cp .dpt .dn .dnl .dnli ul{-webkit-transition:opacity .5s linear,clip 0s .3s;transition:opacity .5s linear,clip 0s .3s}.cp .dpt .dn .dnl .dnli ul{clip:rect(0,0,0,0);opacity:0;position:absolute;background:transparent;right:0;padding:.2em .5em 0 .5em;border:1px solid #c7e3d3;border-top:0;font-size:1.5rem}.cp .dpt .dn .dnl .dnli ul li{display:table-cell;color:#aaa}.cp .dpt .dn .dnl .dnli ul li:hover{color:#787}.cp .dpt .dn .dnl .dnli ul li .nowner,.cp .dpt .dn .dnl .dnli ul li:hover a{color:#27ae60!important}.cp .dpt .dn .dnl .dnli .ntitulo{font-size:.8rem;font-weight:700;color:#03a203;text-decoration:none}.cp .dpt .dn .dnl .dnli .ntitulo a{color:#294!important}.cp .dpt .dn .dnl .dnli .ntexto{font-variant:normal;font-size:.8rem;color:#018801}.cp .dpt .dn .dnl .dnli .ntexto a{color:#03a203!important}.cp .dpt .dn .dnl:hover,.cp .dpt .dn .dnl:hover *{display:block}.cp .dpt .dn .dnl:hover>.bullet{display:none}.cp .dpt .dn .dnl:hover .dnli{margin-top:.5em;border-top:1px solid #c7e3d3}.cp .dpt .dptt{clear:left}.cp .dpt .dptt>a{color:#000}.cp .dpt .dptt>a.nota-alteracao{color:#02baf2;font-size:.75em}.cp .dpt .dptt>a.nota-alteracao:hover{text-decoration:underline}.cp .dpt .dptt .dne{position:absolute;display:block;right:0;left:0;top:0;height:0;-webkit-transform:scaleX(0);transform:scaleX(0);-webkit-transform-origin:right;transform-origin:right;-webkit-transition:all .3s ease;transition:all .3s ease;border-top:1px solid #2980b9}.cp .dpt .dptt .dne ul.btns-action{list-style:none;padding:0;position:absolute;right:0;background-color:#2980b9}.cp .dpt .dptt .dne ul.btns-action li{float:left}.cp .dpt .dptt .dne ul.btns-action li:hover{background-color:rgba(0,0,0,.1)}.cp .dpt .dptt .dne ul.btns-action li a{color:#fff;padding:.15em 1em 0;display:inline-block}.cp .dpt .dptt .dne-nota{position:relative;-webkit-transform:scaleX(1);transform:scaleX(1);height:auto;border-top:0}.cp .dpt .dptt .dne-nota ul.btns-action{display:none}.cp .dpt .dptt .dne-nota .dne-form{margin:1em -2em 0;text-align:left;font-size:1rem}.cp .dpt .dptt:hover .dne{height:.1667rem;-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transition-delay:1s;transition-delay:1s}.cp .dpt .dptt:hover .dne-nota{height:auto;-webkit-transition-delay:0s;transition-delay:0s}.cp .tipo-vigencias{margin-bottom:-6px;opacity:.8;list-style:none;position:fixed;bottom:0;left:50%;-webkit-transform:translate(-50%);transform:translate(-50%);margin:0;padding:0;z-index:1000;-webkit-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.cp .tipo-vigencias div a{color:#fff}.cp .tipo-vigencias:hover,.cp:hover{opacity:1}.cp .revogado{color:#800}.cp .revogado .dpt-link{color:#999!important}.cp .omissis a{text-decoration:none!important}.cp-print .cp-linha-vigencias{display:none!important}.cp.cpe .desativado,.cp.cpe .dpt .dptt>a.desativado{text-decoration:line-through;color:#999!important}.cp.cpe .desativado table,.cp.cpe .desativado table td,.cp.cpe .dpt .dptt>a.desativado table,.cp.cpe .dpt .dptt>a.desativado table td{border:1px dotted #ccc}.cp.cpe a.nota-alteracao{color:#02baf2!important;font-size:.8rem}.cp.cpe .btn-sm{line-height:1rem}.cp.cpe .btn-outline-primary{background-color:#fff}.cp.cpe .btn-outline-primary:hover{background-color:#02baf2}.cp.cpe .dpt{display:block}.cp.cpe .dpt>.dpt-actions-fixed{position:absolute;right:-1em;top:-.8em;z-index:3;opacity:0}.cp.cpe .dpt>.dpt-actions-fixed.bottom{top:auto;bottom:3px;right:2px}.cp.cpe .dpt>.dpt-actions-fixed .activate{display:none}.cp.cpe .dpt>.dpt-actions-fixed .deactivate{display:inline}.cp.cpe .dpt>.dpt-actions-fixed .btn-dpt-edit.btn-outline-primary{color:#333}.cp.cpe .dpt>.dpt-actions-fixed .btn-dpt-edit.btn-outline-primary:hover{color:#fff;background-color:#02baf2}.cp.cpe .dpt>.dpt-actions,.cp.cpe .dpt>.dpt-actions-bottom{display:none}.cp.cpe .dpt>.dpt-text{cursor:text;min-height:30px;border:1px solid transparent}.cp.cpe .dpt>.dpt-text.hover-fixed,.cp.cpe .dpt>.dpt-text:hover{background-color:rgba(0,0,0,.01);color:#2980b9;border:1px solid #eee;-webkit-transition:color .3s ease;transition:color .3s ease}.cp.cpe .dpt>.dpt-text.artigo{float:none}.cp.cpe .dpt>.dpt-text a.link-rotulo{color:#000}.cp.cpe .dpt:hover>.dpt-actions-fixed{opacity:1}.cp.cpe .dpt:hover>.dpt-actions-fixed:hover~.dpt-text{background-color:rgba(0,0,0,.01);color:#2980b9;border:1px solid #eee;-webkit-transition:color .3s ease;transition:color .3s ease}.cp.cpe .dpt .semtexto{font-weight:700;color:#9aaed6}.cp.cpe .dpt .semtexto:hover{color:#5f76a4}.cp.cpe .dpt-alts{margin:0;margin-bottom:1em;padding:0;background-color:transparent;min-height:100px;border:2px dashed #fff}.cp.cpe .dpt-alts:hover{border-color:#d9ddde}.cp.cpe .dpt-alts:empty{border-color:#ddd}.cp.cpe .dpt-alts.drag{width:100%!important;border-color:#d9ddde}.cp.cpe .dpt-alts.drag .dpt{-webkit-transition-duration:0s!important;transition-duration:0s!important}.cp.cpe .dpt-alts .dpt{width:100%!important;-webkit-box-shadow:0 -1px 0 #e5e5e5,0 0 2px rgba(0,0,0,.12),0 2px 4px rgba(0,0,0,.24);box-shadow:0 -1px 0 #e5e5e5,0 0 2px rgba(0,0,0,.12),0 2px 4px rgba(0,0,0,.24);padding:0;margin:0;background-color:#edf0f1;height:auto!important;min-height:2em;z-index:1}.cp.cpe .dpt-alts .dpt:not(:first-child){border-top:1px solid #fff}.cp.cpe .dpt-alts .dpt>.dpt-text{padding:.3em 1em;margin-top:0;margin-bottom:0}.cp.cpe .dpt-alts .dpt>.dpt-text a.link-rotulo{text-decoration:underline}.cp.cpe .dpt-alts .dpt-selected.dpt{margin:0 -.5em}.cp.cpe .dpt-selected.dpt{width:auto!important;margin:1em -.5em;border:1px solid #ddd!important;padding:0;background-color:#fafafa;border-radius:3px;z-index:4}.cp.cpe .dpt-selected.dpt>.dpt-text{border:1px solid transparent}.cp.cpe .dpt-selected.dpt>.dpt-text:hover{border:1px solid transparent;background-color:transparent}.cp.cpe .dpt-selected.dpt>.dpt-form{margin:0 1rem}.cp.cpe .dpt-selected.dpt>.dpt-actions,.cp.cpe .dpt-selected.dpt>.dpt-actions-bottom{display:table;background-color:#e5e5e5;padding:.8rem .6rem .2rem .6rem;margin-bottom:0;width:100%}.cp.cpe .dpt-selected.dpt>.dpt-actions-bottom>.btn-action,.cp.cpe .dpt-selected.dpt>.dpt-actions>.btn-action{display:table-cell;float:none}.cp.cpe .dpt-selected.dpt>.dpt-actions-bottom .btns-excluir .btn-danger,.cp.cpe .dpt-selected.dpt>.dpt-actions .btns-excluir .btn-danger{display:inline-block;opacity:.3;color:#fff}.cp.cpe .dpt-selected.dpt>.dpt-actions-bottom .btns-excluir .btn-danger:hover,.cp.cpe .dpt-selected.dpt>.dpt-actions .btns-excluir .btn-danger:hover{opacity:1}.cp.cpe .dpt-selected.dpt>.dpt-actions-bottom{margin:0;padding-bottom:.8rem}.cp.cpe .dpt-selected .dpt-block{border-top:1px solid #e5e5e5!important;opacity:.6;-webkit-transition:opacity .4s ease;transition:opacity .4s ease}.cp.cpe .dpt-selected .dpt-block:hover{opacity:1}.cp.cpe .dpt-selected .dpt-text{opacity:.7;margin:0;padding:.7em}.cp.cpe .dpt-selected .dpt-text:hover{opacity:1;background-color:#f5f5f5}.cp.cpe .dpt-selected .dpt-alts{margin:1em}.cp.cpe .dpt-selected .dpt-alts .dpt{-webkit-box-shadow:0 0 0;box-shadow:0 0 0}.cp.cpe .dpt-selected>.dpt-actions-fixed{opacity:1;top:-15px;right:.5em}.cp.cpe .dpt-selected>.dpt-actions-fixed .activate{display:inline}.cp.cpe .dpt-selected>.dpt-actions-fixed .deactivate{display:none}.cp.cpe .dpt-selected>.dpt-actions-fixed .btn-dpt-edit{padding:0 6px;line-height:1.2rem}.cp.cpe .dpt-selected>.dpt-actions-fixed .btn-dpt-edit.btn-outline-primary,.cp.cpe .dpt-selected>.dpt-actions-fixed .btn-dpt-edit.btn-outline-primary:hover{background-color:#fad46b;border:1px solid #444}.cp.cpe .dpt-selected .btns-tipos-editor{padding:0}.cp.cpe .dpt-selected .dropdown-menu.dropdown-menu-left{right:auto!important;left:0;padding:0}.cp.cpe .dpt-selected .dropdown-menu.dropdown-menu-left:before{content:"";position:absolute;background-color:transparent;width:100%;height:3px;top:-3px;display:inline-block}.cp.cpe .dpt-selected .dropdown-menu li{line-height:1}.cp.cpe .dpt-selected .dropdown-menu li a{display:block;line-height:1.5rem;padding:0 .5rem;white-space:nowrap}.cp.cpe .dpt-selected .dropdown-menu li a:hover{background-color:#f0f0f0}.cp.cpe .dpt-selected .dropdown-menu li:not(:last-child){border-bottom:1px solid #f0f0f0}.cp.cpe .dpt-selected .btn-group .radius-right{border-bottom-right-radius:.2rem!important;border-top-right-radius:.2rem!important}.cp.cpe .dpt-selected:hover>.dpt-actions-fixed{opacity:1}.cp.cpe1_old_apagar{margin-bottom:15em}.cp.cpe1_old_apagar .desativado,.cp.cpe1_old_apagar .desativado *,.cp.cpe1_old_apagar .dpt .dptt>a.desativado,.cp.cpe1_old_apagar .dpt .dptt>a.desativado *{text-decoration:line-through;color:#999!important}.cp.cpe1_old_apagar .desativado * table,.cp.cpe1_old_apagar .desativado * table td,.cp.cpe1_old_apagar .desativado table,.cp.cpe1_old_apagar .desativado table td,.cp.cpe1_old_apagar .dpt .dptt>a.desativado * table,.cp.cpe1_old_apagar .dpt .dptt>a.desativado * table td,.cp.cpe1_old_apagar .dpt .dptt>a.desativado table,.cp.cpe1_old_apagar .dpt .dptt>a.desativado table td{border:1px dotted #ccc}.cp.cpe1_old_apagar a{text-decoration:none;cursor:pointer}.cp.cpe1_old_apagar .dpt{position:relative;display:block}.cp.cpe1_old_apagar .dpt .semtexto{font-weight:700;color:#bfd1f6}.cp.cpe1_old_apagar .dpt .artigo{float:none}.cp.cpe1_old_apagar .dpt .caput{margin-top:0}.cp.cpe1_old_apagar .dpt-selected .csform .dpt>.actions_left,.cp.cpe1_old_apagar .dpt>.actions_right{color:#fff;right:0;position:absolute;opacity:0;-webkit-transition:all .4s ease-in-out;transition:all .4s ease-in-out;z-index:1000}.cp.cpe1_old_apagar .dpt-selected .csform .dpt>.actions_left a.btn-bloco,.cp.cpe1_old_apagar .dpt>.actions_right a.btn-bloco{background-color:#3498db;color:#fff!important;padding:8px 18px 6px;display:inline-block;line-height:1;float:right}.cp.cpe1_old_apagar .dpt-selected .csform .dpt>.actions_left a.btn-bloco:hover,.cp.cpe1_old_apagar .dpt>.actions_right a.btn-bloco:hover{opacity:1;background-image:-webkit-gradient(linear,left top,left bottom,from(#1c81c4),to(#0b6dad));background-image:linear-gradient(180deg,#1c81c4,#0b6dad)}.cp.cpe1_old_apagar .dpt-selected .csform .dpt:hover>.actions_left,.cp.cpe1_old_apagar .dpt:hover>.actions_right{opacity:1}.cp.cpe1_old_apagar .dpt .bloco{display:block;clear:both}.cp.cpe1_old_apagar .dpt .bloco :hover{color:#27ae60}.cp.cpe1_old_apagar .dpt .bloco .de{cursor:pointer}.cp.cpe1_old_apagar .dpt .articulacao{border-top:2px solid #e5e5e5;margin:2em 0}.cp.cpe1_old_apagar .dpt .bloco_alteracao{margin:1em 0;padding:0;background-color:transparent;min-height:100px;border:2px dashed #fff}.cp.cpe1_old_apagar .dpt .bloco_alteracao:hover{border-color:#d9ddde}.cp.cpe1_old_apagar .dpt .bloco_alteracao.drag{width:100%!important;border-color:#d9ddde}.cp.cpe1_old_apagar .dpt .bloco_alteracao.drag .dpt{-webkit-transition-duration:0s!important;transition-duration:0s!important}.cp.cpe1_old_apagar .dpt .bloco_alteracao .dpt{width:100%!important;-webkit-box-shadow:0 -1px 0 #e5e5e5,0 0 2px rgba(0,0,0,.12),0 2px 4px rgba(0,0,0,.24);box-shadow:0 -1px 0 #e5e5e5,0 0 2px rgba(0,0,0,.12),0 2px 4px rgba(0,0,0,.24);padding:.3em 1em;margin:0;background-color:#edf0f1;z-index:1}.cp.cpe1_old_apagar .dpt .bloco_alteracao .dpt:not(:first-child){border-top:1px solid #fff}.cp.cpe1_old_apagar .dpt .bloco_alteracao .dpt.ui-draggable div{cursor:pointer}.cp.cpe1_old_apagar .dpt .bloco_alteracao .dpt.dpt-comp-selected{-webkit-transition:all .3s ease;transition:all .3s ease;width:auto!important;margin:2em -3.7em;-webkit-box-shadow:0 0 6px rgba(0,0,0,.16),0 6px 12px rgba(0,0,0,.32);box-shadow:0 0 6px rgba(0,0,0,.16),0 6px 12px rgba(0,0,0,.32)}.cp.cpe1_old_apagar .dpt-selected{font-size:1em;border:0 solid #ccc;margin:1em -1.8em 1em -1.8em;padding:2.2em 2.2em 1.6em 2.2em;-webkit-box-shadow:-4px 15px 15px rgba(0,0,0,.1),0 6px 6px rgba(0,0,0,.23);box-shadow:-4px 15px 15px rgba(0,0,0,.1),0 6px 6px rgba(0,0,0,.23);background-image:-webkit-gradient(linear,left top,left bottom,from(#eaeaee),to(#ddd));background-image:linear-gradient(180deg,#eaeaee,#ddd)}.cp.cpe1_old_apagar .dpt-selected ul{list-style:none;margin:0;padding:0}.cp.cpe1_old_apagar .dpt-selected .semtexto{color:#999}.cp.cpe1_old_apagar .dpt-selected .bloco{opacity:.5}.cp.cpe1_old_apagar .dpt-selected .bloco:hover{opacity:1}.cp.cpe1_old_apagar .dpt-selected .bloco a:hover{background:transparent}.cp.cpe1_old_apagar .dpt-selected>.bloco{opacity:1;margin:1em}.cp.cpe1_old_apagar .dpt-selected .bloco_alteracao{margin:0;padding:1em;border:0 transparent;background-image:-webkit-gradient(linear,left top,left bottom,from(#eaeaee),to(#ddd));background-image:linear-gradient(180deg,#eaeaee,#ddd)}.cp.cpe1_old_apagar .dpt-selected .bloco_alteracao:hover{border-color:transparent}.cp.cpe1_old_apagar .dpt-selected .bloco_alteracao.drag{width:100%!important}.cp.cpe1_old_apagar .dpt-selected .bloco_alteracao.drag .dpt{-webkit-transition-duration:0s!important;transition-duration:0s!important}.cp.cpe1_old_apagar .dpt-selected .bloco_alteracao .dpt{width:auto!important;-webkit-transition:all .3s ease;transition:all .3s ease;background-color:#fff}.cp.cpe1_old_apagar .dpt-selected .bloco_alteracao .dpt:not(:first-child){border-top:0 solid #fff}.cp.cpe1_old_apagar .dpt-selected>.dpt{padding:0}.cp.cpe1_old_apagar .dpt-selected>.dpt:last-child{padding-bottom:1em}.cp.cpe1_old_apagar .dpt-selected .csform .dpt-selected>.actions_left a.btn-bloco,.cp.cpe1_old_apagar .dpt-selected>.actions_right a.btn-bloco{display:none}.cp.cpe1_old_apagar .dpt-selected .csform{display:block;clear:both;z-index:9;position:static}.cp.cpe1_old_apagar .dpt-selected .csform .btns-action{-webkit-animation:fadeIn 1s ease-in-out;-moz-animation:fadeIn 1s ease-in-out;-o-animation:fadeIn 1s ease-in-out;opacity:1;position:absolute;display:table;-webkit-transition:all .4s ease-in-out;transition:all .4s ease-in-out}.cp.cpe1_old_apagar .dpt-selected .csform .btns-action a{color:#16407c;display:block;background:transparent;vertical-align:middle;text-align:center;font-weight:400;text-shadow:0 0 10px rgba(0,0,0,.3);padding:.33em .4em}.cp.cpe1_old_apagar .dpt-selected .csform .btns-action>li{position:relative;display:table-cell;vertical-align:top}.cp.cpe1_old_apagar .dpt-selected .csform .btns-action>li:hover{background-color:hsla(0,0%,100%,.5)}.cp.cpe1_old_apagar .dpt-selected .csform .btns-action>li:hover>a{text-shadow:0 0 5px #777;color:#0a5}.cp.cpe1_old_apagar .dpt-selected .csform .label_status{position:absolute;bottom:0;right:0;color:#889;padding:.3em;font-size:80%;text-align:right;z-index:15;display:table}.cp.cpe1_old_apagar .dpt-selected .csform .label_status li{display:table-cell;padding:0 .5em}.cp.cpe1_old_apagar .dpt-selected .csform .actions_parents{z-index:11;top:0;left:0}.cp.cpe1_old_apagar .dpt-selected .csform .actions_parents a{padding:.62em}.cp.cpe1_old_apagar .dpt-selected .csform .actions_parents div,.cp.cpe1_old_apagar .dpt-selected .csform .actions_parents li{font-size:80%;display:table-cell;vertical-align:middle;border-right:1px solid #ccc}.cp.cpe1_old_apagar .dpt-selected .csform .actions_parents div{padding:0 .4em;font-stretch:condensed;font-variant:small-caps;font-weight:700;text-shadow:0 0 10px #fff}.cp.cpe1_old_apagar .dpt-selected .csform .actions_parents>li:hover a{color:#16407c;font-weight:400}.cp.cpe1_old_apagar .dpt-selected .csform .actions_bottom,.cp.cpe1_old_apagar .dpt-selected .csform .actions_top{top:0;right:0}.cp.cpe1_old_apagar .dpt-selected .csform .actions_bottom a,.cp.cpe1_old_apagar .dpt-selected .csform .actions_top a{padding-right:1em;padding-left:1em}.cp.cpe1_old_apagar .dpt-selected .csform .actions_bottom li,.cp.cpe1_old_apagar .dpt-selected .csform .actions_top li{display:table-cell;vertical-align:middle;border-left:1px solid #ccc}.cp.cpe1_old_apagar .dpt-selected .csform .actions_bottom{top:auto;left:0;bottom:0;display:inline-block;border-top:1px solid #ccc}.cp.cpe1_old_apagar .dpt-selected .csform .actions_bottom a{padding:0 .4em}.cp.cpe1_old_apagar .dpt-selected .csform .actions_bottom li{border:0;border-right:1px solid #ccc}.cp.cpe1_old_apagar .dpt-selected .csform .actions_left,.cp.cpe1_old_apagar .dpt-selected .csform .actions_right{top:2.2em;right:0;bottom:0;display:block}.cp.cpe1_old_apagar .dpt-selected .csform .actions_left li,.cp.cpe1_old_apagar .dpt-selected .csform .actions_right li{width:2.2em;display:block;border-bottom:1px solid #ccc}.cp.cpe1_old_apagar .dpt-selected .csform .actions_left li:first-child,.cp.cpe1_old_apagar .dpt-selected .csform .actions_right li:first-child{border-top:1px solid #ccc}.cp.cpe1_old_apagar .dpt-selected .csform .actions_left{right:auto;left:0}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts{background:transparent;position:relative;z-index:19;display:table;width:100%}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li{display:table-cell}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li:hover>a{background-image:-webkit-gradient(linear,left top,left bottom,from(#1c81c4),to(#0b6dad));background-image:linear-gradient(180deg,#1c81c4,#0b6dad)}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a{background-image:-webkit-gradient(linear,left top,left bottom,from(#3498db),to(#2980c9));background-image:linear-gradient(180deg,#3498db,#2980c9);border-right:1px solid #fff;padding:.2em;display:block;color:#fff;text-align:center;white-space:nowrap}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-excluir,.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-salvar{text-align:left;background:#a70808;color:#c99;padding-left:1.7em;position:relative}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-excluir:hover,.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-salvar:hover{background-color:#c70808;color:#ecc}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-excluir:before,.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-salvar:before{z-index:20;position:absolute;background:url(/static/img/icon_delete_white.png) no-repeat 50% 50%;content:"";top:0;left:0;display:block;color:#000;margin-left:.4em;height:100%;width:2em}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-salvar{background:#1f8b4d;color:#fff}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-salvar:hover{background:#2d9c5c;color:#fff}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-salvar:before{background:url(/static/img/icon_save_white.png) no-repeat 50% 50%}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a span{padding:0 .7em}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li:last-child>a{border-right:0 solid #fff}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>ul li:nth-child(2n) a{background:#3385ca}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>ul li a{border-right:1px solid #fff;display:block;color:#fff;background:#2980c9;font-size:80%;padding:.23em 1em}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>ul li a:hover{background:#0a5ea4}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.add_prior{table-layout:fixed}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.add_prior>ul{-webkit-transform:translateY(30px);transform:translateY(30px);-webkit-transition:opacity .1s linear,clip 0s .3s,-webkit-transform .1s linear;transition:opacity .1s linear,clip 0s .3s,-webkit-transform .1s linear;transition:transform .1s linear,opacity .1s linear,clip 0s .3s;transition:transform .1s linear,opacity .1s linear,clip 0s .3s,-webkit-transform .1s linear;clip:rect(0,0,0,0);opacity:0;position:absolute;margin-left:.5em;-webkit-box-shadow:0 6px 18px rgba(0,0,0,.19),0 2px 6px rgba(0,0,0,.23);box-shadow:0 6px 18px rgba(0,0,0,.19),0 2px 6px rgba(0,0,0,.23);-webkit-transition-delay:.4s;transition-delay:.4s}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.add_prior>ul li a{border-right:0!important}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.add_prior>ul li:first-child:before{border-width:.375rem;border-style:inset inset solid;content:"";display:block;height:0;width:0;border-color:transparent transparent #3385ca;position:absolute;top:-.71rem;left:.9375rem}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.add_prior>ul li:first-child:hover:before{border-color:transparent transparent #0a5ea4}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.add_prior>ul:after{content:"";position:absolute;z-index:-1;left:0;top:-25px;height:25px;width:100%;-webkit-transition:all .3s cubic-bezier(.55,0,.1,1);transition:all .3s cubic-bezier(.55,0,.1,1)}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.add_prior:hover>ul{-webkit-transform:translateY(7px);transform:translateY(7px);-webkit-transition:opacity .4s linear,clip 0s .2s,-webkit-transform .4s linear;transition:opacity .4s linear,clip 0s .2s,-webkit-transform .4s linear;transition:transform .4s linear,opacity .4s linear,clip 0s .2s;transition:transform .4s linear,opacity .4s linear,clip 0s .2s,-webkit-transform .4s linear;opacity:1;clip:rect(-100px,2000px,2000px,-100px)}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir{display:block;position:static}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir>ul{-webkit-transform:translateY(30px);transform:translateY(30px);-webkit-transition:opacity .1s linear,clip 0s .3s,-webkit-transform .1s linear;transition:opacity .1s linear,clip 0s .3s,-webkit-transform .1s linear;transition:transform .1s linear,opacity .1s linear,clip 0s .3s;transition:transform .1s linear,opacity .1s linear,clip 0s .3s,-webkit-transform .1s linear;clip:rect(0,0,0,0);opacity:0;position:absolute;margin-left:.5em;-webkit-box-shadow:0 6px 18px rgba(0,0,0,.19),0 2px 6px rgba(0,0,0,.23);box-shadow:0 6px 18px rgba(0,0,0,.19),0 2px 6px rgba(0,0,0,.23);-webkit-transition-delay:.4s;transition-delay:.4s}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir>ul li a{border-right:0!important}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir>ul li:first-child:before{border-width:.375rem;border-style:inset inset solid;content:"";display:block;height:0;width:0;border-color:transparent transparent #3385ca;position:absolute;top:-.71rem;left:.9375rem}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir>ul li:first-child:hover:before{border-color:transparent transparent #0a5ea4}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir>ul:after{content:"";position:absolute;z-index:-1;left:0;top:-25px;height:25px;width:100%;-webkit-transition:all .3s cubic-bezier(.55,0,.1,1);transition:all .3s cubic-bezier(.55,0,.1,1)}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir:hover>ul{-webkit-transform:translateY(7px);transform:translateY(7px);-webkit-transition:opacity .4s linear,clip 0s .2s,-webkit-transform .4s linear;transition:opacity .4s linear,clip 0s .2s,-webkit-transform .4s linear;transition:transform .4s linear,opacity .4s linear,clip 0s .2s;transition:transform .4s linear,opacity .4s linear,clip 0s .2s,-webkit-transform .4s linear;opacity:1;clip:rect(-100px,2000px,2000px,-100px)}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir>ul{right:.5em}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir>ul li a{background-color:#a70808}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir>ul li a:hover{background:#c70808}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir>ul li:first-child:before{border-color:transparent transparent #a70808;right:10%;left:auto}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir>ul li:first-child:hover:before{border-color:transparent transparent #c70808}.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante,.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante_fixo{z-index:2000}.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante>li>ul,.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante_fixo>li>ul{-webkit-transform:translateY(30px);transform:translateY(30px);-webkit-transition:opacity .1s linear,clip 0s .3s,-webkit-transform .1s linear;transition:opacity .1s linear,clip 0s .3s,-webkit-transform .1s linear;transition:transform .1s linear,opacity .1s linear,clip 0s .3s;transition:transform .1s linear,opacity .1s linear,clip 0s .3s,-webkit-transform .1s linear;clip:rect(0,0,0,0);opacity:0;position:absolute;margin-left:.5em;-webkit-box-shadow:0 6px 18px rgba(0,0,0,.19),0 2px 6px rgba(0,0,0,.23);box-shadow:0 6px 18px rgba(0,0,0,.19),0 2px 6px rgba(0,0,0,.23);-webkit-transition-delay:.4s;transition-delay:.4s}.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante>li>ul li a,.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante_fixo>li>ul li a{border-right:0!important}.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante>li>ul li:first-child:before,.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante_fixo>li>ul li:first-child:before{border-width:.375rem;border-style:inset inset solid;content:"";display:block;height:0;width:0;border-color:transparent transparent #3385ca;position:absolute;top:-.71rem;left:.9375rem}.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante>li>ul li:first-child:hover:before,.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante_fixo>li>ul li:first-child:hover:before{border-color:transparent transparent #0a5ea4}.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante>li>ul:after,.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante_fixo>li>ul:after{content:"";position:absolute;z-index:-1;left:0;top:-25px;height:25px;width:100%;-webkit-transition:all .3s cubic-bezier(.55,0,.1,1);transition:all .3s cubic-bezier(.55,0,.1,1)}.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante>li:hover>ul,.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante_fixo>li:hover>ul{-webkit-transform:translateY(7px);transform:translateY(7px);-webkit-transition:opacity .4s linear,clip 0s .2s,-webkit-transform .4s linear;transition:opacity .4s linear,clip 0s .2s,-webkit-transform .4s linear;transition:transform .4s linear,opacity .4s linear,clip 0s .2s;transition:transform .4s linear,opacity .4s linear,clip 0s .2s,-webkit-transform .4s linear;opacity:1;clip:rect(-100px,2000px,2000px,-100px)}.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante>li.menu_excluir>ul li:first-child:before,.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante_fixo>li.menu_excluir>ul li:first-child:before{right:auto;left:.9375rem}.cp.cpe1_old_apagar .dpt-selected .csform textarea{margin:0;resize:vertical;min-height:12.6em;border:0;font-size:120%;width:100%}.cp.cpe1_old_apagar .dpt-selected .csform textarea:focus{background:#fff}.cp.cpe1_old_apagar .dpt-selected .csform textarea::-webkit-input-placeholder{color:#c70808;opacity:.6;font-size:80%}.cp.cpe1_old_apagar .dpt-selected .csform textarea:-moz-placeholder,.cp.cpe1_old_apagar .dpt-selected .csform textarea::-moz-placeholder{color:#c70808}.cp.cpe1_old_apagar .dpt-selected .csform textarea:-ms-input-placeholder{color:#c70808;opacity:.6}.cp.cpe1_old_apagar .selected{background-color:hsla(0,0%,100%,.5)}.cp.cpe1_old_apagar .selected a:hover{color:#16407c!important;font-weight:400!important}.lista-dispositivo,.result-busca-dispositivo{padding:0 0 1em;min-height:3em}.lista-dispositivo ul,.result-busca-dispositivo ul{list-style:none;margin:0;padding:1em 0 0;-webkit-transition:all 2s linear;transition:all 2s linear;clear:both;position:relative}.lista-dispositivo ul li,.result-busca-dispositivo ul li{display:table;border-collapse:separate;border-bottom:1px solid #fff;width:100%}.lista-dispositivo ul li.ta_title,.result-busca-dispositivo ul li.ta_title{background-color:rgba(0,0,0,.15);width:100%}.lista-dispositivo ul li:last-child .itemlabel,.result-busca-dispositivo ul li:last-child .itemlabel{margin:0}.lista-dispositivo ul li .iteminput,.result-busca-dispositivo ul li .iteminput{background-color:rgba(0,0,0,.1);border-right:1px solid #fff;display:table-cell;padding:.5em;vertical-align:middle;text-align:center;position:relative}.lista-dispositivo ul li .iteminput input,.result-busca-dispositivo ul li .iteminput input{margin:0}.lista-dispositivo ul li .iteminput .flag,.result-busca-dispositivo ul li .iteminput .flag{position:absolute;top:0;left:0;right:0;line-height:1;background-color:#ccc;color:#fff;cursor:default;font-size:80%}.lista-dispositivo ul li .itemlabel,.result-busca-dispositivo ul li .itemlabel{margin:0;background-color:rgba(0,0,0,.1);display:table-cell;padding:.5em;vertical-align:middle;width:100%}.lista-dispositivo ul li .itemlabel .artigo,.result-busca-dispositivo ul li .itemlabel .artigo{float:none}.lista-dispositivo .label-tip-results,.result-busca-dispositivo .label-tip-results{background-color:rgba(0,0,0,.1);padding:0 5px;top:0;z-index:1;line-height:1.3;color:#00f;font-size:.9em}.lista-dispositivo .nomenclatura_heranca,.result-busca-dispositivo .nomenclatura_heranca{font-size:90%;color:#057dba;display:inline}.lista-dispositivo.controls-radio-checkbox{border:0}.label_vigencia{border-top:1px solid #fff;display:inline-block;color:#555}.label_vigencia span{color:grey}.cp-nav-parents .dropdown-menu{left:0;right:auto;padding:0}.cp-nav-parents .dropdown-menu:before{content:"";position:absolute;top:-11px;width:100%;height:11px}.cp-nav-parents:hover .dropdown-menu{display:block}.cp-nav-parents a.active small{color:#fff!important}.table-notificacoes tbody tr td{border-top:1px solid #fff;padding:5px;vertical-align:middle}.table-notificacoes tbody tr td ul{margin:0}.table-notificacoes tbody tr td ul li:hover{background-color:rgba(0,0,0,.1)}.btn-modal-open{float:right}.modal .modal-content .alert:only-child{margin:0}.class_color_container{background:#ddd!important}.clear{clear:both}.mce-tinymce.mce-container{border:1px solid #ccc!important;margin-right:2px}.mce-btn button:hover{background-color:rgba(0,0,0,.1)!important;text-shadow:0 0 5px #fff;-webkit-box-shadow:0 0 5px #777;box-shadow:0 0 5px #777}.mce-menu{background:#eee!important}.displaynone{display:none!important}@media only screen and (max-width:991.98px){.cp .table,.cp table{width:auto!important;white-space:normal;overflow-x:auto!important}}@media only screen and (max-width:800px){.cp .fixed{z-index:98;position:relative}.cp.cpe1 .dpt-selected{margin:1em 0}.cp.cpe1 .dpt-selected .csform .actions_parents,.cp.cpe1 .dpt-selected .csform .label_status{font-size:80%;position:static!important;display:block!important;padding:0;height:auto!important;left:0;right:auto;text-align:left}.cp.cpe1 .dpt-selected .csform .actions_parents div,.cp.cpe1 .dpt-selected .csform .actions_parents li,.cp.cpe1 .dpt-selected .csform .label_status div,.cp.cpe1 .dpt-selected .csform .label_status li{display:inline-block!important}.cp.cpe1 .dpt-selected .csform .actions_inserts>li>ul{-webkit-transform:translateY(30px);transform:translateY(30px);-webkit-transition:opacity .1s linear,clip 0s .3s,-webkit-transform .1s linear;transition:opacity .1s linear,clip 0s .3s,-webkit-transform .1s linear;transition:transform .1s linear,opacity .1s linear,clip 0s .3s;transition:transform .1s linear,opacity .1s linear,clip 0s .3s,-webkit-transform .1s linear;clip:rect(0,0,0,0);opacity:0;position:absolute;margin-left:.5em;-webkit-box-shadow:0 6px 18px rgba(0,0,0,.19),0 2px 6px rgba(0,0,0,.23);box-shadow:0 6px 18px rgba(0,0,0,.19),0 2px 6px rgba(0,0,0,.23);-webkit-transition-delay:.4s;transition-delay:.4s}.cp.cpe1 .dpt-selected .csform .actions_inserts>li>ul li a{border-right:0!important}.cp.cpe1 .dpt-selected .csform .actions_inserts>li>ul li:first-child:before{border-width:.375rem;border-style:inset inset solid;content:"";display:block;height:0;width:0;border-color:transparent transparent #3385ca;position:absolute;top:-.71rem;left:.9375rem}.cp.cpe1 .dpt-selected .csform .actions_inserts>li>ul li:first-child:hover:before{border-color:transparent transparent #0a5ea4}.cp.cpe1 .dpt-selected .csform .actions_inserts>li>ul:after{content:"";position:absolute;z-index:-1;left:0;top:-25px;height:25px;width:100%;-webkit-transition:all .3s cubic-bezier(.55,0,.1,1);transition:all .3s cubic-bezier(.55,0,.1,1)}.cp.cpe1 .dpt-selected .csform .actions_inserts>li:hover>ul{-webkit-transform:translateY(7px);transform:translateY(7px);-webkit-transition:opacity .4s linear,clip 0s .2s,-webkit-transform .4s linear;transition:opacity .4s linear,clip 0s .2s,-webkit-transform .4s linear;transition:transform .4s linear,opacity .4s linear,clip 0s .2s;transition:transform .4s linear,opacity .4s linear,clip 0s .2s,-webkit-transform .4s linear;opacity:1;clip:rect(-100px,2000px,2000px,-100px)}.cp.cpe1 .dpt-selected .csform .actions_inserts>li>a span{display:none}.cp.cpe1 .cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-salvar,.cp.cpe1 .dpt-selected .csform .actions_inserts>li>a.btn-excluir,.cp.cpe1 .dpt-selected .csform .actions_inserts>li>a.btn-salvar,.cp.cpe1_old_apagar .cp.cpe1 .dpt-selected .csform .actions_inserts>li>a.btn-salvar{padding-left:0;min-width:1em}.cp.cpe1 .cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-salvar:before,.cp.cpe1 .dpt-selected .csform .actions_inserts>li>a.btn-excluir:before,.cp.cpe1 .dpt-selected .csform .actions_inserts>li>a.btn-salvar:before,.cp.cpe1_old_apagar .cp.cpe1 .dpt-selected .csform .actions_inserts>li>a.btn-salvar:before{width:100%;margin:0}.cp.cpe1 .dpt-selected .csform .actions_inserts>li.add_in,.cp.cpe1 .dpt-selected .csform .actions_inserts>li.add_next,.cp.cpe1 .dpt-selected .csform .actions_inserts>li.add_prior{position:static}.cp.cpe1 .dpt-selected .csform .actions_inserts>li.add_in>ul{left:1em!important;right:1em!important;margin-left:0}.cp.cpe1 .dpt-selected .csform .actions_inserts>li.add_in>ul li:first-child:before{left:37%}.cp.cpe1 .dpt-selected .csform .actions_inserts>li.add_next>ul{left:0!important;right:1em!important}.cp.cpe1 .dpt-selected .csform .actions_inserts>li.add_prior>ul{left:1em!important;right:0!important;margin-left:0;margin-right:.5em}.cp.cpe1 .dpt-selected .csform .actions_inserts>li.add_prior>ul li:first-child:before{right:42%;left:auto}.cp.cpe1 .dpt-selected .csform .actions_inserts>li.menu_excluir>ul{left:10%!important;right:0!important;margin-left:0;margin-right:.5em}.cp.cpe1 .dpt-selected .csform .actions_inserts>li.menu_excluir>ul li:first-child:before{right:0;left:auto}}@media only screen and (max-width:575.98px){.cp .cp-linha-vigencias>li{height:1px}.cp .cp-linha-vigencias>li .circle{width:8px;height:8px;margin:-4px auto 0}.cp .cp-linha-vigencias>li>a{font-size:.75rem}.cp .cp-linha-vigencias>li:nth-child(2n)>a{margin-top:4px}.cp .cp-linha-vigencias>li:nth-child(odd)>a{margin-bottom:4px}.cp .cp-linha-vigencias>li ul a{line-height:1.3rem;font-size:.7rem;background:#fff}.cp .cp-linha-vigencias>li.active .circle{width:14px;height:14px;margin:-7px auto 0}.cp .cp-linha-vigencias>li.active:not(:last-child)>a{margin-bottom:15px}.cp .cp-linha-vigencias>li.active:first-child>a,.cp .cp-linha-vigencias>li.active:last-child>a{margin-bottom:10px}}@media print{.button,.cp-linha-vigencias,.cp .vigencias,.dne,.menu-icon,.tipo-vigencias,.toggle-topbar{display:none!important}#btn_font_mais,#btn_font_menos,#btn_impressao{display:none}.container{width:100%}} \ No newline at end of file diff --git a/sapl/static/sapl/frontend/css/compilacao.90ba9ac3.css.gz b/sapl/static/sapl/frontend/css/compilacao.90ba9ac3.css.gz new file mode 100644 index 000000000..8d6ef9763 Binary files /dev/null and b/sapl/static/sapl/frontend/css/compilacao.90ba9ac3.css.gz differ diff --git a/sapl/static/sapl/frontend/css/compilacao.eff62463.css b/sapl/static/sapl/frontend/css/compilacao.eff62463.css deleted file mode 100644 index 96be5dad7..000000000 --- a/sapl/static/sapl/frontend/css/compilacao.eff62463.css +++ /dev/null @@ -1 +0,0 @@ -a:link:after,a:visited:after{content:""}.test_import:nth-child(2n){background-color:#ccc}#wait_message{display:block;position:fixed;top:0;bottom:0;left:0;right:0;background-color:hsla(0,0%,86.3%,.75);z-index:99}#wait_message #msg{position:relative;margin:20% auto;padding:1.2em 2em;max-width:600px;text-align:center;font-size:1.5em;color:#677;border:1px solid #eee;background-color:#fff!important;-webkit-box-shadow:0 1px 2px #999;box-shadow:0 1px 2px #999}.text-center{text-align:center}.cp-notify{z-index:10000;position:fixed;top:2em;left:50%;min-width:600px;-webkit-transform:translate(-50%);transform:translate(-50%);opacity:.97}.cp-notify,.cp-notify.hide{-webkit-transition:all .4s ease;transition:all .4s ease}.cp-notify.hide{opacity:0;top:-1000px;display:block!important}.cp-notify .message{padding:1em;border:2px solid rgba(0,0,0,.1);border-radius:4px;color:rgba(0,0,0,.6);line-height:1em;font-size:1.3em;text-align:center;-webkit-box-shadow:0 0 100px rgba(0,0,0,.2);box-shadow:0 0 100px rgba(0,0,0,.2)}.cp .vigencia-active{margin-top:30px;display:block}.cp .cp-linha-vigencias{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;list-style:none;margin:4rem 0 3rem;padding:0;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.cp .cp-linha-vigencias ul{list-style:none;margin:0;padding:0}.cp .cp-linha-vigencias>li{display:-webkit-box;display:-ms-flexbox;display:flex;position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;line-height:0;background:#000;height:2px;text-align:center;max-width:4rem}.cp .cp-linha-vigencias>li .circle{display:block;width:10px;line-height:0;background:#000;height:10px;margin:-5px auto 0;border-radius:50%}.cp .cp-linha-vigencias>li>a{position:absolute;white-space:nowrap;line-height:1rem;text-align:center}.cp .cp-linha-vigencias>li:nth-child(2n)>a{top:100%;margin-top:5px}.cp .cp-linha-vigencias>li:nth-child(odd)>a{bottom:100%;margin-bottom:5px}.cp .cp-linha-vigencias>li ul{z-index:1;position:absolute;display:none;background:#fff;margin:30px 0;border:1px solid #aaa;-webkit-box-shadow:0 0 10px #aaa;box-shadow:0 0 10px #aaa;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.cp .cp-linha-vigencias>li ul:before{content:" ";width:2px;height:30px;position:absolute;display:block;background-color:#aaa;bottom:100%;left:50%;margin-left:-1px}.cp .cp-linha-vigencias>li ul li{text-align:left}.cp .cp-linha-vigencias>li ul a{display:block;white-space:nowrap;line-height:2rem;padding:0 10px;font-size:1rem}.cp .cp-linha-vigencias>li ul a:hover{background:#eee}.cp .cp-linha-vigencias>li.active .circle{display:block;width:20px;line-height:0;background:#aaa;height:20px;margin:-10px auto 0}.cp .cp-linha-vigencias>li.active:not(:last-child)>a{-webkit-transform:rotate(-90deg);transform:rotate(-90deg);margin-bottom:25px;font-weight:700}.cp .cp-linha-vigencias>li.active:first-child>a,.cp .cp-linha-vigencias>li.active:last-child>a{-webkit-transform:rotate(0deg);transform:rotate(0deg);margin-bottom:15px;font-weight:700}.cp .cp-linha-vigencias>li.active>a{margin-bottom:5px}.cp .cp-linha-vigencias>li.active:nth-child(2n)>a{bottom:100%;top:auto}.cp .cp-linha-vigencias>li.active ul{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.cp .cp-linha-vigencias>li.active ul li{text-align:left;width:100%}.cp .cp-vigencias .nav-link{padding:.5rem}.cp .cp-vigencias .dropdown-toggle:after{zoom:.8;margin:0}.cp .cp-vigencias .dropdown-menu{margin-left:.5rem}.cp .cp-vigencias .dropdown-item{padding:0}.cp .cp-vigencias .dropdown-item a{line-height:1;padding:.7rem}.cp .desativado .dpt-link,.cp .desativado .dpt-link *,.cp .desativado .dtxt,.cp .desativado .dtxt *,.cp .dpt .dptt>a.desativado .dpt-link,.cp .dpt .dptt>a.desativado .dpt-link *,.cp .dpt .dptt>a.desativado .dtxt,.cp .dpt .dptt>a.desativado .dtxt *{text-decoration:line-through;color:#999!important}.cp .desativado .dpt-link * table,.cp .desativado .dpt-link * table td,.cp .desativado .dpt-link table,.cp .desativado .dpt-link table td,.cp .desativado .dtxt * table,.cp .desativado .dtxt * table td,.cp .desativado .dtxt table,.cp .desativado .dtxt table td,.cp .dpt .dptt>a.desativado .dpt-link * table,.cp .dpt .dptt>a.desativado .dpt-link * table td,.cp .dpt .dptt>a.desativado .dpt-link table,.cp .dpt .dptt>a.desativado .dpt-link table td,.cp .dpt .dptt>a.desativado .dtxt * table,.cp .dpt .dptt>a.desativado .dtxt * table td,.cp .dpt .dptt>a.desativado .dtxt table,.cp .dpt .dptt>a.desativado .dtxt table td{border:1px dotted #ccc}.cp a{text-decoration:none;cursor:pointer}.cp .diff .desativado,.cp .diff .desativado *,.cp .diff .dpt .dptt>a.desativado,.cp .diff .dpt .dptt>a.desativado *,.cp .dpt .diff .dptt>a.desativado,.cp .dpt .diff .dptt>a.desativado *{text-decoration:line-through;color:#ddd!important;font-size:90%}.cp .diff .added{color:#04de2c}.cp .dpt{font-size:1em;position:relative}.cp .dpt.indent{padding-left:1em}.cp .dpt .ementa{padding:2em 0 2em 35%;font-weight:700}.cp .dpt .anexo,.cp .dpt .capitulo,.cp .dpt .disp_finais,.cp .dpt .disp_gerais,.cp .dpt .disp_preliminares,.cp .dpt .disp_transitorias,.cp .dpt .itemsecao,.cp .dpt .livro,.cp .dpt .parte,.cp .dpt .secao,.cp .dpt .subsecao,.cp .dpt .titulo,.cp .dpt .titulo_generico{text-align:center;margin-bottom:1em;font-size:1.5em;margin-top:3em;font-weight:700;font-variant:small-caps}.cp .dpt .titulo{margin-top:2em}.cp .dpt .capitulo{margin-top:1.5em;font-size:1.15em}.cp .dpt .secao{margin-top:1.2em;margin-bottom:.7em;font-weight:700;font-size:1.15em}.cp .dpt .itemsecao,.cp .dpt .subsecao{margin-top:1em;margin-bottom:.6em;font-weight:700;font-size:1.15em}.cp .dpt .artigo{font-size:1.15em;float:left}.cp .dpt .artigo .dptt{position:relative}.cp .dpt .caput{margin-top:.3333em;font-size:1.15em}.cp .dpt .paragrafo{font-size:1.1em;margin-top:.2222em}.cp .dpt .inciso{font-size:1.1em;margin-top:.1667em}.cp .dpt .alinea,.cp .dpt .item{font-size:1em;margin-top:2px}.cp .dpt .assinatura,.cp .dpt .fecho_lei{margin-top:.6em;font-size:1.15em}.cp .dpt .page-break{page-break-before:always}.cp .dpt .bloco_alteracao{padding-left:10%;font-style:italic;color:#018}.cp .dpt .bloco_alteracao a{text-decoration:underline}.cp .dpt .bloco_alteracao a,.cp .dpt .bloco_alteracao table,.cp .dpt .bloco_alteracao table td{color:#018!important}.cp .dpt .bloco_alteracao .desativado,.cp .dpt .bloco_alteracao .desativado a,.cp .dpt .bloco_alteracao .desativado table,.cp .dpt .bloco_alteracao .desativado table td,.cp .dpt .bloco_alteracao .dptt>a.desativado{text-decoration:line-through;color:#999!important}.cp .dpt .card-header{font-size:1.7rem}.cp .dpt .dn{font-weight:400;position:relative;font-size:80%}.cp .dpt .dn p,.cp .dpt .dn ul{font-weight:400;margin:0 0 0 0;list-style:none;padding:0}.cp .dpt .dn .dnl{display:block;text-align:left!important}.cp .dpt .dn .dnl *{display:inline}.cp .dpt .dn .dnl .bullet{padding:0 .333em;display:inline-block}.cp .dpt .dn .dnl .dnli{min-height:2.5em}.cp .dpt .dn .dnl .dnli:hover ul{font-size:1rem;clip:auto;opacity:1;background:hsla(0,0%,90.2%,.9)}.cp .dpt .dn .dnl .dnli:hover ul,.cp .dpt .dn .dnl .dnli ul{-webkit-transition:opacity .5s linear,clip 0s .3s;transition:opacity .5s linear,clip 0s .3s}.cp .dpt .dn .dnl .dnli ul{clip:rect(0,0,0,0);opacity:0;position:absolute;background:transparent;right:0;padding:.2em .5em 0 .5em;border:1px solid #c7e3d3;border-top:0;font-size:1.5rem}.cp .dpt .dn .dnl .dnli ul li{display:table-cell;color:#aaa}.cp .dpt .dn .dnl .dnli ul li:hover{color:#787}.cp .dpt .dn .dnl .dnli ul li .nowner,.cp .dpt .dn .dnl .dnli ul li:hover a{color:#27ae60!important}.cp .dpt .dn .dnl .dnli .ntitulo{font-size:.8rem;font-weight:700;color:#03a203;text-decoration:none}.cp .dpt .dn .dnl .dnli .ntitulo a{color:#294!important}.cp .dpt .dn .dnl .dnli .ntexto{font-variant:normal;font-size:.8rem;color:#018801}.cp .dpt .dn .dnl .dnli .ntexto a{color:#03a203!important}.cp .dpt .dn .dnl:hover,.cp .dpt .dn .dnl:hover *{display:block}.cp .dpt .dn .dnl:hover>.bullet{display:none}.cp .dpt .dn .dnl:hover .dnli{margin-top:.5em;border-top:1px solid #c7e3d3}.cp .dpt .dptt{clear:left}.cp .dpt .dptt>a{color:#000}.cp .dpt .dptt>a.nota-alteracao{color:#02baf2;font-size:.75em}.cp .dpt .dptt>a.nota-alteracao:hover{text-decoration:underline}.cp .dpt .dptt .dne{position:absolute;display:block;right:0;left:0;top:0;height:0;-webkit-transform:scaleX(0);transform:scaleX(0);-webkit-transform-origin:right;transform-origin:right;-webkit-transition:all .3s ease;transition:all .3s ease;border-top:1px solid #2980b9}.cp .dpt .dptt .dne ul.btns-action{list-style:none;padding:0;position:absolute;right:0;background-color:#2980b9}.cp .dpt .dptt .dne ul.btns-action li{float:left}.cp .dpt .dptt .dne ul.btns-action li:hover{background-color:rgba(0,0,0,.1)}.cp .dpt .dptt .dne ul.btns-action li a{color:#fff;padding:.15em 1em 0;display:inline-block}.cp .dpt .dptt .dne-nota{position:relative;-webkit-transform:scaleX(1);transform:scaleX(1);height:auto;border-top:0}.cp .dpt .dptt .dne-nota ul.btns-action{display:none}.cp .dpt .dptt .dne-nota .dne-form{margin:1em -2em 0;text-align:left;font-size:1rem}.cp .dpt .dptt:hover .dne{height:.1667rem;-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transition-delay:1s;transition-delay:1s}.cp .dpt .dptt:hover .dne-nota{height:auto;-webkit-transition-delay:0s;transition-delay:0s}.cp .tipo-vigencias{margin-bottom:-6px;opacity:.8;list-style:none;position:fixed;bottom:0;left:50%;-webkit-transform:translate(-50%);transform:translate(-50%);margin:0;padding:0;z-index:1000;-webkit-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.cp .tipo-vigencias div a{color:#fff}.cp .tipo-vigencias:hover,.cp:hover{opacity:1}.cp .revogado{color:#800}.cp .revogado .dpt-link{color:#999!important}.cp .omissis a{text-decoration:none!important}.cp-print .cp-linha-vigencias{display:none!important}.cp.cpe .desativado,.cp.cpe .dpt .dptt>a.desativado{text-decoration:line-through;color:#999!important}.cp.cpe .desativado table,.cp.cpe .desativado table td,.cp.cpe .dpt .dptt>a.desativado table,.cp.cpe .dpt .dptt>a.desativado table td{border:1px dotted #ccc}.cp.cpe a.nota-alteracao{color:#02baf2!important;font-size:.8rem}.cp.cpe .btn-sm{line-height:1rem}.cp.cpe .btn-outline-primary{background-color:#fff}.cp.cpe .btn-outline-primary:hover{background-color:#02baf2}.cp.cpe .dpt{display:block}.cp.cpe .dpt>.dpt-actions-fixed{position:absolute;right:-1em;top:-.8em;z-index:3;opacity:0}.cp.cpe .dpt>.dpt-actions-fixed.bottom{top:auto;bottom:3px;right:2px}.cp.cpe .dpt>.dpt-actions-fixed .activate{display:none}.cp.cpe .dpt>.dpt-actions-fixed .deactivate{display:inline}.cp.cpe .dpt>.dpt-actions-fixed .btn-dpt-edit.btn-outline-primary{color:#333}.cp.cpe .dpt>.dpt-actions-fixed .btn-dpt-edit.btn-outline-primary:hover{color:#fff;background-color:#02baf2}.cp.cpe .dpt>.dpt-actions,.cp.cpe .dpt>.dpt-actions-bottom{display:none}.cp.cpe .dpt>.dpt-text{cursor:text;min-height:30px;border:1px solid transparent}.cp.cpe .dpt>.dpt-text.hover-fixed,.cp.cpe .dpt>.dpt-text:hover{background-color:rgba(0,0,0,.01);color:#2980b9;border:1px solid #eee;-webkit-transition:color .3s ease;transition:color .3s ease}.cp.cpe .dpt>.dpt-text.artigo{float:none}.cp.cpe .dpt>.dpt-text a.link-rotulo{color:#000}.cp.cpe .dpt:hover>.dpt-actions-fixed{opacity:1}.cp.cpe .dpt:hover>.dpt-actions-fixed:hover~.dpt-text{background-color:rgba(0,0,0,.01);color:#2980b9;border:1px solid #eee;-webkit-transition:color .3s ease;transition:color .3s ease}.cp.cpe .dpt .semtexto{font-weight:700;color:#9aaed6}.cp.cpe .dpt .semtexto:hover{color:#5f76a4}.cp.cpe .dpt-alts{margin:0;margin-bottom:1em;padding:0;background-color:transparent;min-height:100px;border:2px dashed #fff}.cp.cpe .dpt-alts:hover{border-color:#d9ddde}.cp.cpe .dpt-alts:empty{border-color:#ddd}.cp.cpe .dpt-alts.drag{width:100%!important;border-color:#d9ddde}.cp.cpe .dpt-alts.drag .dpt{-webkit-transition-duration:0s!important;transition-duration:0s!important}.cp.cpe .dpt-alts .dpt{width:100%!important;-webkit-box-shadow:0 -1px 0 #e5e5e5,0 0 2px rgba(0,0,0,.12),0 2px 4px rgba(0,0,0,.24);box-shadow:0 -1px 0 #e5e5e5,0 0 2px rgba(0,0,0,.12),0 2px 4px rgba(0,0,0,.24);padding:0;margin:0;background-color:#edf0f1;height:auto!important;min-height:2em;z-index:1}.cp.cpe .dpt-alts .dpt:not(:first-child){border-top:1px solid #fff}.cp.cpe .dpt-alts .dpt>.dpt-text{padding:.3em 1em;margin-top:0;margin-bottom:0}.cp.cpe .dpt-alts .dpt>.dpt-text a.link-rotulo{text-decoration:underline}.cp.cpe .dpt-alts .dpt-selected.dpt{margin:0 -.5em}.cp.cpe .dpt-selected.dpt{width:auto!important;margin:1em -.5em;border:1px solid #ddd!important;padding:0;background-color:#fafafa;border-radius:3px;z-index:4}.cp.cpe .dpt-selected.dpt>.dpt-text{border:1px solid transparent}.cp.cpe .dpt-selected.dpt>.dpt-text:hover{border:1px solid transparent;background-color:transparent}.cp.cpe .dpt-selected.dpt>.dpt-form{margin:0 1rem}.cp.cpe .dpt-selected.dpt>.dpt-actions,.cp.cpe .dpt-selected.dpt>.dpt-actions-bottom{display:table;background-color:#e5e5e5;padding:.8rem .6rem .2rem .6rem;margin-bottom:0;width:100%}.cp.cpe .dpt-selected.dpt>.dpt-actions-bottom>.btn-action,.cp.cpe .dpt-selected.dpt>.dpt-actions>.btn-action{display:table-cell;float:none}.cp.cpe .dpt-selected.dpt>.dpt-actions-bottom .btns-excluir .btn-danger,.cp.cpe .dpt-selected.dpt>.dpt-actions .btns-excluir .btn-danger{display:inline-block;opacity:.3;color:#fff}.cp.cpe .dpt-selected.dpt>.dpt-actions-bottom .btns-excluir .btn-danger:hover,.cp.cpe .dpt-selected.dpt>.dpt-actions .btns-excluir .btn-danger:hover{opacity:1}.cp.cpe .dpt-selected.dpt>.dpt-actions-bottom{margin:0;padding-bottom:.8rem}.cp.cpe .dpt-selected .dpt-block{border-top:1px solid #e5e5e5!important;opacity:.6;-webkit-transition:opacity .4s ease;transition:opacity .4s ease}.cp.cpe .dpt-selected .dpt-block:hover{opacity:1}.cp.cpe .dpt-selected .dpt-text{opacity:.7;margin:0;padding:.7em}.cp.cpe .dpt-selected .dpt-text:hover{opacity:1;background-color:#f5f5f5}.cp.cpe .dpt-selected .dpt-alts{margin:1em}.cp.cpe .dpt-selected .dpt-alts .dpt{-webkit-box-shadow:0 0 0;box-shadow:0 0 0}.cp.cpe .dpt-selected>.dpt-actions-fixed{opacity:1;top:-15px;right:.5em}.cp.cpe .dpt-selected>.dpt-actions-fixed .activate{display:inline}.cp.cpe .dpt-selected>.dpt-actions-fixed .deactivate{display:none}.cp.cpe .dpt-selected>.dpt-actions-fixed .btn-dpt-edit{padding:0 6px;line-height:1.2rem}.cp.cpe .dpt-selected>.dpt-actions-fixed .btn-dpt-edit.btn-outline-primary,.cp.cpe .dpt-selected>.dpt-actions-fixed .btn-dpt-edit.btn-outline-primary:hover{background-color:#fad46b;border:1px solid #444}.cp.cpe .dpt-selected .btns-tipos-editor{padding:0}.cp.cpe .dpt-selected .dropdown-menu.dropdown-menu-left{right:auto!important;left:0;padding:0}.cp.cpe .dpt-selected .dropdown-menu.dropdown-menu-left:before{content:"";position:absolute;background-color:transparent;width:100%;height:3px;top:-3px;display:inline-block}.cp.cpe .dpt-selected .dropdown-menu li{line-height:1}.cp.cpe .dpt-selected .dropdown-menu li a{display:block;line-height:1.5rem;padding:0 .5rem;white-space:nowrap}.cp.cpe .dpt-selected .dropdown-menu li a:hover{background-color:#f0f0f0}.cp.cpe .dpt-selected .dropdown-menu li:not(:last-child){border-bottom:1px solid #f0f0f0}.cp.cpe .dpt-selected .btn-group .radius-right{border-bottom-right-radius:.2rem!important;border-top-right-radius:.2rem!important}.cp.cpe .dpt-selected:hover>.dpt-actions-fixed{opacity:1}.cp.cpe1_old_apagar{margin-bottom:15em}.cp.cpe1_old_apagar .desativado,.cp.cpe1_old_apagar .desativado *,.cp.cpe1_old_apagar .dpt .dptt>a.desativado,.cp.cpe1_old_apagar .dpt .dptt>a.desativado *{text-decoration:line-through;color:#999!important}.cp.cpe1_old_apagar .desativado * table,.cp.cpe1_old_apagar .desativado * table td,.cp.cpe1_old_apagar .desativado table,.cp.cpe1_old_apagar .desativado table td,.cp.cpe1_old_apagar .dpt .dptt>a.desativado * table,.cp.cpe1_old_apagar .dpt .dptt>a.desativado * table td,.cp.cpe1_old_apagar .dpt .dptt>a.desativado table,.cp.cpe1_old_apagar .dpt .dptt>a.desativado table td{border:1px dotted #ccc}.cp.cpe1_old_apagar a{text-decoration:none;cursor:pointer}.cp.cpe1_old_apagar .dpt{position:relative;display:block}.cp.cpe1_old_apagar .dpt .semtexto{font-weight:700;color:#bfd1f6}.cp.cpe1_old_apagar .dpt .artigo{float:none}.cp.cpe1_old_apagar .dpt .caput{margin-top:0}.cp.cpe1_old_apagar .dpt-selected .csform .dpt>.actions_left,.cp.cpe1_old_apagar .dpt>.actions_right{color:#fff;right:0;position:absolute;opacity:0;-webkit-transition:all .4s ease-in-out;transition:all .4s ease-in-out;z-index:1000}.cp.cpe1_old_apagar .dpt-selected .csform .dpt>.actions_left a.btn-bloco,.cp.cpe1_old_apagar .dpt>.actions_right a.btn-bloco{background-color:#3498db;color:#fff!important;padding:8px 18px 6px;display:inline-block;line-height:1;float:right}.cp.cpe1_old_apagar .dpt-selected .csform .dpt>.actions_left a.btn-bloco:hover,.cp.cpe1_old_apagar .dpt>.actions_right a.btn-bloco:hover{opacity:1;background-image:-webkit-gradient(linear,left top,left bottom,from(#1c81c4),to(#0b6dad));background-image:linear-gradient(180deg,#1c81c4,#0b6dad)}.cp.cpe1_old_apagar .dpt-selected .csform .dpt:hover>.actions_left,.cp.cpe1_old_apagar .dpt:hover>.actions_right{opacity:1}.cp.cpe1_old_apagar .dpt .bloco{display:block;clear:both}.cp.cpe1_old_apagar .dpt .bloco :hover{color:#27ae60}.cp.cpe1_old_apagar .dpt .bloco .de{cursor:pointer}.cp.cpe1_old_apagar .dpt .articulacao{border-top:2px solid #e5e5e5;margin:2em 0}.cp.cpe1_old_apagar .dpt .bloco_alteracao{margin:1em 0;padding:0;background-color:transparent;min-height:100px;border:2px dashed #fff}.cp.cpe1_old_apagar .dpt .bloco_alteracao:hover{border-color:#d9ddde}.cp.cpe1_old_apagar .dpt .bloco_alteracao.drag{width:100%!important;border-color:#d9ddde}.cp.cpe1_old_apagar .dpt .bloco_alteracao.drag .dpt{-webkit-transition-duration:0s!important;transition-duration:0s!important}.cp.cpe1_old_apagar .dpt .bloco_alteracao .dpt{width:100%!important;-webkit-box-shadow:0 -1px 0 #e5e5e5,0 0 2px rgba(0,0,0,.12),0 2px 4px rgba(0,0,0,.24);box-shadow:0 -1px 0 #e5e5e5,0 0 2px rgba(0,0,0,.12),0 2px 4px rgba(0,0,0,.24);padding:.3em 1em;margin:0;background-color:#edf0f1;z-index:1}.cp.cpe1_old_apagar .dpt .bloco_alteracao .dpt:not(:first-child){border-top:1px solid #fff}.cp.cpe1_old_apagar .dpt .bloco_alteracao .dpt.ui-draggable div{cursor:pointer}.cp.cpe1_old_apagar .dpt .bloco_alteracao .dpt.dpt-comp-selected{-webkit-transition:all .3s ease;transition:all .3s ease;width:auto!important;margin:2em -3.7em;-webkit-box-shadow:0 0 6px rgba(0,0,0,.16),0 6px 12px rgba(0,0,0,.32);box-shadow:0 0 6px rgba(0,0,0,.16),0 6px 12px rgba(0,0,0,.32)}.cp.cpe1_old_apagar .dpt-selected{font-size:1em;border:0 solid #ccc;margin:1em -1.8em 1em -1.8em;padding:2.2em 2.2em 1.6em 2.2em;-webkit-box-shadow:-4px 15px 15px rgba(0,0,0,.1),0 6px 6px rgba(0,0,0,.23);box-shadow:-4px 15px 15px rgba(0,0,0,.1),0 6px 6px rgba(0,0,0,.23);background-image:-webkit-gradient(linear,left top,left bottom,from(#eaeaee),to(#ddd));background-image:linear-gradient(180deg,#eaeaee,#ddd)}.cp.cpe1_old_apagar .dpt-selected ul{list-style:none;margin:0;padding:0}.cp.cpe1_old_apagar .dpt-selected .semtexto{color:#999}.cp.cpe1_old_apagar .dpt-selected .bloco{opacity:.5}.cp.cpe1_old_apagar .dpt-selected .bloco:hover{opacity:1}.cp.cpe1_old_apagar .dpt-selected .bloco a:hover{background:transparent}.cp.cpe1_old_apagar .dpt-selected>.bloco{opacity:1;margin:1em}.cp.cpe1_old_apagar .dpt-selected .bloco_alteracao{margin:0;padding:1em;border:0 transparent;background-image:-webkit-gradient(linear,left top,left bottom,from(#eaeaee),to(#ddd));background-image:linear-gradient(180deg,#eaeaee,#ddd)}.cp.cpe1_old_apagar .dpt-selected .bloco_alteracao:hover{border-color:transparent}.cp.cpe1_old_apagar .dpt-selected .bloco_alteracao.drag{width:100%!important}.cp.cpe1_old_apagar .dpt-selected .bloco_alteracao.drag .dpt{-webkit-transition-duration:0s!important;transition-duration:0s!important}.cp.cpe1_old_apagar .dpt-selected .bloco_alteracao .dpt{width:auto!important;-webkit-transition:all .3s ease;transition:all .3s ease;background-color:#fff}.cp.cpe1_old_apagar .dpt-selected .bloco_alteracao .dpt:not(:first-child){border-top:0 solid #fff}.cp.cpe1_old_apagar .dpt-selected>.dpt{padding:0}.cp.cpe1_old_apagar .dpt-selected>.dpt:last-child{padding-bottom:1em}.cp.cpe1_old_apagar .dpt-selected .csform .dpt-selected>.actions_left a.btn-bloco,.cp.cpe1_old_apagar .dpt-selected>.actions_right a.btn-bloco{display:none}.cp.cpe1_old_apagar .dpt-selected .csform{display:block;clear:both;z-index:9;position:static}.cp.cpe1_old_apagar .dpt-selected .csform .btns-action{-webkit-animation:fadeIn 1s ease-in-out;-moz-animation:fadeIn 1s ease-in-out;-o-animation:fadeIn 1s ease-in-out;opacity:1;position:absolute;display:table;-webkit-transition:all .4s ease-in-out;transition:all .4s ease-in-out}.cp.cpe1_old_apagar .dpt-selected .csform .btns-action a{color:#16407c;display:block;background:transparent;vertical-align:middle;text-align:center;font-weight:400;text-shadow:0 0 10px rgba(0,0,0,.3);padding:.33em .4em}.cp.cpe1_old_apagar .dpt-selected .csform .btns-action>li{position:relative;display:table-cell;vertical-align:top}.cp.cpe1_old_apagar .dpt-selected .csform .btns-action>li:hover{background-color:hsla(0,0%,100%,.5)}.cp.cpe1_old_apagar .dpt-selected .csform .btns-action>li:hover>a{text-shadow:0 0 5px #777;color:#0a5}.cp.cpe1_old_apagar .dpt-selected .csform .label_status{position:absolute;bottom:0;right:0;color:#889;padding:.3em;font-size:80%;text-align:right;z-index:15;display:table}.cp.cpe1_old_apagar .dpt-selected .csform .label_status li{display:table-cell;padding:0 .5em}.cp.cpe1_old_apagar .dpt-selected .csform .actions_parents{z-index:11;top:0;left:0}.cp.cpe1_old_apagar .dpt-selected .csform .actions_parents a{padding:.62em}.cp.cpe1_old_apagar .dpt-selected .csform .actions_parents div,.cp.cpe1_old_apagar .dpt-selected .csform .actions_parents li{font-size:80%;display:table-cell;vertical-align:middle;border-right:1px solid #ccc}.cp.cpe1_old_apagar .dpt-selected .csform .actions_parents div{padding:0 .4em;font-stretch:condensed;font-variant:small-caps;font-weight:700;text-shadow:0 0 10px #fff}.cp.cpe1_old_apagar .dpt-selected .csform .actions_parents>li:hover a{color:#16407c;font-weight:400}.cp.cpe1_old_apagar .dpt-selected .csform .actions_bottom,.cp.cpe1_old_apagar .dpt-selected .csform .actions_top{top:0;right:0}.cp.cpe1_old_apagar .dpt-selected .csform .actions_bottom a,.cp.cpe1_old_apagar .dpt-selected .csform .actions_top a{padding-right:1em;padding-left:1em}.cp.cpe1_old_apagar .dpt-selected .csform .actions_bottom li,.cp.cpe1_old_apagar .dpt-selected .csform .actions_top li{display:table-cell;vertical-align:middle;border-left:1px solid #ccc}.cp.cpe1_old_apagar .dpt-selected .csform .actions_bottom{top:auto;left:0;bottom:0;display:inline-block;border-top:1px solid #ccc}.cp.cpe1_old_apagar .dpt-selected .csform .actions_bottom a{padding:0 .4em}.cp.cpe1_old_apagar .dpt-selected .csform .actions_bottom li{border:0;border-right:1px solid #ccc}.cp.cpe1_old_apagar .dpt-selected .csform .actions_left,.cp.cpe1_old_apagar .dpt-selected .csform .actions_right{top:2.2em;right:0;bottom:0;display:block}.cp.cpe1_old_apagar .dpt-selected .csform .actions_left li,.cp.cpe1_old_apagar .dpt-selected .csform .actions_right li{width:2.2em;display:block;border-bottom:1px solid #ccc}.cp.cpe1_old_apagar .dpt-selected .csform .actions_left li:first-child,.cp.cpe1_old_apagar .dpt-selected .csform .actions_right li:first-child{border-top:1px solid #ccc}.cp.cpe1_old_apagar .dpt-selected .csform .actions_left{right:auto;left:0}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts{background:transparent;position:relative;z-index:19;display:table;width:100%}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li{display:table-cell}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li:hover>a{background-image:-webkit-gradient(linear,left top,left bottom,from(#1c81c4),to(#0b6dad));background-image:linear-gradient(180deg,#1c81c4,#0b6dad)}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a{background-image:-webkit-gradient(linear,left top,left bottom,from(#3498db),to(#2980c9));background-image:linear-gradient(180deg,#3498db,#2980c9);border-right:1px solid #fff;padding:.2em;display:block;color:#fff;text-align:center;white-space:nowrap}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-excluir,.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-salvar{text-align:left;background:#a70808;color:#c99;padding-left:1.7em;position:relative}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-excluir:hover,.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-salvar:hover{background-color:#c70808;color:#ecc}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-excluir:before,.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-salvar:before{z-index:20;position:absolute;background:url(/static/img/icon_delete_white.png) no-repeat 50% 50%;content:"";top:0;left:0;display:block;color:#000;margin-left:.4em;height:100%;width:2em}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-salvar{background:#1f8b4d;color:#fff}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-salvar:hover{background:#2d9c5c;color:#fff}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-salvar:before{background:url(/static/img/icon_save_white.png) no-repeat 50% 50%}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a span{padding:0 .7em}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li:last-child>a{border-right:0 solid #fff}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>ul li:nth-child(2n) a{background:#3385ca}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>ul li a{border-right:1px solid #fff;display:block;color:#fff;background:#2980c9;font-size:80%;padding:.23em 1em}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>ul li a:hover{background:#0a5ea4}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.add_prior{table-layout:fixed}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.add_prior>ul{-webkit-transform:translateY(30px);transform:translateY(30px);-webkit-transition:opacity .1s linear,clip 0s .3s,-webkit-transform .1s linear;transition:opacity .1s linear,clip 0s .3s,-webkit-transform .1s linear;transition:transform .1s linear,opacity .1s linear,clip 0s .3s;transition:transform .1s linear,opacity .1s linear,clip 0s .3s,-webkit-transform .1s linear;clip:rect(0,0,0,0);opacity:0;position:absolute;margin-left:.5em;-webkit-box-shadow:0 6px 18px rgba(0,0,0,.19),0 2px 6px rgba(0,0,0,.23);box-shadow:0 6px 18px rgba(0,0,0,.19),0 2px 6px rgba(0,0,0,.23);-webkit-transition-delay:.4s;transition-delay:.4s}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.add_prior>ul li a{border-right:0!important}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.add_prior>ul li:first-child:before{border-width:.375rem;border-style:inset inset solid;content:"";display:block;height:0;width:0;border-color:transparent transparent #3385ca;position:absolute;top:-.71rem;left:.9375rem}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.add_prior>ul li:first-child:hover:before{border-color:transparent transparent #0a5ea4}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.add_prior>ul:after{content:"";position:absolute;z-index:-1;left:0;top:-25px;height:25px;width:100%;-webkit-transition:all .3s cubic-bezier(.55,0,.1,1);transition:all .3s cubic-bezier(.55,0,.1,1)}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.add_prior:hover>ul{-webkit-transform:translateY(7px);transform:translateY(7px);-webkit-transition:opacity .4s linear,clip 0s .2s,-webkit-transform .4s linear;transition:opacity .4s linear,clip 0s .2s,-webkit-transform .4s linear;transition:transform .4s linear,opacity .4s linear,clip 0s .2s;transition:transform .4s linear,opacity .4s linear,clip 0s .2s,-webkit-transform .4s linear;opacity:1;clip:rect(-100px,2000px,2000px,-100px)}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir{display:block;position:static}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir>ul{-webkit-transform:translateY(30px);transform:translateY(30px);-webkit-transition:opacity .1s linear,clip 0s .3s,-webkit-transform .1s linear;transition:opacity .1s linear,clip 0s .3s,-webkit-transform .1s linear;transition:transform .1s linear,opacity .1s linear,clip 0s .3s;transition:transform .1s linear,opacity .1s linear,clip 0s .3s,-webkit-transform .1s linear;clip:rect(0,0,0,0);opacity:0;position:absolute;margin-left:.5em;-webkit-box-shadow:0 6px 18px rgba(0,0,0,.19),0 2px 6px rgba(0,0,0,.23);box-shadow:0 6px 18px rgba(0,0,0,.19),0 2px 6px rgba(0,0,0,.23);-webkit-transition-delay:.4s;transition-delay:.4s}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir>ul li a{border-right:0!important}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir>ul li:first-child:before{border-width:.375rem;border-style:inset inset solid;content:"";display:block;height:0;width:0;border-color:transparent transparent #3385ca;position:absolute;top:-.71rem;left:.9375rem}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir>ul li:first-child:hover:before{border-color:transparent transparent #0a5ea4}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir>ul:after{content:"";position:absolute;z-index:-1;left:0;top:-25px;height:25px;width:100%;-webkit-transition:all .3s cubic-bezier(.55,0,.1,1);transition:all .3s cubic-bezier(.55,0,.1,1)}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir:hover>ul{-webkit-transform:translateY(7px);transform:translateY(7px);-webkit-transition:opacity .4s linear,clip 0s .2s,-webkit-transform .4s linear;transition:opacity .4s linear,clip 0s .2s,-webkit-transform .4s linear;transition:transform .4s linear,opacity .4s linear,clip 0s .2s;transition:transform .4s linear,opacity .4s linear,clip 0s .2s,-webkit-transform .4s linear;opacity:1;clip:rect(-100px,2000px,2000px,-100px)}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir>ul{right:.5em}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir>ul li a{background-color:#a70808}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir>ul li a:hover{background:#c70808}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir>ul li:first-child:before{border-color:transparent transparent #a70808;right:10%;left:auto}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir>ul li:first-child:hover:before{border-color:transparent transparent #c70808}.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante,.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante_fixo{z-index:2000}.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante>li>ul,.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante_fixo>li>ul{-webkit-transform:translateY(30px);transform:translateY(30px);-webkit-transition:opacity .1s linear,clip 0s .3s,-webkit-transform .1s linear;transition:opacity .1s linear,clip 0s .3s,-webkit-transform .1s linear;transition:transform .1s linear,opacity .1s linear,clip 0s .3s;transition:transform .1s linear,opacity .1s linear,clip 0s .3s,-webkit-transform .1s linear;clip:rect(0,0,0,0);opacity:0;position:absolute;margin-left:.5em;-webkit-box-shadow:0 6px 18px rgba(0,0,0,.19),0 2px 6px rgba(0,0,0,.23);box-shadow:0 6px 18px rgba(0,0,0,.19),0 2px 6px rgba(0,0,0,.23);-webkit-transition-delay:.4s;transition-delay:.4s}.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante>li>ul li a,.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante_fixo>li>ul li a{border-right:0!important}.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante>li>ul li:first-child:before,.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante_fixo>li>ul li:first-child:before{border-width:.375rem;border-style:inset inset solid;content:"";display:block;height:0;width:0;border-color:transparent transparent #3385ca;position:absolute;top:-.71rem;left:.9375rem}.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante>li>ul li:first-child:hover:before,.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante_fixo>li>ul li:first-child:hover:before{border-color:transparent transparent #0a5ea4}.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante>li>ul:after,.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante_fixo>li>ul:after{content:"";position:absolute;z-index:-1;left:0;top:-25px;height:25px;width:100%;-webkit-transition:all .3s cubic-bezier(.55,0,.1,1);transition:all .3s cubic-bezier(.55,0,.1,1)}.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante>li:hover>ul,.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante_fixo>li:hover>ul{-webkit-transform:translateY(7px);transform:translateY(7px);-webkit-transition:opacity .4s linear,clip 0s .2s,-webkit-transform .4s linear;transition:opacity .4s linear,clip 0s .2s,-webkit-transform .4s linear;transition:transform .4s linear,opacity .4s linear,clip 0s .2s;transition:transform .4s linear,opacity .4s linear,clip 0s .2s,-webkit-transform .4s linear;opacity:1;clip:rect(-100px,2000px,2000px,-100px)}.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante>li.menu_excluir>ul li:first-child:before,.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante_fixo>li.menu_excluir>ul li:first-child:before{right:auto;left:.9375rem}.cp.cpe1_old_apagar .dpt-selected .csform textarea{margin:0;resize:vertical;min-height:12.6em;border:0;font-size:120%;width:100%}.cp.cpe1_old_apagar .dpt-selected .csform textarea:focus{background:#fff}.cp.cpe1_old_apagar .dpt-selected .csform textarea::-webkit-input-placeholder{color:#c70808;opacity:.6;font-size:80%}.cp.cpe1_old_apagar .dpt-selected .csform textarea:-moz-placeholder,.cp.cpe1_old_apagar .dpt-selected .csform textarea::-moz-placeholder{color:#c70808}.cp.cpe1_old_apagar .dpt-selected .csform textarea:-ms-input-placeholder{color:#c70808;opacity:.6}.cp.cpe1_old_apagar .selected{background-color:hsla(0,0%,100%,.5)}.cp.cpe1_old_apagar .selected a:hover{color:#16407c!important;font-weight:400!important}.lista-dispositivo,.result-busca-dispositivo{padding:0 0 1em;min-height:3em}.lista-dispositivo ul,.result-busca-dispositivo ul{list-style:none;margin:0;padding:1em 0 0;-webkit-transition:all 2s linear;transition:all 2s linear;clear:both;position:relative}.lista-dispositivo ul li,.result-busca-dispositivo ul li{display:table;border-collapse:separate;border-bottom:1px solid #fff;width:100%}.lista-dispositivo ul li.ta_title,.result-busca-dispositivo ul li.ta_title{background-color:rgba(0,0,0,.15);width:100%}.lista-dispositivo ul li:last-child .itemlabel,.result-busca-dispositivo ul li:last-child .itemlabel{margin:0}.lista-dispositivo ul li .iteminput,.result-busca-dispositivo ul li .iteminput{background-color:rgba(0,0,0,.1);border-right:1px solid #fff;display:table-cell;padding:.5em;vertical-align:middle;text-align:center;position:relative}.lista-dispositivo ul li .iteminput input,.result-busca-dispositivo ul li .iteminput input{margin:0}.lista-dispositivo ul li .iteminput .flag,.result-busca-dispositivo ul li .iteminput .flag{position:absolute;top:0;left:0;right:0;line-height:1;background-color:#ccc;color:#fff;cursor:default;font-size:80%}.lista-dispositivo ul li .itemlabel,.result-busca-dispositivo ul li .itemlabel{margin:0;background-color:rgba(0,0,0,.1);display:table-cell;padding:.5em;vertical-align:middle;width:100%}.lista-dispositivo ul li .itemlabel .artigo,.result-busca-dispositivo ul li .itemlabel .artigo{float:none}.lista-dispositivo .label-tip-results,.result-busca-dispositivo .label-tip-results{background-color:rgba(0,0,0,.1);padding:0 5px;top:0;z-index:1;line-height:1.3;color:#00f;font-size:.9em}.lista-dispositivo .nomenclatura_heranca,.result-busca-dispositivo .nomenclatura_heranca{font-size:90%;color:#057dba;display:inline}.lista-dispositivo.controls-radio-checkbox{border:0}.label_vigencia{border-top:1px solid #fff;display:inline-block;color:#555}.label_vigencia span{color:grey}.cp-nav-parents .dropdown-menu{left:0;right:auto;padding:0}.cp-nav-parents .dropdown-menu:before{content:"";position:absolute;top:-11px;width:100%;height:11px}.cp-nav-parents:hover .dropdown-menu{display:block}.cp-nav-parents a.active small{color:#fff!important}.table-notificacoes tbody tr td{border-top:1px solid #fff;padding:5px;vertical-align:middle}.table-notificacoes tbody tr td ul{margin:0}.table-notificacoes tbody tr td ul li:hover{background-color:rgba(0,0,0,.1)}.btn-modal-open{float:right}.modal .modal-content .alert:only-child{margin:0}.class_color_container{background:#ddd!important}.clear{clear:both}.mce-tinymce.mce-container{border:1px solid #ccc!important;margin-right:2px}.mce-btn button:hover{background-color:rgba(0,0,0,.1)!important;text-shadow:0 0 5px #fff;-webkit-box-shadow:0 0 5px #777;box-shadow:0 0 5px #777}.mce-menu{background:#eee!important}.displaynone{display:none!important}@media only screen and (max-width:991.98px){.cp .table,.cp table{width:auto!important;white-space:normal;overflow-x:auto!important}}@media only screen and (max-width:800px){.cp .fixed{z-index:98;position:relative}.cp.cpe1 .dpt-selected{margin:1em 0}.cp.cpe1 .dpt-selected .csform .actions_parents,.cp.cpe1 .dpt-selected .csform .label_status{font-size:80%;position:static!important;display:block!important;padding:0;height:auto!important;left:0;right:auto;text-align:left}.cp.cpe1 .dpt-selected .csform .actions_parents div,.cp.cpe1 .dpt-selected .csform .actions_parents li,.cp.cpe1 .dpt-selected .csform .label_status div,.cp.cpe1 .dpt-selected .csform .label_status li{display:inline-block!important}.cp.cpe1 .dpt-selected .csform .actions_inserts>li>ul{-webkit-transform:translateY(30px);transform:translateY(30px);-webkit-transition:opacity .1s linear,clip 0s .3s,-webkit-transform .1s linear;transition:opacity .1s linear,clip 0s .3s,-webkit-transform .1s linear;transition:transform .1s linear,opacity .1s linear,clip 0s .3s;transition:transform .1s linear,opacity .1s linear,clip 0s .3s,-webkit-transform .1s linear;clip:rect(0,0,0,0);opacity:0;position:absolute;margin-left:.5em;-webkit-box-shadow:0 6px 18px rgba(0,0,0,.19),0 2px 6px rgba(0,0,0,.23);box-shadow:0 6px 18px rgba(0,0,0,.19),0 2px 6px rgba(0,0,0,.23);-webkit-transition-delay:.4s;transition-delay:.4s}.cp.cpe1 .dpt-selected .csform .actions_inserts>li>ul li a{border-right:0!important}.cp.cpe1 .dpt-selected .csform .actions_inserts>li>ul li:first-child:before{border-width:.375rem;border-style:inset inset solid;content:"";display:block;height:0;width:0;border-color:transparent transparent #3385ca;position:absolute;top:-.71rem;left:.9375rem}.cp.cpe1 .dpt-selected .csform .actions_inserts>li>ul li:first-child:hover:before{border-color:transparent transparent #0a5ea4}.cp.cpe1 .dpt-selected .csform .actions_inserts>li>ul:after{content:"";position:absolute;z-index:-1;left:0;top:-25px;height:25px;width:100%;-webkit-transition:all .3s cubic-bezier(.55,0,.1,1);transition:all .3s cubic-bezier(.55,0,.1,1)}.cp.cpe1 .dpt-selected .csform .actions_inserts>li:hover>ul{-webkit-transform:translateY(7px);transform:translateY(7px);-webkit-transition:opacity .4s linear,clip 0s .2s,-webkit-transform .4s linear;transition:opacity .4s linear,clip 0s .2s,-webkit-transform .4s linear;transition:transform .4s linear,opacity .4s linear,clip 0s .2s;transition:transform .4s linear,opacity .4s linear,clip 0s .2s,-webkit-transform .4s linear;opacity:1;clip:rect(-100px,2000px,2000px,-100px)}.cp.cpe1 .dpt-selected .csform .actions_inserts>li>a span{display:none}.cp.cpe1 .cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-salvar,.cp.cpe1 .dpt-selected .csform .actions_inserts>li>a.btn-excluir,.cp.cpe1 .dpt-selected .csform .actions_inserts>li>a.btn-salvar,.cp.cpe1_old_apagar .cp.cpe1 .dpt-selected .csform .actions_inserts>li>a.btn-salvar{padding-left:0;min-width:1em}.cp.cpe1 .cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-salvar:before,.cp.cpe1 .dpt-selected .csform .actions_inserts>li>a.btn-excluir:before,.cp.cpe1 .dpt-selected .csform .actions_inserts>li>a.btn-salvar:before,.cp.cpe1_old_apagar .cp.cpe1 .dpt-selected .csform .actions_inserts>li>a.btn-salvar:before{width:100%;margin:0}.cp.cpe1 .dpt-selected .csform .actions_inserts>li.add_in,.cp.cpe1 .dpt-selected .csform .actions_inserts>li.add_next,.cp.cpe1 .dpt-selected .csform .actions_inserts>li.add_prior{position:static}.cp.cpe1 .dpt-selected .csform .actions_inserts>li.add_in>ul{left:1em!important;right:1em!important;margin-left:0}.cp.cpe1 .dpt-selected .csform .actions_inserts>li.add_in>ul li:first-child:before{left:37%}.cp.cpe1 .dpt-selected .csform .actions_inserts>li.add_next>ul{left:0!important;right:1em!important}.cp.cpe1 .dpt-selected .csform .actions_inserts>li.add_prior>ul{left:1em!important;right:0!important;margin-left:0;margin-right:.5em}.cp.cpe1 .dpt-selected .csform .actions_inserts>li.add_prior>ul li:first-child:before{right:42%;left:auto}.cp.cpe1 .dpt-selected .csform .actions_inserts>li.menu_excluir>ul{left:10%!important;right:0!important;margin-left:0;margin-right:.5em}.cp.cpe1 .dpt-selected .csform .actions_inserts>li.menu_excluir>ul li:first-child:before{right:0;left:auto}}@media only screen and (max-width:575.98px){.cp .cp-linha-vigencias>li{height:1px}.cp .cp-linha-vigencias>li .circle{width:8px;height:8px;margin:-4px auto 0}.cp .cp-linha-vigencias>li>a{font-size:.75rem}.cp .cp-linha-vigencias>li:nth-child(2n)>a{margin-top:4px}.cp .cp-linha-vigencias>li:nth-child(odd)>a{margin-bottom:4px}.cp .cp-linha-vigencias>li ul a{line-height:1.3rem;font-size:.7rem;background:#fff}.cp .cp-linha-vigencias>li.active .circle{width:14px;height:14px;margin:-7px auto 0}.cp .cp-linha-vigencias>li.active:not(:last-child)>a{margin-bottom:15px}.cp .cp-linha-vigencias>li.active:first-child>a,.cp .cp-linha-vigencias>li.active:last-child>a{margin-bottom:10px}}@media print{.button,.cp-linha-vigencias,.cp .vigencias,.dne,.menu-icon,.tipo-vigencias,.toggle-topbar{display:none!important}#btn_font_mais,#btn_font_menos{display:none}.container{width:100%}} \ No newline at end of file diff --git a/sapl/static/sapl/frontend/css/compilacao.eff62463.css.gz b/sapl/static/sapl/frontend/css/compilacao.eff62463.css.gz deleted file mode 100644 index b251d5e36..000000000 Binary files a/sapl/static/sapl/frontend/css/compilacao.eff62463.css.gz and /dev/null differ diff --git a/sapl/static/sapl/frontend/css/global.278b5d61.css b/sapl/static/sapl/frontend/css/global.278b5d61.css deleted file mode 100644 index bf09018ac..000000000 --- a/sapl/static/sapl/frontend/css/global.278b5d61.css +++ /dev/null @@ -1 +0,0 @@ -*,:after,:before{-webkit-box-sizing:border-box;box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{font-style:normal;line-height:inherit}address,dl,ol,ul{margin-bottom:1rem}dl,ol,ul{margin-top:0}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#02baf2;text-decoration:none;background-color:transparent}a:hover{color:#0180a6;text-decoration:underline}a:not([href]),a:not([href]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{border-style:none}img,svg{vertical-align:middle}svg{overflow:hidden}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem}.display-1,.display-2{font-weight:300;line-height:1.2}.display-2{font-size:5.5rem}.display-3{font-size:4.5rem}.display-3,.display-4{font-weight:300;line-height:1.2}.display-4{font-size:3.5rem}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-inline,.list-unstyled{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer:before{content:"\2014\00A0"}.img-fluid,.img-thumbnail{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid,.container-lg,.container-md,.container-sm,.container-xl{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}.row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col-auto,.col-lg,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-auto,.col-md,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-md-auto,.col-sm,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-1>*{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-2>*{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-3>*{-webkit-box-flex:0;-ms-flex:0 0 33.33333%;flex:0 0 33.33333%;max-width:33.33333%}.row-cols-4>*{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-5>*{-webkit-box-flex:0;-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-6>*{-webkit-box-flex:0;-ms-flex:0 0 16.66667%;flex:0 0 16.66667%;max-width:16.66667%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-1,.col-auto{-webkit-box-flex:0}.col-1{-ms-flex:0 0 8.33333%;flex:0 0 8.33333%;max-width:8.33333%}.col-2{-ms-flex:0 0 16.66667%;flex:0 0 16.66667%;max-width:16.66667%}.col-2,.col-3{-webkit-box-flex:0}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.33333%;flex:0 0 33.33333%;max-width:33.33333%}.col-4,.col-5{-webkit-box-flex:0}.col-5{-ms-flex:0 0 41.66667%;flex:0 0 41.66667%;max-width:41.66667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-6,.col-7{-webkit-box-flex:0}.col-7{-ms-flex:0 0 58.33333%;flex:0 0 58.33333%;max-width:58.33333%}.col-8{-ms-flex:0 0 66.66667%;flex:0 0 66.66667%;max-width:66.66667%}.col-8,.col-9{-webkit-box-flex:0}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.33333%;flex:0 0 83.33333%;max-width:83.33333%}.col-10,.col-11{-webkit-box-flex:0}.col-11{-ms-flex:0 0 91.66667%;flex:0 0 91.66667%;max-width:91.66667%}.col-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-1{margin-left:8.33333%}.offset-2{margin-left:16.66667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333%}.offset-5{margin-left:41.66667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333%}.offset-8{margin-left:66.66667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333%}.offset-11{margin-left:91.66667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-sm-1>*{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-sm-2>*{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-sm-3>*{-webkit-box-flex:0;-ms-flex:0 0 33.33333%;flex:0 0 33.33333%;max-width:33.33333%}.row-cols-sm-4>*{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-sm-5>*{-webkit-box-flex:0;-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-sm-6>*{-webkit-box-flex:0;-ms-flex:0 0 16.66667%;flex:0 0 16.66667%;max-width:16.66667%}.col-sm-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{-webkit-box-flex:0;-ms-flex:0 0 8.33333%;flex:0 0 8.33333%;max-width:8.33333%}.col-sm-2{-webkit-box-flex:0;-ms-flex:0 0 16.66667%;flex:0 0 16.66667%;max-width:16.66667%}.col-sm-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-webkit-box-flex:0;-ms-flex:0 0 33.33333%;flex:0 0 33.33333%;max-width:33.33333%}.col-sm-5{-webkit-box-flex:0;-ms-flex:0 0 41.66667%;flex:0 0 41.66667%;max-width:41.66667%}.col-sm-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-webkit-box-flex:0;-ms-flex:0 0 58.33333%;flex:0 0 58.33333%;max-width:58.33333%}.col-sm-8{-webkit-box-flex:0;-ms-flex:0 0 66.66667%;flex:0 0 66.66667%;max-width:66.66667%}.col-sm-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-webkit-box-flex:0;-ms-flex:0 0 83.33333%;flex:0 0 83.33333%;max-width:83.33333%}.col-sm-11{-webkit-box-flex:0;-ms-flex:0 0 91.66667%;flex:0 0 91.66667%;max-width:91.66667%}.col-sm-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-sm-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-sm-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-sm-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-sm-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-sm-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-sm-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-sm-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-sm-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-sm-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-sm-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-sm-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-sm-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-sm-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-sm-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333%}.offset-sm-2{margin-left:16.66667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333%}.offset-sm-5{margin-left:41.66667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333%}.offset-sm-8{margin-left:66.66667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333%}.offset-sm-11{margin-left:91.66667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-md-1>*{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-md-2>*{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-md-3>*{-webkit-box-flex:0;-ms-flex:0 0 33.33333%;flex:0 0 33.33333%;max-width:33.33333%}.row-cols-md-4>*{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-md-5>*{-webkit-box-flex:0;-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-md-6>*{-webkit-box-flex:0;-ms-flex:0 0 16.66667%;flex:0 0 16.66667%;max-width:16.66667%}.col-md-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-md-1{-webkit-box-flex:0;-ms-flex:0 0 8.33333%;flex:0 0 8.33333%;max-width:8.33333%}.col-md-2{-webkit-box-flex:0;-ms-flex:0 0 16.66667%;flex:0 0 16.66667%;max-width:16.66667%}.col-md-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-webkit-box-flex:0;-ms-flex:0 0 33.33333%;flex:0 0 33.33333%;max-width:33.33333%}.col-md-5{-webkit-box-flex:0;-ms-flex:0 0 41.66667%;flex:0 0 41.66667%;max-width:41.66667%}.col-md-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-webkit-box-flex:0;-ms-flex:0 0 58.33333%;flex:0 0 58.33333%;max-width:58.33333%}.col-md-8{-webkit-box-flex:0;-ms-flex:0 0 66.66667%;flex:0 0 66.66667%;max-width:66.66667%}.col-md-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-webkit-box-flex:0;-ms-flex:0 0 83.33333%;flex:0 0 83.33333%;max-width:83.33333%}.col-md-11{-webkit-box-flex:0;-ms-flex:0 0 91.66667%;flex:0 0 91.66667%;max-width:91.66667%}.col-md-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-md-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-md-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-md-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-md-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-md-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-md-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-md-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-md-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-md-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-md-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-md-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-md-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-md-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-md-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333%}.offset-md-2{margin-left:16.66667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333%}.offset-md-5{margin-left:41.66667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333%}.offset-md-8{margin-left:66.66667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333%}.offset-md-11{margin-left:91.66667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-lg-1>*{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-lg-2>*{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-lg-3>*{-webkit-box-flex:0;-ms-flex:0 0 33.33333%;flex:0 0 33.33333%;max-width:33.33333%}.row-cols-lg-4>*{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-lg-5>*{-webkit-box-flex:0;-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-lg-6>*{-webkit-box-flex:0;-ms-flex:0 0 16.66667%;flex:0 0 16.66667%;max-width:16.66667%}.col-lg-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{-webkit-box-flex:0;-ms-flex:0 0 8.33333%;flex:0 0 8.33333%;max-width:8.33333%}.col-lg-2{-webkit-box-flex:0;-ms-flex:0 0 16.66667%;flex:0 0 16.66667%;max-width:16.66667%}.col-lg-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-webkit-box-flex:0;-ms-flex:0 0 33.33333%;flex:0 0 33.33333%;max-width:33.33333%}.col-lg-5{-webkit-box-flex:0;-ms-flex:0 0 41.66667%;flex:0 0 41.66667%;max-width:41.66667%}.col-lg-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-webkit-box-flex:0;-ms-flex:0 0 58.33333%;flex:0 0 58.33333%;max-width:58.33333%}.col-lg-8{-webkit-box-flex:0;-ms-flex:0 0 66.66667%;flex:0 0 66.66667%;max-width:66.66667%}.col-lg-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-webkit-box-flex:0;-ms-flex:0 0 83.33333%;flex:0 0 83.33333%;max-width:83.33333%}.col-lg-11{-webkit-box-flex:0;-ms-flex:0 0 91.66667%;flex:0 0 91.66667%;max-width:91.66667%}.col-lg-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-lg-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-lg-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-lg-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-lg-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-lg-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-lg-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-lg-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-lg-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-lg-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-lg-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-lg-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-lg-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-lg-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-lg-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333%}.offset-lg-2{margin-left:16.66667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333%}.offset-lg-5{margin-left:41.66667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333%}.offset-lg-8{margin-left:66.66667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333%}.offset-lg-11{margin-left:91.66667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-xl-1>*{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-xl-2>*{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-xl-3>*{-webkit-box-flex:0;-ms-flex:0 0 33.33333%;flex:0 0 33.33333%;max-width:33.33333%}.row-cols-xl-4>*{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-xl-5>*{-webkit-box-flex:0;-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-xl-6>*{-webkit-box-flex:0;-ms-flex:0 0 16.66667%;flex:0 0 16.66667%;max-width:16.66667%}.col-xl-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{-webkit-box-flex:0;-ms-flex:0 0 8.33333%;flex:0 0 8.33333%;max-width:8.33333%}.col-xl-2{-webkit-box-flex:0;-ms-flex:0 0 16.66667%;flex:0 0 16.66667%;max-width:16.66667%}.col-xl-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-webkit-box-flex:0;-ms-flex:0 0 33.33333%;flex:0 0 33.33333%;max-width:33.33333%}.col-xl-5{-webkit-box-flex:0;-ms-flex:0 0 41.66667%;flex:0 0 41.66667%;max-width:41.66667%}.col-xl-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-webkit-box-flex:0;-ms-flex:0 0 58.33333%;flex:0 0 58.33333%;max-width:58.33333%}.col-xl-8{-webkit-box-flex:0;-ms-flex:0 0 66.66667%;flex:0 0 66.66667%;max-width:66.66667%}.col-xl-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-webkit-box-flex:0;-ms-flex:0 0 83.33333%;flex:0 0 83.33333%;max-width:83.33333%}.col-xl-11{-webkit-box-flex:0;-ms-flex:0 0 91.66667%;flex:0 0 91.66667%;max-width:91.66667%}.col-xl-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-xl-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-xl-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-xl-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-xl-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-xl-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-xl-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-xl-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-xl-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-xl-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-xl-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-xl-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-xl-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-xl-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-xl-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333%}.offset-xl-2{margin-left:16.66667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333%}.offset-xl-5{margin-left:41.66667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333%}.offset-xl-8{margin-left:66.66667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333%}.offset-xl-11{margin-left:91.66667%}}.table{width:100%;margin-bottom:1rem;color:#212529}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table-sm td,.table-sm th{padding:.3rem}.table-bordered,.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{color:#212529;background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8ecfb}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7bdbf8}.table-hover .table-primary:hover,.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#a0e6fa}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#b3b7bb}.table-hover .table-secondary:hover,.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e}.table-hover .table-success:hover,.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover,.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e}.table-hover .table-warning:hover,.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#fdcbcb}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#fb9e9e}.table-hover .table-danger:hover,.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#fcb2b2}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover,.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover,.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th,.table-hover .table-active:hover,.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#343a40}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:hsla(0,0%,100%,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:hsla(0,0%,100%,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;-webkit-transition:border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{-webkit-transition:none;transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.form-control:focus{color:#495057;background-color:#fff;border-color:#76defe;outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(2,186,242,.25);box-shadow:0 0 0 .2rem rgba(2,186,242,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;font-size:1rem;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size],textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:#28a745;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8'%3E%3Cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;-webkit-box-shadow:0 0 0 .2rem rgba(40,167,69,.25);box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#28a745;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8'%3E%3Cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#28a745;-webkit-box-shadow:0 0 0 .2rem rgba(40,167,69,.25);box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label:before,.was-validated .custom-control-input:valid~.custom-control-label:before{border-color:#28a745}.custom-control-input.is-valid:checked~.custom-control-label:before,.was-validated .custom-control-input:valid:checked~.custom-control-label:before{border-color:#34ce57;background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label:before,.was-validated .custom-control-input:valid:focus~.custom-control-label:before{-webkit-box-shadow:0 0 0 .2rem rgba(40,167,69,.25);box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label:before,.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label:before,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;-webkit-box-shadow:0 0 0 .2rem rgba(40,167,69,.25);box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#f84545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(248,69,69,.9);border-radius:.25rem}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#f84545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23f84545'%3E%3Ccircle cx='6' cy='6' r='4.5'/%3E%3Cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3E%3Ccircle cx='6' cy='8.2' r='.6' fill='%23f84545' stroke='none'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#f84545;-webkit-box-shadow:0 0 0 .2rem rgba(248,69,69,.25);box-shadow:0 0 0 .2rem rgba(248,69,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#f84545;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23f84545'%3E%3Ccircle cx='6' cy='6' r='4.5'/%3E%3Cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3E%3Ccircle cx='6' cy='8.2' r='.6' fill='%23f84545' stroke='none'/%3E%3C/svg%3E") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#f84545;-webkit-box-shadow:0 0 0 .2rem rgba(248,69,69,.25);box-shadow:0 0 0 .2rem rgba(248,69,69,.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#f84545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#f84545}.custom-control-input.is-invalid~.custom-control-label:before,.was-validated .custom-control-input:invalid~.custom-control-label:before{border-color:#f84545}.custom-control-input.is-invalid:checked~.custom-control-label:before,.was-validated .custom-control-input:invalid:checked~.custom-control-label:before{border-color:#fa7676;background-color:#fa7676}.custom-control-input.is-invalid:focus~.custom-control-label:before,.was-validated .custom-control-input:invalid:focus~.custom-control-label:before{-webkit-box-shadow:0 0 0 .2rem rgba(248,69,69,.25);box-shadow:0 0 0 .2rem rgba(248,69,69,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label:before,.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label:before,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#f84545}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#f84545;-webkit-box-shadow:0 0 0 .2rem rgba(248,69,69,.25);box-shadow:0 0 0 .2rem rgba(248,69,69,.25)}.form-inline{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{-ms-flex-align:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.form-inline .form-group,.form-inline label{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;align-items:center;margin-bottom:0}.form-inline .form-group{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;-ms-flex-negative:0;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{-webkit-transition:none;transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(2,186,242,.25);box-shadow:0 0 0 .2rem rgba(2,186,242,.25)}.btn.disabled,.btn:disabled{opacity:.65}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#02baf2;border-color:#02baf2}.btn-primary.focus,.btn-primary:focus,.btn-primary:hover{color:#fff;background-color:#029dcc;border-color:#0293bf}.btn-primary.focus,.btn-primary:focus{-webkit-box-shadow:0 0 0 .2rem rgba(40,196,244,.5);box-shadow:0 0 0 .2rem rgba(40,196,244,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#02baf2;border-color:#02baf2}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0293bf;border-color:#0189b3}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(40,196,244,.5);box-shadow:0 0 0 .2rem rgba(40,196,244,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary.focus,.btn-secondary:focus,.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{-webkit-box-shadow:0 0 0 .2rem rgba(130,138,145,.5);box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(130,138,145,.5);box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success.focus,.btn-success:focus,.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{-webkit-box-shadow:0 0 0 .2rem rgba(72,180,97,.5);box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(72,180,97,.5);box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info.focus,.btn-info:focus,.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{-webkit-box-shadow:0 0 0 .2rem rgba(58,176,195,.5);box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(58,176,195,.5);box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning.focus,.btn-warning:focus,.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{-webkit-box-shadow:0 0 0 .2rem rgba(222,170,12,.5);box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(222,170,12,.5);box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-danger{color:#fff;background-color:#f84545;border-color:#f84545}.btn-danger.focus,.btn-danger:focus,.btn-danger:hover{color:#fff;background-color:#f72020;border-color:#f61414}.btn-danger.focus,.btn-danger:focus{-webkit-box-shadow:0 0 0 .2rem rgba(249,97,97,.5);box-shadow:0 0 0 .2rem rgba(249,97,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#f84545;border-color:#f84545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#f61414;border-color:#f40909}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(249,97,97,.5);box-shadow:0 0 0 .2rem rgba(249,97,97,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light.focus,.btn-light:focus,.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{-webkit-box-shadow:0 0 0 .2rem rgba(216,217,219,.5);box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(216,217,219,.5);box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark.focus,.btn-dark:focus,.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{-webkit-box-shadow:0 0 0 .2rem rgba(82,88,93,.5);box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(82,88,93,.5);box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-link{font-weight:400;color:#02baf2;text-decoration:none}.btn-link:hover{color:#0180a6;text-decoration:underline}.btn-link.focus,.btn-link:focus{text-decoration:underline;-webkit-box-shadow:none;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{-webkit-transition:opacity .15s linear;transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{-webkit-transition:none;transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{-webkit-transition:none;transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty:after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-toggle:after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";display:none}.dropleft .dropdown-toggle:before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty:after{margin-left:0}.dropleft .dropdown-toggle:before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#02baf2}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-toolbar{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split:after,.dropright .dropdown-toggle-split:after,.dropup .dropdown-toggle-split:after{margin-left:0}.dropleft .dropdown-toggle-split:before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio],.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;-webkit-box-flex:1;-ms-flex:1 1 0%;flex:1 1 0%;min-width:0;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label:after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-webkit-box;display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;left:0;z-index:-1;width:1rem;height:1.25rem;opacity:0}.custom-control-input:checked~.custom-control-label:before{color:#fff;border-color:#02baf2;background-color:#02baf2}.custom-control-input:focus~.custom-control-label:before{-webkit-box-shadow:0 0 0 .2rem rgba(2,186,242,.25);box-shadow:0 0 0 .2rem rgba(2,186,242,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label:before{border-color:#76defe}.custom-control-input:not(:disabled):active~.custom-control-label:before{color:#fff;background-color:#a8eafe;border-color:#a8eafe}.custom-control-input:disabled~.custom-control-label,.custom-control-input[disabled]~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label:before,.custom-control-input[disabled]~.custom-control-label:before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label:before{pointer-events:none;background-color:#fff;border:1px solid #adb5bd}.custom-control-label:after,.custom-control-label:before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:""}.custom-control-label:after{background:no-repeat 50%/50% 50%}.custom-checkbox .custom-control-label:before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label:before{border-color:#02baf2;background-color:#02baf2}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(2,186,242,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label:before{background-color:rgba(2,186,242,.5)}.custom-radio .custom-control-label:before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(2,186,242,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label:before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label:after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-transform .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-transform .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out,-webkit-box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label:after{-webkit-transition:none;transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label:after{background-color:#fff;-webkit-transform:translateX(.75rem);transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(2,186,242,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center/8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#76defe;outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(2,186,242,.25);box-shadow:0 0 0 .2rem rgba(2,186,242,.25)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.custom-file{display:inline-block;margin-bottom:0}.custom-file,.custom-file-input{position:relative;width:100%;height:calc(1.5em + .75rem + 2px)}.custom-file-input{z-index:2;margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#76defe;-webkit-box-shadow:0 0 0 .2rem rgba(2,186,242,.25);box-shadow:0 0 0 .2rem rgba(2,186,242,.25)}.custom-file-input:disabled~.custom-file-label,.custom-file-input[disabled]~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label:after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]:after{content:attr(data-browse)}.custom-file-label{left:0;z-index:1;height:calc(1.5em + .75rem + 2px);font-weight:400;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label,.custom-file-label:after{position:absolute;top:0;right:0;padding:.375rem .75rem;line-height:1.5;color:#495057}.custom-file-label:after{bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:none}.custom-range:focus::-webkit-slider-thumb{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(2,186,242,.25);box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(2,186,242,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(2,186,242,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(2,186,242,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#02baf2;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#a8eafe}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#02baf2;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{-moz-transition:none;transition:none}}.custom-range::-moz-range-thumb:active{background-color:#a8eafe}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#02baf2;border:0;border-radius:1rem;-ms-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{-ms-transition:none;transition:none}}.custom-range::-ms-thumb:active{background-color:#a8eafe}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower,.custom-range::-ms-fill-upper{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label:before,.custom-file-label,.custom-select{-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label:before,.custom-file-label,.custom-select{-webkit-transition:none;transition:none}}.nav{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#02baf2}.nav-fill .nav-item{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;padding:.5rem 1rem}.navbar,.navbar .container,.navbar .container-fluid,.navbar .container-lg,.navbar .container-md,.navbar .container-sm,.navbar .container-xl{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat 50%;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm,.navbar-expand-sm .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md,.navbar-expand-md .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg,.navbar-expand-lg .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl,.navbar-expand-xl .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand,.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30'%3E%3Cpath stroke='rgba(0,0,0,0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a,.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand,.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:hsla(0,0%,100%,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:hsla(0,0%,100%,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:hsla(0,0%,100%,.5);border-color:hsla(0,0%,100%,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30'%3E%3Cpath stroke='rgba(255,255,255,0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-dark .navbar-text{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;min-height:1px;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem}.card-subtitle,.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-bottom:-.75rem;border-bottom:0}.card-header-pills,.card-header-tabs{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img,.card-img-bottom,.card-img-top{-ms-flex-negative:0;flex-shrink:0;width:100%}.card-img,.card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion>.card{overflow:hidden}.accordion>.card:not(:last-of-type){border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:not(:first-of-type){border-top-left-radius:0;border-top-right-radius:0}.accordion>.card>.card-header{border-radius:0;margin-bottom:-1px}.breadcrumb{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item:before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover:before{text-decoration:underline;text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-webkit-box;display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#02baf2;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0180a6;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:3;outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(2,186,242,.25);box-shadow:0 0 0 .2rem rgba(2,186,242,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:3;color:#fff;background-color:#02baf2;border-color:#02baf2}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{-webkit-transition:none;transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#02baf2}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#0293bf}a.badge-primary.focus,a.badge-primary:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(2,186,242,.5);box-shadow:0 0 0 .2rem rgba(2,186,242,.5)}.badge-secondary{color:#fff;background-color:#6c757d}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#545b62}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(108,117,125,.5);box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.badge-success{color:#fff;background-color:#28a745}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#1e7e34}a.badge-success.focus,a.badge-success:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(40,167,69,.5);box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.badge-info{color:#fff;background-color:#17a2b8}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#117a8b}a.badge-info.focus,a.badge-info:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(23,162,184,.5);box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.badge-warning{color:#212529;background-color:#ffc107}a.badge-warning:focus,a.badge-warning:hover{color:#212529;background-color:#d39e00}a.badge-warning.focus,a.badge-warning:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(255,193,7,.5);box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.badge-danger{color:#fff;background-color:#f84545}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#f61414}a.badge-danger.focus,a.badge-danger:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(248,69,69,.5);box-shadow:0 0 0 .2rem rgba(248,69,69,.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}a.badge-light.focus,a.badge-light:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(248,249,250,.5);box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#1d2124}a.badge-dark.focus,a.badge-dark:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(52,58,64,.5);box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#01617e;background-color:#ccf1fc;border-color:#b8ecfb}.alert-primary hr{border-top-color:#a0e6fa}.alert-primary .alert-link{color:#013a4b}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#812424;background-color:#fedada;border-color:#fdcbcb}.alert-danger hr{border-top-color:#fcb2b2}.alert-danger .alert-link{color:#591919}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{0%{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{0%{background-position:1rem 0}to{background-position:0 0}}.progress{height:1rem;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress,.progress-bar{display:-webkit-box;display:-ms-flexbox;display:flex;overflow:hidden}.progress-bar{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#02baf2;-webkit-transition:width .6s ease;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{-webkit-transition:none;transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.media{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.media-body{-webkit-box-flex:1;-ms-flex:1;flex:1}.list-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#02baf2;border-color:#02baf2}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.list-group-horizontal .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal .list-group-item.active{margin-top:0}.list-group-horizontal .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media (min-width:576px){.list-group-horizontal-sm{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-sm .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-sm .list-group-item.active{margin-top:0}.list-group-horizontal-sm .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:768px){.list-group-horizontal-md{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-md .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-md .list-group-item.active{margin-top:0}.list-group-horizontal-md .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:992px){.list-group-horizontal-lg{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-lg .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-lg .list-group-item.active{margin-top:0}.list-group-horizontal-lg .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1200px){.list-group-horizontal-xl{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-xl .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xl .list-group-item.active{margin-top:0}.list-group-horizontal-xl .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush .list-group-item{border-right-width:0;border-left-width:0;border-radius:0}.list-group-flush .list-group-item:first-child{border-top-width:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#01617e;background-color:#b8ecfb}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#01617e;background-color:#a0e6fa}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#01617e;border-color:#01617e}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#812424;background-color:#fdcbcb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#812424;background-color:#fcb2b2}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#812424;border-color:#812424}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}a.close.disabled{pointer-events:none}.toast{max-width:350px;overflow:hidden;font-size:.875rem;background-color:hsla(0,0%,100%,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);-webkit-box-shadow:0 .25rem .75rem rgba(0,0,0,.1);box-shadow:0 .25rem .75rem rgba(0,0,0,.1);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.25rem .75rem;color:#6c757d;background-color:hsla(0,0%,100%,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translateY(-50px);transform:translateY(-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{-webkit-transition:none;transition:none}}.modal.show .modal-dialog{-webkit-transform:none;transform:none}.modal.modal-static .modal-dialog{-webkit-transform:scale(1.02);transform:scale(1.02)}.modal-dialog-scrollable{display:-webkit-box;display:-ms-flexbox;display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{-ms-flex-negative:0;flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered:before{display:block;height:calc(100vh - 1rem);content:""}.modal-dialog-centered.modal-dialog-scrollable{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable:before{content:none}.modal-content{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}.modal-footer>*{margin:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered:before{height:calc(100vh - 3.5rem)}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow:before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow:before,.bs-tooltip-top .arrow:before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow:before,.bs-tooltip-right .arrow:before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow:before,.bs-tooltip-bottom .arrow:before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow:before,.bs-tooltip-left .arrow:before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{top:0;left:0;z-index:1060;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover,.popover .arrow{position:absolute;display:block}.popover .arrow{width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow:after,.popover .arrow:before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=top]>.arrow:before,.bs-popover-top>.arrow:before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top]>.arrow:after,.bs-popover-top>.arrow:after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right]>.arrow:before,.bs-popover-right>.arrow:before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right]>.arrow:after,.bs-popover-right>.arrow:after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=bottom]>.arrow:before,.bs-popover-bottom>.arrow:before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow:after,.bs-popover-bottom>.arrow:after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header:before,.bs-popover-bottom .popover-header:before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left]>.arrow:before,.bs-popover-left>.arrow:before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow:after,.bs-popover-left>.arrow:after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{-ms-touch-action:pan-y;touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner:after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transition:-webkit-transform .6s ease-in-out;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{-webkit-transition:none;transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){-webkit-transform:translateX(100%);transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){-webkit-transform:translateX(-100%);transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transform:none;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;-webkit-transition:opacity 0s .6s;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{-webkit-transition:none;transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;-webkit-transition:opacity .15s ease;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{-webkit-transition:none;transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:no-repeat 50%/100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8'%3E%3Cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3E%3C/svg%3E")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{-webkit-box-sizing:content-box;box-sizing:content-box;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;-webkit-transition:opacity .6s ease;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{-webkit-transition:none;transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@-webkit-keyframes spinner-border{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes spinner-border{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:spinner-border .75s linear infinite;animation:spinner-border .75s linear infinite}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1}}@keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:spinner-grow .75s linear infinite;animation:spinner-grow .75s linear infinite}.spinner-grow-sm{width:1rem;height:1rem}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#02baf2!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0293bf!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#f84545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#f61414!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#02baf2!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#f84545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important}.rounded-right,.rounded-top{border-top-right-radius:.25rem!important}.rounded-bottom,.rounded-right{border-bottom-right-radius:.25rem!important}.rounded-bottom,.rounded-left{border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix:after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive:before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9:before{padding-top:42.85714%}.embed-responsive-16by9:before{padding-top:56.25%}.embed-responsive-4by3:before{padding-top:75%}.embed-responsive-1by1:before{padding-top:100%}.flex-row{-webkit-box-orient:horizontal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-column,.flex-row{-webkit-box-direction:normal!important}.flex-column{-webkit-box-orient:vertical!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-webkit-box-orient:horizontal!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse,.flex-row-reverse{-webkit-box-direction:reverse!important}.flex-column-reverse{-webkit-box-orient:vertical!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-webkit-box-flex:1!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-webkit-box-flex:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-webkit-box-flex:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-webkit-box-orient:horizontal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column,.flex-sm-row{-webkit-box-direction:normal!important}.flex-sm-column{-webkit-box-orient:vertical!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-webkit-box-flex:1!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-webkit-box-flex:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-webkit-box-flex:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-webkit-box-orient:horizontal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column,.flex-md-row{-webkit-box-direction:normal!important}.flex-md-column{-webkit-box-orient:vertical!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-webkit-box-flex:1!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-webkit-box-flex:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-webkit-box-flex:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-webkit-box-orient:horizontal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column,.flex-lg-row{-webkit-box-direction:normal!important}.flex-lg-column{-webkit-box-orient:vertical!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-webkit-box-flex:1!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-webkit-box-flex:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-webkit-box-flex:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-webkit-box-orient:horizontal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column,.flex-xl-row{-webkit-box-direction:normal!important}.flex-xl-column{-webkit-box-orient:vertical!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-webkit-box-flex:1!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-webkit-box-flex:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-webkit-box-flex:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{top:0}.fixed-bottom,.fixed-top{position:fixed;right:0;left:0;z-index:1030}.fixed-bottom{bottom:0}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{-webkit-box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important;box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{-webkit-box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important;box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{-webkit-box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important;box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{-webkit-box-shadow:none!important;box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.stretched-link:after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:transparent}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#02baf2!important}a.text-primary:focus,a.text-primary:hover{color:#0180a6!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#494f54!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#0f6674!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important}.text-danger{color:#f84545!important}a.text-danger:focus,a.text-danger:hover{color:#e80909!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:hsla(0,0%,100%,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;overflow-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,:after,:before{text-shadow:none!important;-webkit-box-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]:after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}.container,body{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}}.btn-outline-primary{color:#02baf2;border-color:#02baf2;border-color:#d6e1e5}.btn-outline-primary:hover{color:#fff;background-color:#02baf2;border-color:#02baf2}.btn-outline-primary.focus,.btn-outline-primary:focus{-webkit-box-shadow:0 0 0 .2rem rgba(2,186,242,.5);box-shadow:0 0 0 .2rem rgba(2,186,242,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#02baf2;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#02baf2;border-color:#02baf2}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(2,186,242,.5);box-shadow:0 0 0 .2rem rgba(2,186,242,.5)}.btn-outline-secondary{color:#6c757d;border-color:#6c757d;border-color:#d6e1e5}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{-webkit-box-shadow:0 0 0 .2rem rgba(108,117,125,.5);box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(108,117,125,.5);box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;border-color:#28a745;border-color:#d6e1e5}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{-webkit-box-shadow:0 0 0 .2rem rgba(40,167,69,.5);box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(40,167,69,.5);box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;border-color:#17a2b8;border-color:#d6e1e5}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{-webkit-box-shadow:0 0 0 .2rem rgba(23,162,184,.5);box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(23,162,184,.5);box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;border-color:#ffc107;border-color:#d6e1e5}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{-webkit-box-shadow:0 0 0 .2rem rgba(255,193,7,.5);box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(255,193,7,.5);box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#f84545;border-color:#f84545;border-color:#d6e1e5}.btn-outline-danger:hover{color:#fff;background-color:#f84545;border-color:#f84545}.btn-outline-danger.focus,.btn-outline-danger:focus{-webkit-box-shadow:0 0 0 .2rem rgba(248,69,69,.5);box-shadow:0 0 0 .2rem rgba(248,69,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#f84545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#f84545;border-color:#f84545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(248,69,69,.5);box-shadow:0 0 0 .2rem rgba(248,69,69,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa;border-color:#d6e1e5}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{-webkit-box-shadow:0 0 0 .2rem rgba(248,249,250,.5);box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(248,249,250,.5);box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;border-color:#343a40;border-color:#d6e1e5}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{-webkit-box-shadow:0 0 0 .2rem rgba(52,58,64,.5);box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(52,58,64,.5);box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.navbar{padding:0}.navbar-nav{-ms-flex-preferred-size:100%;flex-basis:100%}.navbar-nav a{white-space:nowrap;color:#93a4aa}.navbar-nav .nav-link{padding-top:0;padding-bottom:0;line-height:4.5rem}.navbar-nav .dropdown-menu{background-color:#20282a;margin:0;border:0;border-radius:0;padding:0}.navbar-nav .dropdown-item{padding:0}.navbar-nav .dropdown-item:first-child,.navbar-nav .dropdown-item:last-child{border-radius:0}.navbar-nav .dropdown-item a{padding:0 15px;line-height:2.3rem;display:block;text-decoration:none;min-width:15rem}.navbar-nav .dropdown-item:hover{background-color:#364347}.navbar-nav .dropdown-item:hover a{color:#fff}.navbar-nav .pesquisa .dropdown-menu{min-width:15rem}.navbar-nav .search-form{padding:10px;min-width:20%}.navbar-nav a:not([href]):not([tabindex]){color:#777}.navbar-nav.justify-content-end .dropdown-menu{left:auto;right:0}.nav-pills .dropdown-menu{padding:0}.nav-pills .dropdown-item a{display:block}.nav-pills .dropdown-item.active a{color:#fff}@media (max-width:1199px){nav .container{max-width:none;-ms-flex-preferred-size:100%;flex-basis:100%}nav .caret{margin-left:-3px}}@media (max-width:1091px){.navbar-expand-lg .navbar-nav .nav-link{padding-left:4px;padding-right:4px;font-size:.95rem}}@media (max-width:991px){.navbar{padding:5px}.navbar-nav .nav-link{line-height:2.5rem}.navbar-nav.justify-content-end{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.navbar-nav.justify-content-end>li{display:inline-block}}@media (max-width:767px){.table{width:auto;white-space:normal;display:block;overflow-x:auto}}html{position:relative;min-height:100%}a,dd,div,dl,dt,form,h1,h2,h3,h4,h5,h6,img,p{margin:0;padding:0}.h1,h1{font-size:30px}.h2,h2{font-size:24px}.h3,h3{font-size:20px}.h4,h4{font-size:16px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:.25em 0}p.control-label{font-weight:700}label{margin-bottom:0;line-height:1}input[type=checkbox],input[type=radio]{margin:0 5px 0 0;position:relative}fieldset fieldset{font-size:95%}fieldset fieldset legend{font-size:18px}ul{margin:0}.hidden{display:none}.form-control-static{padding:.2em 0;padding-left:12px;background-color:#f7f7f7}.form-control-static:empty{display:none}.legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5;clear:both}.page-header{margin:20px 0 10px}.caret.top{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.lista-parlamentares .table td{vertical-align:middle}small{color:#777}.container-tabaux .sidebar-tabaux{background:#fafafa;margin-top:-70px;padding:10px;border:1px solid #eee}.container-tabaux .sidebar-tabaux .navbar-right{margin:0}.container-tabaux .sidebar-tabaux .nav-pills>li+li{margin-left:0}.container-tabaux .sidebar-tabaux li{width:100%}.container-tabaux .sidebar-tabaux span{display:none}.container-tabaux .sidebar-tabaux .dropdown-menu{padding:0;right:10px;margin-top:-5px;overflow:hidden}.container-tabaux .sidebar-tabaux .dropdown-menu a{border:0}.container-tabaux ul{list-style:none;padding:0}.container-tabaux .list{font-family:SourceSansProSemiBold,Helvetica,Arial,sans-serif;font-size:0}.container-tabaux .list,.container-tabaux .list ul{display:table;width:100%;margin:0}.container-tabaux .list li{width:50%;display:inline-block;position:relative}.container-tabaux .list>li{width:100%;border-bottom:1px solid #eee;padding-bottom:20px;margin-bottom:20px}.container-tabaux .list .head_title{color:#364347;font-size:1.7rem;text-transform:none}.container-tabaux .list a span,.mce-branding.mce-label{display:none}.dont-break-out{overflow-wrap:break-word;word-wrap:break-word;word-break:break-word}@media print{a[href]:after{content:none!important}}.container-home{position:relative;padding:2em 1.5em 1.5em 1.5em;max-width:1000px;margin:0 auto}.container-home a:hover{color:#444;-webkit-transition:.3s ease-in;-moz-transition:.3s ease-in;-o-transition:.3s ease-in}.container-home #homeIndex{text-align:center}.container-home .homeBanner span{color:#fff;font-size:32px;font-weight:600;display:inline-block;vertical-align:middle;padding:2px 45px 4px;border:2px solid}.container-home .homeBanner:after{display:inline-block;vertical-align:middle;height:100%}.container-home .homeBlock{display:inline-block;position:relative;background-color:#f3f3f3;width:190px;height:260px;margin:3px;text-align:center;font-size:0;overflow:hidden}.container-home .homeBlock>a{display:block;position:absolute;width:100%;height:100%;top:0;left:0}.container-home .homeBlock:after{content:"";display:inline-block;vertical-align:middle;height:100%;overflow:visible;clear:none;visibility:initial}.container-home .homeContent{position:relative;padding:10px;text-align:justify;font-size:14px;color:#fff;opacity:0;-webkit-transition:opacity .5s ease;transition:opacity .5s ease;display:inline-block;vertical-align:middle}.container-home .homeContent p{display:block;line-height:13px;font-size:80%;color:#fff}.container-home .homeIcon{position:relative;display:inline-block;width:105px;height:105px;border-radius:50%;background:#364347;z-index:1}.container-home .homeIcon:before{content:"";position:absolute;width:100%;height:100%;border-radius:50%;background:#364347;top:0;left:0;-webkit-transform:scale(.95);transform:scale(.95);-webkit-transition:-webkit-transform .6s ease;transition:-webkit-transform .6s ease;transition:transform .6s ease;transition:transform .6s ease,-webkit-transform .6s ease}.container-home .homeIcon img{position:absolute;margin:auto;top:0;bottom:0;right:0;left:0;-webkit-transition:opacity .4s ease .4s;transition:opacity .4s ease .4s}.container-home .homeFront{position:absolute;top:46%;width:100%;font-size:0;-webkit-transform:translateY(-60%);transform:translateY(-60%)}.container-home .homeFront h2{position:absolute;margin-top:18px;font-size:22px;font-weight:700;color:#595959!important;width:100%;padding:0 6%;z-index:0}.container-home .homeTitle{display:block;height:32px;text-align:center;width:100%;opacity:0;-webkit-transition:opacity .4s ease;transition:opacity .4s ease}.container-home .homeTitle:before{content:"";display:inline-block;vertical-align:middle;height:100%}.container-home .homeTitle h2{display:inline-block;vertical-align:middle;max-width:110px;font-size:14px;color:#fff!important;line-height:1em}.container-home .homeTitle img{display:inline-block;vertical-align:middle;height:30px;margin-right:5px}.container-home .homeBlock:hover .homeIcon:before{-webkit-transform:scale(3.6) translateY(7px);transform:scale(3.6) translateY(7px)}.container-home .homeBlock:hover .homeContent{opacity:1;-webkit-transition-delay:.2s;transition-delay:.2s}.container-home .homeBlock:hover .homeIcon img{opacity:0;-webkit-transition-duration:.2s;transition-duration:.2s;-webkit-transition-delay:0s;transition-delay:0s}.container-home .homeBlock:hover .homeTitle{opacity:1}.masthead{padding:10px}.masthead .navbar-brand{padding:0;font-size:24px}.masthead .navbar-brand img.img-responsive{height:95px;display:inline-block}.masthead .navbar-brand small{color:#93a4aa;font-size:75%;line-height:25px}.masthead .navbar-brand .vcenter{display:inline-block;vertical-align:middle;float:none;padding:10px;line-height:1.5rem}.masthead .nav-link{padding:.3rem .5rem;margin:0 1px}.masthead .nav-link:hover{background-color:#b2c6cd;color:#fff}@media (max-width:1091px){.masthead .navbar-brand{font-size:22px}.masthead .navbar-brand img.img-responsive{height:60px}}@media (max-width:767px){.masthead{text-align:center}.masthead .container{max-width:100%;padding:0}.masthead .navbar-brand{white-space:normal;margin:0}.masthead .navbar-brand .vcenter{display:block;line-height:1em}}@media (max-width:576px){.masthead .navbar-brand{font-size:1.2rem}}@media (max-width:360px){.masthead .navbar-brand{font-size:1rem}}body{margin-bottom:160px}.footer{background:#364347;color:#fff;text-align:center;position:absolute;width:100%;bottom:0}.footer p{color:#fff;margin-top:10px}.footer .container{padding-top:25px}@media (max-width:991px){.footer{position:relative}}.jcrop-holder{-ms-touch-action:none;direction:ltr;text-align:left}.jcrop-hline,.jcrop-vline{background:#fff url(data:image/gif;base64,R0lGODlhCAAIAJEAAKqqqv///wAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQJCgAAACwAAAAACAAIAAACDZQFCadrzVRMB9FZ5SwAIfkECQoAAAAsAAAAAAgACAAAAg+ELqCYaudeW9ChyOyltQAAIfkECQoAAAAsAAAAAAgACAAAAg8EhGKXm+rQYtC0WGl9oAAAIfkECQoAAAAsAAAAAAgACAAAAg+EhWKQernaYmjCWLF7qAAAIfkECQoAAAAsAAAAAAgACAAAAg2EISmna81UTAfRWeUsACH5BAkKAAAALAAAAAAIAAgAAAIPFA6imGrnXlvQocjspbUAACH5BAkKAAAALAAAAAAIAAgAAAIPlIBgl5vq0GLQtFhpfaIAACH5BAUKAAAALAAAAAAIAAgAAAIPlIFgknq52mJowlixe6gAADs=);font-size:0;position:absolute}.jcrop-vline{height:100%;width:1px!important}.jcrop-vline.right{right:0}.jcrop-hline{height:1px!important;width:100%}.jcrop-hline.bottom{bottom:0}.jcrop-tracker{-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none;-webkit-user-select:none;height:100%;width:100%}.jcrop-handle{background-color:#333;border:1px solid #eee;font-size:1px;height:7px;width:7px}.jcrop-handle.ord-n{left:50%;margin-left:-4px;margin-top:-4px;top:0}.jcrop-handle.ord-s{bottom:0;left:50%;margin-bottom:-4px;margin-left:-4px}.jcrop-handle.ord-e{margin-right:-4px;margin-top:-4px;right:0;top:50%}.jcrop-handle.ord-w{left:0;margin-left:-4px;margin-top:-4px;top:50%}.jcrop-handle.ord-nw{left:0;margin-left:-4px;margin-top:-4px;top:0}.jcrop-handle.ord-ne{margin-right:-4px;margin-top:-4px;right:0;top:0}.jcrop-handle.ord-se{bottom:0;margin-bottom:-4px;margin-right:-4px;right:0}.jcrop-handle.ord-sw{bottom:0;left:0;margin-bottom:-4px;margin-left:-4px}.jcrop-dragbar.ord-n,.jcrop-dragbar.ord-s{height:7px;width:100%}.jcrop-dragbar.ord-e,.jcrop-dragbar.ord-w{height:100%;width:7px}.jcrop-dragbar.ord-n{margin-top:-4px}.jcrop-dragbar.ord-s{bottom:0;margin-bottom:-4px}.jcrop-dragbar.ord-e{margin-right:-4px;right:0}.jcrop-dragbar.ord-w{margin-left:-4px}.jcrop-light .jcrop-hline,.jcrop-light .jcrop-vline{background:#fff;filter:alpha(opacity=70)!important;opacity:.7!important}.jcrop-light .jcrop-handle{-moz-border-radius:3px;-webkit-border-radius:3px;background-color:#000;border-color:#fff;border-radius:3px}.jcrop-dark .jcrop-hline,.jcrop-dark .jcrop-vline{background:#000;filter:alpha(opacity=70)!important;opacity:.7!important}.jcrop-dark .jcrop-handle{-moz-border-radius:3px;-webkit-border-radius:3px;background-color:#fff;border-color:#000;border-radius:3px}.solid-line .jcrop-hline,.solid-line .jcrop-vline{background:#fff}.jcrop-holder img,img.jcrop-preview{max-width:none}div.jcrop-image.size-warning .jcrop-hline,div.jcrop-image.size-warning .jcrop-vline{border:1px solid red;background:none}body.change-form .allow-fullsize+.help,body.change-form .jcrop-holder+.help{clear:left}body.change-form .jcrop-holder{float:left}div.allow-fullsize{padding:5px 0 0 10px} \ No newline at end of file diff --git a/sapl/static/sapl/frontend/css/global.278b5d61.css.gz b/sapl/static/sapl/frontend/css/global.278b5d61.css.gz deleted file mode 100644 index 63673a850..000000000 Binary files a/sapl/static/sapl/frontend/css/global.278b5d61.css.gz and /dev/null differ diff --git a/sapl/static/sapl/frontend/css/global.80b7564c.css b/sapl/static/sapl/frontend/css/global.80b7564c.css new file mode 100644 index 000000000..1e0caf28f --- /dev/null +++ b/sapl/static/sapl/frontend/css/global.80b7564c.css @@ -0,0 +1 @@ +*,:after,:before{-webkit-box-sizing:border-box;box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{font-style:normal;line-height:inherit}address,dl,ol,ul{margin-bottom:1rem}dl,ol,ul{margin-top:0}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#02baf2;text-decoration:none;background-color:transparent}a:hover{color:#0180a6;text-decoration:underline}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{border-style:none}img,svg{vertical-align:middle}svg{overflow:hidden}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit;text-align:-webkit-match-parent}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem}.display-1,.display-2{font-weight:300;line-height:1.2}.display-2{font-size:5.5rem}.display-3{font-size:4.5rem}.display-3,.display-4{font-weight:300;line-height:1.2}.display-4{font-size:3.5rem}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-inline,.list-unstyled{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer:before{content:"\2014\00A0"}.img-fluid,.img-thumbnail{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}.row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col-auto,.col-lg,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-auto,.col-md,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-md-auto,.col-sm,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-1>*{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-2>*{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-3>*{-webkit-box-flex:0;-ms-flex:0 0 33.33333%;flex:0 0 33.33333%;max-width:33.33333%}.row-cols-4>*{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-5>*{-webkit-box-flex:0;-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-6>*{-webkit-box-flex:0;-ms-flex:0 0 16.66667%;flex:0 0 16.66667%;max-width:16.66667%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-1,.col-auto{-webkit-box-flex:0}.col-1{-ms-flex:0 0 8.33333%;flex:0 0 8.33333%;max-width:8.33333%}.col-2{-ms-flex:0 0 16.66667%;flex:0 0 16.66667%;max-width:16.66667%}.col-2,.col-3{-webkit-box-flex:0}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.33333%;flex:0 0 33.33333%;max-width:33.33333%}.col-4,.col-5{-webkit-box-flex:0}.col-5{-ms-flex:0 0 41.66667%;flex:0 0 41.66667%;max-width:41.66667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-6,.col-7{-webkit-box-flex:0}.col-7{-ms-flex:0 0 58.33333%;flex:0 0 58.33333%;max-width:58.33333%}.col-8{-ms-flex:0 0 66.66667%;flex:0 0 66.66667%;max-width:66.66667%}.col-8,.col-9{-webkit-box-flex:0}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.33333%;flex:0 0 83.33333%;max-width:83.33333%}.col-10,.col-11{-webkit-box-flex:0}.col-11{-ms-flex:0 0 91.66667%;flex:0 0 91.66667%;max-width:91.66667%}.col-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-1{margin-left:8.33333%}.offset-2{margin-left:16.66667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333%}.offset-5{margin-left:41.66667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333%}.offset-8{margin-left:66.66667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333%}.offset-11{margin-left:91.66667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-sm-1>*{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-sm-2>*{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-sm-3>*{-webkit-box-flex:0;-ms-flex:0 0 33.33333%;flex:0 0 33.33333%;max-width:33.33333%}.row-cols-sm-4>*{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-sm-5>*{-webkit-box-flex:0;-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-sm-6>*{-webkit-box-flex:0;-ms-flex:0 0 16.66667%;flex:0 0 16.66667%;max-width:16.66667%}.col-sm-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{-webkit-box-flex:0;-ms-flex:0 0 8.33333%;flex:0 0 8.33333%;max-width:8.33333%}.col-sm-2{-webkit-box-flex:0;-ms-flex:0 0 16.66667%;flex:0 0 16.66667%;max-width:16.66667%}.col-sm-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-webkit-box-flex:0;-ms-flex:0 0 33.33333%;flex:0 0 33.33333%;max-width:33.33333%}.col-sm-5{-webkit-box-flex:0;-ms-flex:0 0 41.66667%;flex:0 0 41.66667%;max-width:41.66667%}.col-sm-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-webkit-box-flex:0;-ms-flex:0 0 58.33333%;flex:0 0 58.33333%;max-width:58.33333%}.col-sm-8{-webkit-box-flex:0;-ms-flex:0 0 66.66667%;flex:0 0 66.66667%;max-width:66.66667%}.col-sm-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-webkit-box-flex:0;-ms-flex:0 0 83.33333%;flex:0 0 83.33333%;max-width:83.33333%}.col-sm-11{-webkit-box-flex:0;-ms-flex:0 0 91.66667%;flex:0 0 91.66667%;max-width:91.66667%}.col-sm-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-sm-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-sm-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-sm-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-sm-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-sm-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-sm-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-sm-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-sm-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-sm-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-sm-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-sm-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-sm-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-sm-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-sm-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333%}.offset-sm-2{margin-left:16.66667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333%}.offset-sm-5{margin-left:41.66667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333%}.offset-sm-8{margin-left:66.66667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333%}.offset-sm-11{margin-left:91.66667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-md-1>*{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-md-2>*{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-md-3>*{-webkit-box-flex:0;-ms-flex:0 0 33.33333%;flex:0 0 33.33333%;max-width:33.33333%}.row-cols-md-4>*{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-md-5>*{-webkit-box-flex:0;-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-md-6>*{-webkit-box-flex:0;-ms-flex:0 0 16.66667%;flex:0 0 16.66667%;max-width:16.66667%}.col-md-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-md-1{-webkit-box-flex:0;-ms-flex:0 0 8.33333%;flex:0 0 8.33333%;max-width:8.33333%}.col-md-2{-webkit-box-flex:0;-ms-flex:0 0 16.66667%;flex:0 0 16.66667%;max-width:16.66667%}.col-md-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-webkit-box-flex:0;-ms-flex:0 0 33.33333%;flex:0 0 33.33333%;max-width:33.33333%}.col-md-5{-webkit-box-flex:0;-ms-flex:0 0 41.66667%;flex:0 0 41.66667%;max-width:41.66667%}.col-md-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-webkit-box-flex:0;-ms-flex:0 0 58.33333%;flex:0 0 58.33333%;max-width:58.33333%}.col-md-8{-webkit-box-flex:0;-ms-flex:0 0 66.66667%;flex:0 0 66.66667%;max-width:66.66667%}.col-md-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-webkit-box-flex:0;-ms-flex:0 0 83.33333%;flex:0 0 83.33333%;max-width:83.33333%}.col-md-11{-webkit-box-flex:0;-ms-flex:0 0 91.66667%;flex:0 0 91.66667%;max-width:91.66667%}.col-md-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-md-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-md-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-md-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-md-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-md-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-md-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-md-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-md-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-md-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-md-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-md-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-md-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-md-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-md-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333%}.offset-md-2{margin-left:16.66667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333%}.offset-md-5{margin-left:41.66667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333%}.offset-md-8{margin-left:66.66667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333%}.offset-md-11{margin-left:91.66667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-lg-1>*{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-lg-2>*{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-lg-3>*{-webkit-box-flex:0;-ms-flex:0 0 33.33333%;flex:0 0 33.33333%;max-width:33.33333%}.row-cols-lg-4>*{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-lg-5>*{-webkit-box-flex:0;-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-lg-6>*{-webkit-box-flex:0;-ms-flex:0 0 16.66667%;flex:0 0 16.66667%;max-width:16.66667%}.col-lg-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{-webkit-box-flex:0;-ms-flex:0 0 8.33333%;flex:0 0 8.33333%;max-width:8.33333%}.col-lg-2{-webkit-box-flex:0;-ms-flex:0 0 16.66667%;flex:0 0 16.66667%;max-width:16.66667%}.col-lg-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-webkit-box-flex:0;-ms-flex:0 0 33.33333%;flex:0 0 33.33333%;max-width:33.33333%}.col-lg-5{-webkit-box-flex:0;-ms-flex:0 0 41.66667%;flex:0 0 41.66667%;max-width:41.66667%}.col-lg-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-webkit-box-flex:0;-ms-flex:0 0 58.33333%;flex:0 0 58.33333%;max-width:58.33333%}.col-lg-8{-webkit-box-flex:0;-ms-flex:0 0 66.66667%;flex:0 0 66.66667%;max-width:66.66667%}.col-lg-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-webkit-box-flex:0;-ms-flex:0 0 83.33333%;flex:0 0 83.33333%;max-width:83.33333%}.col-lg-11{-webkit-box-flex:0;-ms-flex:0 0 91.66667%;flex:0 0 91.66667%;max-width:91.66667%}.col-lg-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-lg-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-lg-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-lg-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-lg-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-lg-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-lg-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-lg-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-lg-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-lg-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-lg-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-lg-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-lg-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-lg-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-lg-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333%}.offset-lg-2{margin-left:16.66667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333%}.offset-lg-5{margin-left:41.66667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333%}.offset-lg-8{margin-left:66.66667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333%}.offset-lg-11{margin-left:91.66667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-xl-1>*{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-xl-2>*{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-xl-3>*{-webkit-box-flex:0;-ms-flex:0 0 33.33333%;flex:0 0 33.33333%;max-width:33.33333%}.row-cols-xl-4>*{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-xl-5>*{-webkit-box-flex:0;-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-xl-6>*{-webkit-box-flex:0;-ms-flex:0 0 16.66667%;flex:0 0 16.66667%;max-width:16.66667%}.col-xl-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{-webkit-box-flex:0;-ms-flex:0 0 8.33333%;flex:0 0 8.33333%;max-width:8.33333%}.col-xl-2{-webkit-box-flex:0;-ms-flex:0 0 16.66667%;flex:0 0 16.66667%;max-width:16.66667%}.col-xl-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-webkit-box-flex:0;-ms-flex:0 0 33.33333%;flex:0 0 33.33333%;max-width:33.33333%}.col-xl-5{-webkit-box-flex:0;-ms-flex:0 0 41.66667%;flex:0 0 41.66667%;max-width:41.66667%}.col-xl-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-webkit-box-flex:0;-ms-flex:0 0 58.33333%;flex:0 0 58.33333%;max-width:58.33333%}.col-xl-8{-webkit-box-flex:0;-ms-flex:0 0 66.66667%;flex:0 0 66.66667%;max-width:66.66667%}.col-xl-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-webkit-box-flex:0;-ms-flex:0 0 83.33333%;flex:0 0 83.33333%;max-width:83.33333%}.col-xl-11{-webkit-box-flex:0;-ms-flex:0 0 91.66667%;flex:0 0 91.66667%;max-width:91.66667%}.col-xl-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-xl-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-xl-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-xl-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-xl-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-xl-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-xl-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-xl-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-xl-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-xl-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-xl-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-xl-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-xl-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-xl-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-xl-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333%}.offset-xl-2{margin-left:16.66667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333%}.offset-xl-5{margin-left:41.66667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333%}.offset-xl-8{margin-left:66.66667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333%}.offset-xl-11{margin-left:91.66667%}}.table{width:100%;margin-bottom:1rem;color:#212529}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table-sm td,.table-sm th{padding:.3rem}.table-bordered,.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{color:#212529;background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8ecfb}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7bdbf8}.table-hover .table-primary:hover,.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#a0e6fa}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#b3b7bb}.table-hover .table-secondary:hover,.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e}.table-hover .table-success:hover,.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover,.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e}.table-hover .table-warning:hover,.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#fdcbcb}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#fb9e9e}.table-hover .table-danger:hover,.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#fcb2b2}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover,.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover,.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th,.table-hover .table-active:hover,.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#343a40}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:hsla(0,0%,100%,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:hsla(0,0%,100%,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;-webkit-transition:border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{-webkit-transition:none;transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.form-control:focus{color:#495057;background-color:#fff;border-color:#76defe;outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(2,186,242,.25);box-shadow:0 0 0 .2rem rgba(2,186,242,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}input[type=date].form-control,input[type=datetime-local].form-control,input[type=month].form-control,input[type=time].form-control{-webkit-appearance:none;-moz-appearance:none;appearance:none}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;font-size:1rem;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size],textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;left:0;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:#28a745;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8'%3E%3Cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;-webkit-box-shadow:0 0 0 .2rem rgba(40,167,69,.25);box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#28a745;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8'%3E%3Cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#28a745;-webkit-box-shadow:0 0 0 .2rem rgba(40,167,69,.25);box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label:before,.was-validated .custom-control-input:valid~.custom-control-label:before{border-color:#28a745}.custom-control-input.is-valid:checked~.custom-control-label:before,.was-validated .custom-control-input:valid:checked~.custom-control-label:before{border-color:#34ce57;background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label:before,.was-validated .custom-control-input:valid:focus~.custom-control-label:before{-webkit-box-shadow:0 0 0 .2rem rgba(40,167,69,.25);box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label:before,.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label:before,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;-webkit-box-shadow:0 0 0 .2rem rgba(40,167,69,.25);box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#f84545}.invalid-tooltip{position:absolute;top:100%;left:0;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(248,69,69,.9);border-radius:.25rem}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#f84545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23f84545'%3E%3Ccircle cx='6' cy='6' r='4.5'/%3E%3Cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3E%3Ccircle cx='6' cy='8.2' r='.6' fill='%23f84545' stroke='none'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#f84545;-webkit-box-shadow:0 0 0 .2rem rgba(248,69,69,.25);box-shadow:0 0 0 .2rem rgba(248,69,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#f84545;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23f84545'%3E%3Ccircle cx='6' cy='6' r='4.5'/%3E%3Cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3E%3Ccircle cx='6' cy='8.2' r='.6' fill='%23f84545' stroke='none'/%3E%3C/svg%3E") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#f84545;-webkit-box-shadow:0 0 0 .2rem rgba(248,69,69,.25);box-shadow:0 0 0 .2rem rgba(248,69,69,.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#f84545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#f84545}.custom-control-input.is-invalid~.custom-control-label:before,.was-validated .custom-control-input:invalid~.custom-control-label:before{border-color:#f84545}.custom-control-input.is-invalid:checked~.custom-control-label:before,.was-validated .custom-control-input:invalid:checked~.custom-control-label:before{border-color:#fa7676;background-color:#fa7676}.custom-control-input.is-invalid:focus~.custom-control-label:before,.was-validated .custom-control-input:invalid:focus~.custom-control-label:before{-webkit-box-shadow:0 0 0 .2rem rgba(248,69,69,.25);box-shadow:0 0 0 .2rem rgba(248,69,69,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label:before,.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label:before,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#f84545}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#f84545;-webkit-box-shadow:0 0 0 .2rem rgba(248,69,69,.25);box-shadow:0 0 0 .2rem rgba(248,69,69,.25)}.form-inline{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{-ms-flex-align:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.form-inline .form-group,.form-inline label{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;align-items:center;margin-bottom:0}.form-inline .form-group{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;-ms-flex-negative:0;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{-webkit-transition:none;transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(2,186,242,.25);box-shadow:0 0 0 .2rem rgba(2,186,242,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#02baf2;border-color:#02baf2}.btn-primary.focus,.btn-primary:focus,.btn-primary:hover{color:#fff;background-color:#029dcc;border-color:#0293bf}.btn-primary.focus,.btn-primary:focus{-webkit-box-shadow:0 0 0 .2rem rgba(40,196,244,.5);box-shadow:0 0 0 .2rem rgba(40,196,244,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#02baf2;border-color:#02baf2}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0293bf;border-color:#0189b3}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(40,196,244,.5);box-shadow:0 0 0 .2rem rgba(40,196,244,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary.focus,.btn-secondary:focus,.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{-webkit-box-shadow:0 0 0 .2rem rgba(130,138,145,.5);box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(130,138,145,.5);box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success.focus,.btn-success:focus,.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{-webkit-box-shadow:0 0 0 .2rem rgba(72,180,97,.5);box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(72,180,97,.5);box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info.focus,.btn-info:focus,.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{-webkit-box-shadow:0 0 0 .2rem rgba(58,176,195,.5);box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(58,176,195,.5);box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning.focus,.btn-warning:focus,.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{-webkit-box-shadow:0 0 0 .2rem rgba(222,170,12,.5);box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(222,170,12,.5);box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-danger{color:#fff;background-color:#f84545;border-color:#f84545}.btn-danger.focus,.btn-danger:focus,.btn-danger:hover{color:#fff;background-color:#f72020;border-color:#f61414}.btn-danger.focus,.btn-danger:focus{-webkit-box-shadow:0 0 0 .2rem rgba(249,97,97,.5);box-shadow:0 0 0 .2rem rgba(249,97,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#f84545;border-color:#f84545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#f61414;border-color:#f40909}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(249,97,97,.5);box-shadow:0 0 0 .2rem rgba(249,97,97,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light.focus,.btn-light:focus,.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{-webkit-box-shadow:0 0 0 .2rem rgba(216,217,219,.5);box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(216,217,219,.5);box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark.focus,.btn-dark:focus,.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{-webkit-box-shadow:0 0 0 .2rem rgba(82,88,93,.5);box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(82,88,93,.5);box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-link{font-weight:400;color:#02baf2;text-decoration:none}.btn-link:hover{color:#0180a6}.btn-link.focus,.btn-link:focus,.btn-link:hover{text-decoration:underline}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{-webkit-transition:opacity .15s linear;transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{-webkit-transition:none;transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{-webkit-transition:none;transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty:after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-toggle:after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";display:none}.dropleft .dropdown-toggle:before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty:after{margin-left:0}.dropleft .dropdown-toggle:before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#02baf2}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-toolbar{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split:after,.dropright .dropdown-toggle-split:after,.dropup .dropdown-toggle-split:after{margin-left:0}.dropleft .dropdown-toggle-split:before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio],.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;min-width:0;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label:after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-webkit-box;display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;z-index:1;display:block;min-height:1.5rem;padding-left:1.5rem;-webkit-print-color-adjust:exact;color-adjust:exact}.custom-control-inline{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;left:0;z-index:-1;width:1rem;height:1.25rem;opacity:0}.custom-control-input:checked~.custom-control-label:before{color:#fff;border-color:#02baf2;background-color:#02baf2}.custom-control-input:focus~.custom-control-label:before{-webkit-box-shadow:0 0 0 .2rem rgba(2,186,242,.25);box-shadow:0 0 0 .2rem rgba(2,186,242,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label:before{border-color:#76defe}.custom-control-input:not(:disabled):active~.custom-control-label:before{color:#fff;background-color:#a8eafe;border-color:#a8eafe}.custom-control-input:disabled~.custom-control-label,.custom-control-input[disabled]~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label:before,.custom-control-input[disabled]~.custom-control-label:before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label:before{pointer-events:none;background-color:#fff;border:1px solid #adb5bd}.custom-control-label:after,.custom-control-label:before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:""}.custom-control-label:after{background:no-repeat 50%/50% 50%}.custom-checkbox .custom-control-label:before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label:before{border-color:#02baf2;background-color:#02baf2}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(2,186,242,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label:before{background-color:rgba(2,186,242,.5)}.custom-radio .custom-control-label:before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(2,186,242,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label:before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label:after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-transform .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-transform .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out,-webkit-box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label:after{-webkit-transition:none;transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label:after{background-color:#fff;-webkit-transform:translateX(.75rem);transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(2,186,242,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center/8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#76defe;outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(2,186,242,.25);box-shadow:0 0 0 .2rem rgba(2,186,242,.25)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.custom-file{display:inline-block;margin-bottom:0}.custom-file,.custom-file-input{position:relative;width:100%;height:calc(1.5em + .75rem + 2px)}.custom-file-input{z-index:2;margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#76defe;-webkit-box-shadow:0 0 0 .2rem rgba(2,186,242,.25);box-shadow:0 0 0 .2rem rgba(2,186,242,.25)}.custom-file-input:disabled~.custom-file-label,.custom-file-input[disabled]~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label:after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]:after{content:attr(data-browse)}.custom-file-label{left:0;z-index:1;height:calc(1.5em + .75rem + 2px);font-weight:400;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label,.custom-file-label:after{position:absolute;top:0;right:0;padding:.375rem .75rem;line-height:1.5;color:#495057}.custom-file-label:after{bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:none}.custom-range:focus::-webkit-slider-thumb{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(2,186,242,.25);box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(2,186,242,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(2,186,242,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(2,186,242,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#02baf2;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#a8eafe}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#02baf2;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{-moz-transition:none;transition:none}}.custom-range::-moz-range-thumb:active{background-color:#a8eafe}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#02baf2;border:0;border-radius:1rem;-ms-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{-ms-transition:none;transition:none}}.custom-range::-ms-thumb:active{background-color:#a8eafe}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower,.custom-range::-ms-fill-upper{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label:before,.custom-file-label,.custom-select{-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label:before,.custom-file-label,.custom-select{-webkit-transition:none;transition:none}}.nav{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#02baf2}.nav-fill .nav-item,.nav-fill>.nav-link{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified>.nav-link{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;padding:.5rem 1rem}.navbar,.navbar .container,.navbar .container-fluid,.navbar .container-lg,.navbar .container-md,.navbar .container-sm,.navbar .container-xl{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat 50%;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm,.navbar-expand-sm .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md,.navbar-expand-md .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg,.navbar-expand-lg .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl,.navbar-expand-xl .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand,.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30'%3E%3Cpath stroke='rgba(0,0,0,0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a,.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand,.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:hsla(0,0%,100%,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:hsla(0,0%,100%,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:hsla(0,0%,100%,.5);border-color:hsla(0,0%,100%,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30'%3E%3Cpath stroke='rgba(255,255,255,0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-dark .navbar-text{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;min-height:1px;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem}.card-subtitle,.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-bottom:-.75rem;border-bottom:0}.card-header-pills,.card-header-tabs{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem;border-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom,.card-img-top{-ms-flex-negative:0;flex-shrink:0;width:100%}.card-img,.card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion{overflow-anchor:none}.accordion>.card{overflow:hidden}.accordion>.card:not(:last-of-type){border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:not(:first-of-type){border-top-left-radius:0;border-top-right-radius:0}.accordion>.card>.card-header{border-radius:0;margin-bottom:-1px}.breadcrumb{-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb,.breadcrumb-item{display:-webkit-box;display:-ms-flexbox;display:flex}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item:before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover:before{text-decoration:underline;text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-webkit-box;display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#02baf2;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0180a6;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:3;outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(2,186,242,.25);box-shadow:0 0 0 .2rem rgba(2,186,242,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:3;color:#fff;background-color:#02baf2;border-color:#02baf2}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{-webkit-transition:none;transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#02baf2}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#0293bf}a.badge-primary.focus,a.badge-primary:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(2,186,242,.5);box-shadow:0 0 0 .2rem rgba(2,186,242,.5)}.badge-secondary{color:#fff;background-color:#6c757d}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#545b62}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(108,117,125,.5);box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.badge-success{color:#fff;background-color:#28a745}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#1e7e34}a.badge-success.focus,a.badge-success:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(40,167,69,.5);box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.badge-info{color:#fff;background-color:#17a2b8}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#117a8b}a.badge-info.focus,a.badge-info:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(23,162,184,.5);box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.badge-warning{color:#212529;background-color:#ffc107}a.badge-warning:focus,a.badge-warning:hover{color:#212529;background-color:#d39e00}a.badge-warning.focus,a.badge-warning:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(255,193,7,.5);box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.badge-danger{color:#fff;background-color:#f84545}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#f61414}a.badge-danger.focus,a.badge-danger:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(248,69,69,.5);box-shadow:0 0 0 .2rem rgba(248,69,69,.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}a.badge-light.focus,a.badge-light:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(248,249,250,.5);box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#1d2124}a.badge-dark.focus,a.badge-dark:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(52,58,64,.5);box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;z-index:2;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#01617e;background-color:#ccf1fc;border-color:#b8ecfb}.alert-primary hr{border-top-color:#a0e6fa}.alert-primary .alert-link{color:#013a4b}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#812424;background-color:#fedada;border-color:#fdcbcb}.alert-danger hr{border-top-color:#fcb2b2}.alert-danger .alert-link{color:#591919}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{0%{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{0%{background-position:1rem 0}to{background-position:0 0}}.progress{height:1rem;line-height:0;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress,.progress-bar{display:-webkit-box;display:-ms-flexbox;display:flex;overflow:hidden}.progress-bar{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#02baf2;-webkit-transition:width .6s ease;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{-webkit-transition:none;transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.media{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.media-body{-webkit-box-flex:1;-ms-flex:1;flex:1}.list-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:.25rem}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#02baf2;border-color:#02baf2}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media (min-width:576px){.list-group-horizontal-sm{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:768px){.list-group-horizontal-md{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:992px){.list-group-horizontal-lg{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1200px){.list-group-horizontal-xl{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#01617e;background-color:#b8ecfb}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#01617e;background-color:#a0e6fa}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#01617e;border-color:#01617e}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#812424;background-color:#fdcbcb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#812424;background-color:#fcb2b2}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#812424;border-color:#812424}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0}a.close.disabled{pointer-events:none}.toast{-ms-flex-preferred-size:350px;flex-basis:350px;max-width:350px;font-size:.875rem;background-color:hsla(0,0%,100%,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);-webkit-box-shadow:0 .25rem .75rem rgba(0,0,0,.1);box-shadow:0 .25rem .75rem rgba(0,0,0,.1);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.25rem .75rem;color:#6c757d;background-color:hsla(0,0%,100%,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05);border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translateY(-50px);transform:translateY(-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{-webkit-transition:none;transition:none}}.modal.show .modal-dialog{-webkit-transform:none;transform:none}.modal.modal-static .modal-dialog{-webkit-transform:scale(1.02);transform:scale(1.02)}.modal-dialog-scrollable{display:-webkit-box;display:-ms-flexbox;display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{-ms-flex-negative:0;flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered:before{display:block;height:calc(100vh - 1rem);height:-webkit-min-content;height:-moz-min-content;height:min-content;content:""}.modal-dialog-centered.modal-dialog-scrollable{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable:before{content:none}.modal-content{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}.modal-footer>*{margin:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered:before{height:calc(100vh - 3.5rem);height:-webkit-min-content;height:-moz-min-content;height:min-content}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow:before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow:before,.bs-tooltip-top .arrow:before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow:before,.bs-tooltip-right .arrow:before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow:before,.bs-tooltip-bottom .arrow:before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow:before,.bs-tooltip-left .arrow:before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{top:0;left:0;z-index:1060;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover,.popover .arrow{position:absolute;display:block}.popover .arrow{width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow:after,.popover .arrow:before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=top]>.arrow:before,.bs-popover-top>.arrow:before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top]>.arrow:after,.bs-popover-top>.arrow:after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right]>.arrow:before,.bs-popover-right>.arrow:before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right]>.arrow:after,.bs-popover-right>.arrow:after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=bottom]>.arrow:before,.bs-popover-bottom>.arrow:before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow:after,.bs-popover-bottom>.arrow:after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header:before,.bs-popover-bottom .popover-header:before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left]>.arrow:before,.bs-popover-left>.arrow:before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow:after,.bs-popover-left>.arrow:after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{-ms-touch-action:pan-y;touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner:after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transition:-webkit-transform .6s ease-in-out;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{-webkit-transition:none;transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){-webkit-transform:translateX(100%);transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){-webkit-transform:translateX(-100%);transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transform:none;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;-webkit-transition:opacity 0s .6s;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{-webkit-transition:none;transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;-webkit-transition:opacity .15s ease;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{-webkit-transition:none;transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:no-repeat 50%/100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8'%3E%3Cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3E%3C/svg%3E")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{-webkit-box-sizing:content-box;box-sizing:content-box;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;-webkit-transition:opacity .6s ease;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{-webkit-transition:none;transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@-webkit-keyframes spinner-border{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes spinner-border{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:spinner-border .75s linear infinite;animation:spinner-border .75s linear infinite}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1;-webkit-transform:none;transform:none}}@keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1;-webkit-transform:none;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:spinner-grow .75s linear infinite;animation:spinner-grow .75s linear infinite}.spinner-grow-sm{width:1rem;height:1rem}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#02baf2!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0293bf!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#f84545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#f61414!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#02baf2!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#f84545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important}.rounded-right,.rounded-top{border-top-right-radius:.25rem!important}.rounded-bottom,.rounded-right{border-bottom-right-radius:.25rem!important}.rounded-bottom,.rounded-left{border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix:after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive:before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9:before{padding-top:42.85714%}.embed-responsive-16by9:before{padding-top:56.25%}.embed-responsive-4by3:before{padding-top:75%}.embed-responsive-1by1:before{padding-top:100%}.flex-row{-webkit-box-orient:horizontal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-column,.flex-row{-webkit-box-direction:normal!important}.flex-column{-webkit-box-orient:vertical!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-webkit-box-orient:horizontal!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse,.flex-row-reverse{-webkit-box-direction:reverse!important}.flex-column-reverse{-webkit-box-orient:vertical!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-webkit-box-flex:1!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-webkit-box-flex:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-webkit-box-flex:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-webkit-box-orient:horizontal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column,.flex-sm-row{-webkit-box-direction:normal!important}.flex-sm-column{-webkit-box-orient:vertical!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-webkit-box-flex:1!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-webkit-box-flex:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-webkit-box-flex:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-webkit-box-orient:horizontal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column,.flex-md-row{-webkit-box-direction:normal!important}.flex-md-column{-webkit-box-orient:vertical!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-webkit-box-flex:1!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-webkit-box-flex:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-webkit-box-flex:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-webkit-box-orient:horizontal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column,.flex-lg-row{-webkit-box-direction:normal!important}.flex-lg-column{-webkit-box-orient:vertical!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-webkit-box-flex:1!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-webkit-box-flex:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-webkit-box-flex:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-webkit-box-orient:horizontal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column,.flex-xl-row{-webkit-box-direction:normal!important}.flex-xl-column{-webkit-box-orient:vertical!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-webkit-box-flex:1!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-webkit-box-flex:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-webkit-box-flex:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;-ms-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;-ms-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important;user-select:none!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{top:0}.fixed-bottom,.fixed-top{position:fixed;right:0;left:0;z-index:1030}.fixed-bottom{bottom:0}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{-webkit-box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important;box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{-webkit-box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important;box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{-webkit-box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important;box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{-webkit-box-shadow:none!important;box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.stretched-link:after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:transparent}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#02baf2!important}a.text-primary:focus,a.text-primary:hover{color:#0180a6!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#494f54!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#0f6674!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important}.text-danger{color:#f84545!important}a.text-danger:focus,a.text-danger:hover{color:#e80909!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:hsla(0,0%,100%,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;word-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,:after,:before{text-shadow:none!important;-webkit-box-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]:after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}.container,body{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}}.btn-outline-primary{color:#02baf2;border-color:#02baf2;border-color:#d6e1e5}.btn-outline-primary:hover{color:#fff;background-color:#02baf2;border-color:#02baf2}.btn-outline-primary.focus,.btn-outline-primary:focus{-webkit-box-shadow:0 0 0 .2rem rgba(2,186,242,.5);box-shadow:0 0 0 .2rem rgba(2,186,242,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#02baf2;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#02baf2;border-color:#02baf2}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(2,186,242,.5);box-shadow:0 0 0 .2rem rgba(2,186,242,.5)}.btn-outline-secondary{color:#6c757d;border-color:#6c757d;border-color:#d6e1e5}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{-webkit-box-shadow:0 0 0 .2rem rgba(108,117,125,.5);box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(108,117,125,.5);box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;border-color:#28a745;border-color:#d6e1e5}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{-webkit-box-shadow:0 0 0 .2rem rgba(40,167,69,.5);box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(40,167,69,.5);box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;border-color:#17a2b8;border-color:#d6e1e5}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{-webkit-box-shadow:0 0 0 .2rem rgba(23,162,184,.5);box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(23,162,184,.5);box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;border-color:#ffc107;border-color:#d6e1e5}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{-webkit-box-shadow:0 0 0 .2rem rgba(255,193,7,.5);box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(255,193,7,.5);box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#f84545;border-color:#f84545;border-color:#d6e1e5}.btn-outline-danger:hover{color:#fff;background-color:#f84545;border-color:#f84545}.btn-outline-danger.focus,.btn-outline-danger:focus{-webkit-box-shadow:0 0 0 .2rem rgba(248,69,69,.5);box-shadow:0 0 0 .2rem rgba(248,69,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#f84545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#f84545;border-color:#f84545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(248,69,69,.5);box-shadow:0 0 0 .2rem rgba(248,69,69,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa;border-color:#d6e1e5}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{-webkit-box-shadow:0 0 0 .2rem rgba(248,249,250,.5);box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(248,249,250,.5);box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;border-color:#343a40;border-color:#d6e1e5}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{-webkit-box-shadow:0 0 0 .2rem rgba(52,58,64,.5);box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(52,58,64,.5);box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.navbar{padding:0}.navbar-nav{-ms-flex-preferred-size:100%;flex-basis:100%}.navbar-nav a{white-space:nowrap;color:#93a4aa}.navbar-nav .nav-link{padding-top:0;padding-bottom:0;line-height:4.5rem}.navbar-nav .dropdown-menu{background-color:#20282a;margin:0;border:0;border-radius:0;padding:0}.navbar-nav .dropdown-item{padding:0}.navbar-nav .dropdown-item:first-child,.navbar-nav .dropdown-item:last-child{border-radius:0}.navbar-nav .dropdown-item a{padding:0 15px;line-height:2.3rem;display:block;text-decoration:none;min-width:15rem}.navbar-nav .dropdown-item:hover{background-color:#364347}.navbar-nav .dropdown-item:hover a{color:#fff}.navbar-nav .pesquisa .dropdown-menu{min-width:15rem}.navbar-nav .search-form{padding:10px;min-width:20%}.navbar-nav a:not([href]):not([tabindex]){color:#777}.navbar-nav.justify-content-end .dropdown-menu{left:auto;right:0}.nav-pills .dropdown-menu{padding:0}.nav-pills .dropdown-item a{display:block}.nav-pills .dropdown-item.active a{color:#fff}@media (max-width:1199px){nav .container{max-width:none;-ms-flex-preferred-size:100%;flex-basis:100%}nav .caret{margin-left:-3px}}@media (max-width:1091px){.navbar-expand-lg .navbar-nav .nav-link{padding-left:4px;padding-right:4px;font-size:.95rem}}@media (max-width:991px){.navbar{padding:5px}.navbar-nav .nav-link{line-height:2.5rem}.navbar-nav.justify-content-end{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.navbar-nav.justify-content-end>li{display:inline-block}}@media (max-width:767px){.table{width:auto;white-space:normal;display:block;overflow-x:auto}}html{position:relative;min-height:100%}a,dd,div,dl,dt,form,h1,h2,h3,h4,h5,h6,img,p{margin:0;padding:0}.h1,h1{font-size:30px}.h2,h2{font-size:24px}.h3,h3{font-size:20px}.h4,h4{font-size:16px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:.25em 0}p.control-label{font-weight:700}label{margin-bottom:0;line-height:1}input[type=checkbox],input[type=radio]{margin:0 5px 0 0;position:relative}fieldset fieldset{font-size:95%}fieldset fieldset legend{font-size:18px}ul{margin:0}.hidden{display:none}.form-control-static{padding:.2em 0;padding-left:12px;background-color:#f7f7f7}.form-control-static:empty{display:none}.legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5;clear:both}.page-header{margin:20px 0 10px}.caret.top{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.lista-parlamentares .table td{vertical-align:middle}small{color:#777}.container-tabaux .sidebar-tabaux{background:#fafafa;margin-top:-70px;padding:10px;border:1px solid #eee}.container-tabaux .sidebar-tabaux .navbar-right{margin:0}.container-tabaux .sidebar-tabaux .nav-pills>li+li{margin-left:0}.container-tabaux .sidebar-tabaux li{width:100%}.container-tabaux .sidebar-tabaux span{display:none}.container-tabaux .sidebar-tabaux .dropdown-menu{padding:0;right:10px;margin-top:-5px;overflow:hidden}.container-tabaux .sidebar-tabaux .dropdown-menu a{border:0}.container-tabaux ul{list-style:none;padding:0}.container-tabaux .list{font-family:SourceSansProSemiBold,Helvetica,Arial,sans-serif;font-size:0}.container-tabaux .list,.container-tabaux .list ul{display:table;width:100%;margin:0}.container-tabaux .list li{width:50%;display:inline-block;position:relative}.container-tabaux .list>li{width:100%;border-bottom:1px solid #eee;padding-bottom:20px;margin-bottom:20px}.container-tabaux .list .head_title{color:#364347;font-size:1.7rem;text-transform:none}.container-tabaux .list a span,.mce-branding.mce-label{display:none}.dont-break-out{overflow-wrap:break-word;word-wrap:break-word;word-break:break-word}@media print{a[href]:after{content:none!important}}.container-home{position:relative;padding:2em 1.5em 1.5em 1.5em;max-width:1000px;margin:0 auto}.container-home a:hover{color:#444;-webkit-transition:.3s ease-in;-moz-transition:.3s ease-in;-o-transition:.3s ease-in}.container-home #homeIndex{text-align:center}.container-home .homeBanner span{color:#fff;font-size:32px;font-weight:600;display:inline-block;vertical-align:middle;padding:2px 45px 4px;border:2px solid}.container-home .homeBanner:after{display:inline-block;vertical-align:middle;height:100%}.container-home .homeBlock{display:inline-block;position:relative;background-color:#f3f3f3;width:190px;height:260px;margin:3px;text-align:center;font-size:0;overflow:hidden}.container-home .homeBlock>a{display:block;position:absolute;width:100%;height:100%;top:0;left:0}.container-home .homeBlock:after{content:"";display:inline-block;vertical-align:middle;height:100%;overflow:visible;clear:none;visibility:initial}.container-home .homeContent{position:relative;padding:10px;text-align:justify;font-size:14px;color:#fff;opacity:0;-webkit-transition:opacity .5s ease;transition:opacity .5s ease;display:inline-block;vertical-align:middle}.container-home .homeContent p{display:block;line-height:13px;font-size:80%;color:#fff}.container-home .homeIcon{position:relative;display:inline-block;width:105px;height:105px;border-radius:50%;background:#364347;z-index:1}.container-home .homeIcon:before{content:"";position:absolute;width:100%;height:100%;border-radius:50%;background:#364347;top:0;left:0;-webkit-transform:scale(.95);transform:scale(.95);-webkit-transition:-webkit-transform .6s ease;transition:-webkit-transform .6s ease;transition:transform .6s ease;transition:transform .6s ease,-webkit-transform .6s ease}.container-home .homeIcon img{position:absolute;margin:auto;top:0;bottom:0;right:0;left:0;-webkit-transition:opacity .4s ease .4s;transition:opacity .4s ease .4s}.container-home .homeFront{position:absolute;top:46%;width:100%;font-size:0;-webkit-transform:translateY(-60%);transform:translateY(-60%)}.container-home .homeFront h2{position:absolute;margin-top:18px;font-size:22px;font-weight:700;color:#595959!important;width:100%;padding:0 6%;z-index:0}.container-home .homeTitle{display:block;height:32px;text-align:center;width:100%;opacity:0;-webkit-transition:opacity .4s ease;transition:opacity .4s ease}.container-home .homeTitle:before{content:"";display:inline-block;vertical-align:middle;height:100%}.container-home .homeTitle h2{display:inline-block;vertical-align:middle;max-width:110px;font-size:14px;color:#fff!important;line-height:1em}.container-home .homeTitle img{display:inline-block;vertical-align:middle;height:30px;margin-right:5px}.container-home .homeBlock:hover .homeIcon:before{-webkit-transform:scale(3.6) translateY(7px);transform:scale(3.6) translateY(7px)}.container-home .homeBlock:hover .homeContent{opacity:1;-webkit-transition-delay:.2s;transition-delay:.2s}.container-home .homeBlock:hover .homeIcon img{opacity:0;-webkit-transition-duration:.2s;transition-duration:.2s;-webkit-transition-delay:0s;transition-delay:0s}.container-home .homeBlock:hover .homeTitle{opacity:1}.masthead{padding:10px}.masthead .navbar-brand{padding:0;font-size:24px}.masthead .navbar-brand img.img-responsive{height:95px;display:inline-block}.masthead .navbar-brand small{color:#93a4aa;font-size:75%;line-height:25px}.masthead .navbar-brand .vcenter{display:inline-block;vertical-align:middle;float:none;padding:10px;line-height:1.5rem}.masthead .nav-link{padding:.3rem .5rem;margin:0 1px}.masthead .nav-link:hover{background-color:#b2c6cd;color:#fff}@media (max-width:1091px){.masthead .navbar-brand{font-size:22px}.masthead .navbar-brand img.img-responsive{height:60px}}@media (max-width:767px){.masthead{text-align:center}.masthead .container{max-width:100%;padding:0}.masthead .navbar-brand{white-space:normal;margin:0}.masthead .navbar-brand .vcenter{display:block;line-height:1em}}@media (max-width:576px){.masthead .navbar-brand{font-size:1.2rem}}@media (max-width:360px){.masthead .navbar-brand{font-size:1rem}}body{margin-bottom:160px}.footer{background:#364347;color:#fff;text-align:center;position:absolute;width:100%;bottom:0}.footer p{color:#fff;margin-top:10px}.footer .container{padding-top:25px}@media (max-width:991px){.footer{position:relative}}.jcrop-holder{-ms-touch-action:none;direction:ltr;text-align:left}.jcrop-hline,.jcrop-vline{background:#fff url(data:image/gif;base64,R0lGODlhCAAIAJEAAKqqqv///wAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQJCgAAACwAAAAACAAIAAACDZQFCadrzVRMB9FZ5SwAIfkECQoAAAAsAAAAAAgACAAAAg+ELqCYaudeW9ChyOyltQAAIfkECQoAAAAsAAAAAAgACAAAAg8EhGKXm+rQYtC0WGl9oAAAIfkECQoAAAAsAAAAAAgACAAAAg+EhWKQernaYmjCWLF7qAAAIfkECQoAAAAsAAAAAAgACAAAAg2EISmna81UTAfRWeUsACH5BAkKAAAALAAAAAAIAAgAAAIPFA6imGrnXlvQocjspbUAACH5BAkKAAAALAAAAAAIAAgAAAIPlIBgl5vq0GLQtFhpfaIAACH5BAUKAAAALAAAAAAIAAgAAAIPlIFgknq52mJowlixe6gAADs=);font-size:0;position:absolute}.jcrop-vline{height:100%;width:1px!important}.jcrop-vline.right{right:0}.jcrop-hline{height:1px!important;width:100%}.jcrop-hline.bottom{bottom:0}.jcrop-tracker{-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none;-webkit-user-select:none;height:100%;width:100%}.jcrop-handle{background-color:#333;border:1px solid #eee;font-size:1px;height:7px;width:7px}.jcrop-handle.ord-n{left:50%;margin-left:-4px;margin-top:-4px;top:0}.jcrop-handle.ord-s{bottom:0;left:50%;margin-bottom:-4px;margin-left:-4px}.jcrop-handle.ord-e{margin-right:-4px;margin-top:-4px;right:0;top:50%}.jcrop-handle.ord-w{left:0;margin-left:-4px;margin-top:-4px;top:50%}.jcrop-handle.ord-nw{left:0;margin-left:-4px;margin-top:-4px;top:0}.jcrop-handle.ord-ne{margin-right:-4px;margin-top:-4px;right:0;top:0}.jcrop-handle.ord-se{bottom:0;margin-bottom:-4px;margin-right:-4px;right:0}.jcrop-handle.ord-sw{bottom:0;left:0;margin-bottom:-4px;margin-left:-4px}.jcrop-dragbar.ord-n,.jcrop-dragbar.ord-s{height:7px;width:100%}.jcrop-dragbar.ord-e,.jcrop-dragbar.ord-w{height:100%;width:7px}.jcrop-dragbar.ord-n{margin-top:-4px}.jcrop-dragbar.ord-s{bottom:0;margin-bottom:-4px}.jcrop-dragbar.ord-e{margin-right:-4px;right:0}.jcrop-dragbar.ord-w{margin-left:-4px}.jcrop-light .jcrop-hline,.jcrop-light .jcrop-vline{background:#fff;filter:alpha(opacity=70)!important;opacity:.7!important}.jcrop-light .jcrop-handle{-moz-border-radius:3px;-webkit-border-radius:3px;background-color:#000;border-color:#fff;border-radius:3px}.jcrop-dark .jcrop-hline,.jcrop-dark .jcrop-vline{background:#000;filter:alpha(opacity=70)!important;opacity:.7!important}.jcrop-dark .jcrop-handle{-moz-border-radius:3px;-webkit-border-radius:3px;background-color:#fff;border-color:#000;border-radius:3px}.solid-line .jcrop-hline,.solid-line .jcrop-vline{background:#fff}.jcrop-holder img,img.jcrop-preview{max-width:none}div.jcrop-image.size-warning .jcrop-hline,div.jcrop-image.size-warning .jcrop-vline{border:1px solid red;background:none}body.change-form .allow-fullsize+.help,body.change-form .jcrop-holder+.help{clear:left}body.change-form .jcrop-holder{float:left}div.allow-fullsize{padding:5px 0 0 10px} \ No newline at end of file diff --git a/sapl/static/sapl/frontend/css/global.80b7564c.css.gz b/sapl/static/sapl/frontend/css/global.80b7564c.css.gz new file mode 100644 index 000000000..e3c7f3983 Binary files /dev/null and b/sapl/static/sapl/frontend/css/global.80b7564c.css.gz differ diff --git a/sapl/static/sapl/frontend/fonts/fa-brands-400.13685372.ttf.gz b/sapl/static/sapl/frontend/fonts/fa-brands-400.13685372.ttf.gz deleted file mode 100644 index 71136e024..000000000 Binary files a/sapl/static/sapl/frontend/fonts/fa-brands-400.13685372.ttf.gz and /dev/null differ diff --git a/sapl/static/sapl/frontend/fonts/fa-brands-400.c1868c95.eot b/sapl/static/sapl/frontend/fonts/fa-brands-400.8300bd7f.ttf similarity index 78% rename from sapl/static/sapl/frontend/fonts/fa-brands-400.c1868c95.eot rename to sapl/static/sapl/frontend/fonts/fa-brands-400.8300bd7f.ttf index a1bc094ab..f07182514 100644 Binary files a/sapl/static/sapl/frontend/fonts/fa-brands-400.c1868c95.eot and b/sapl/static/sapl/frontend/fonts/fa-brands-400.8300bd7f.ttf differ diff --git a/sapl/static/sapl/frontend/fonts/fa-brands-400.8300bd7f.ttf.gz b/sapl/static/sapl/frontend/fonts/fa-brands-400.8300bd7f.ttf.gz new file mode 100644 index 000000000..5f826fe8d Binary files /dev/null and b/sapl/static/sapl/frontend/fonts/fa-brands-400.8300bd7f.ttf.gz differ diff --git a/sapl/static/sapl/frontend/fonts/fa-brands-400.a06da7f0.woff2 b/sapl/static/sapl/frontend/fonts/fa-brands-400.a06da7f0.woff2 deleted file mode 100644 index 141a90a9e..000000000 Binary files a/sapl/static/sapl/frontend/fonts/fa-brands-400.a06da7f0.woff2 and /dev/null differ diff --git a/sapl/static/sapl/frontend/fonts/fa-brands-400.ad527cc5.woff b/sapl/static/sapl/frontend/fonts/fa-brands-400.ad527cc5.woff new file mode 100644 index 000000000..277ab65bb Binary files /dev/null and b/sapl/static/sapl/frontend/fonts/fa-brands-400.ad527cc5.woff differ diff --git a/sapl/static/sapl/frontend/fonts/fa-brands-400.c1868c95.eot.gz b/sapl/static/sapl/frontend/fonts/fa-brands-400.c1868c95.eot.gz deleted file mode 100644 index be1bdcf2b..000000000 Binary files a/sapl/static/sapl/frontend/fonts/fa-brands-400.c1868c95.eot.gz and /dev/null differ diff --git a/sapl/static/sapl/frontend/fonts/fa-brands-400.13685372.ttf b/sapl/static/sapl/frontend/fonts/fa-brands-400.e2ca6541.eot similarity index 78% rename from sapl/static/sapl/frontend/fonts/fa-brands-400.13685372.ttf rename to sapl/static/sapl/frontend/fonts/fa-brands-400.e2ca6541.eot index 948a2a6cc..958684e26 100644 Binary files a/sapl/static/sapl/frontend/fonts/fa-brands-400.13685372.ttf and b/sapl/static/sapl/frontend/fonts/fa-brands-400.e2ca6541.eot differ diff --git a/sapl/static/sapl/frontend/fonts/fa-brands-400.e2ca6541.eot.gz b/sapl/static/sapl/frontend/fonts/fa-brands-400.e2ca6541.eot.gz new file mode 100644 index 000000000..cba852fa7 Binary files /dev/null and b/sapl/static/sapl/frontend/fonts/fa-brands-400.e2ca6541.eot.gz differ diff --git a/sapl/static/sapl/frontend/fonts/fa-brands-400.ec3cfdde.woff b/sapl/static/sapl/frontend/fonts/fa-brands-400.ec3cfdde.woff deleted file mode 100644 index 2a89d521e..000000000 Binary files a/sapl/static/sapl/frontend/fonts/fa-brands-400.ec3cfdde.woff and /dev/null differ diff --git a/sapl/static/sapl/frontend/fonts/fa-brands-400.f075c50f.woff2 b/sapl/static/sapl/frontend/fonts/fa-brands-400.f075c50f.woff2 new file mode 100644 index 000000000..47805d471 Binary files /dev/null and b/sapl/static/sapl/frontend/fonts/fa-brands-400.f075c50f.woff2 differ diff --git a/sapl/static/sapl/frontend/fonts/fa-regular-400.261d666b.eot.gz b/sapl/static/sapl/frontend/fonts/fa-regular-400.261d666b.eot.gz deleted file mode 100644 index 1d6f019bb..000000000 Binary files a/sapl/static/sapl/frontend/fonts/fa-regular-400.261d666b.eot.gz and /dev/null differ diff --git a/sapl/static/sapl/frontend/fonts/fa-regular-400.3c6879c4.woff b/sapl/static/sapl/frontend/fonts/fa-regular-400.3c6879c4.woff new file mode 100644 index 000000000..31f44b2d4 Binary files /dev/null and b/sapl/static/sapl/frontend/fonts/fa-regular-400.3c6879c4.woff differ diff --git a/sapl/static/sapl/frontend/fonts/fa-regular-400.db78b935.ttf b/sapl/static/sapl/frontend/fonts/fa-regular-400.49f00693.ttf similarity index 90% rename from sapl/static/sapl/frontend/fonts/fa-regular-400.db78b935.ttf rename to sapl/static/sapl/frontend/fonts/fa-regular-400.49f00693.ttf index abe99e20c..659527a68 100644 Binary files a/sapl/static/sapl/frontend/fonts/fa-regular-400.db78b935.ttf and b/sapl/static/sapl/frontend/fonts/fa-regular-400.49f00693.ttf differ diff --git a/sapl/static/sapl/frontend/fonts/fa-regular-400.49f00693.ttf.gz b/sapl/static/sapl/frontend/fonts/fa-regular-400.49f00693.ttf.gz new file mode 100644 index 000000000..445ca46b1 Binary files /dev/null and b/sapl/static/sapl/frontend/fonts/fa-regular-400.49f00693.ttf.gz differ diff --git a/sapl/static/sapl/frontend/fonts/fa-regular-400.4a74738e.woff2 b/sapl/static/sapl/frontend/fonts/fa-regular-400.4a74738e.woff2 new file mode 100644 index 000000000..0332a9bf9 Binary files /dev/null and b/sapl/static/sapl/frontend/fonts/fa-regular-400.4a74738e.woff2 differ diff --git a/sapl/static/sapl/frontend/fonts/fa-regular-400.261d666b.eot b/sapl/static/sapl/frontend/fonts/fa-regular-400.b01516c1.eot similarity index 89% rename from sapl/static/sapl/frontend/fonts/fa-regular-400.261d666b.eot rename to sapl/static/sapl/frontend/fonts/fa-regular-400.b01516c1.eot index 38cf2517a..bef9f7226 100644 Binary files a/sapl/static/sapl/frontend/fonts/fa-regular-400.261d666b.eot and b/sapl/static/sapl/frontend/fonts/fa-regular-400.b01516c1.eot differ diff --git a/sapl/static/sapl/frontend/fonts/fa-regular-400.b01516c1.eot.gz b/sapl/static/sapl/frontend/fonts/fa-regular-400.b01516c1.eot.gz new file mode 100644 index 000000000..1d0c41cba Binary files /dev/null and b/sapl/static/sapl/frontend/fonts/fa-regular-400.b01516c1.eot.gz differ diff --git a/sapl/static/sapl/frontend/fonts/fa-regular-400.c20b5b73.woff2 b/sapl/static/sapl/frontend/fonts/fa-regular-400.c20b5b73.woff2 deleted file mode 100644 index 7e0118e52..000000000 Binary files a/sapl/static/sapl/frontend/fonts/fa-regular-400.c20b5b73.woff2 and /dev/null differ diff --git a/sapl/static/sapl/frontend/fonts/fa-regular-400.db78b935.ttf.gz b/sapl/static/sapl/frontend/fonts/fa-regular-400.db78b935.ttf.gz deleted file mode 100644 index ed1e19d48..000000000 Binary files a/sapl/static/sapl/frontend/fonts/fa-regular-400.db78b935.ttf.gz and /dev/null differ diff --git a/sapl/static/sapl/frontend/fonts/fa-regular-400.f89ea91e.woff b/sapl/static/sapl/frontend/fonts/fa-regular-400.f89ea91e.woff deleted file mode 100644 index 24de566a5..000000000 Binary files a/sapl/static/sapl/frontend/fonts/fa-regular-400.f89ea91e.woff and /dev/null differ diff --git a/sapl/static/sapl/frontend/fonts/fa-solid-900.1ab236ed.ttf.gz b/sapl/static/sapl/frontend/fonts/fa-solid-900.1ab236ed.ttf.gz deleted file mode 100644 index 8b26d68a1..000000000 Binary files a/sapl/static/sapl/frontend/fonts/fa-solid-900.1ab236ed.ttf.gz and /dev/null differ diff --git a/sapl/static/sapl/frontend/fonts/fa-solid-900.1ab236ed.ttf b/sapl/static/sapl/frontend/fonts/fa-solid-900.205f07b3.ttf similarity index 74% rename from sapl/static/sapl/frontend/fonts/fa-solid-900.1ab236ed.ttf rename to sapl/static/sapl/frontend/fonts/fa-solid-900.205f07b3.ttf index 5b979039a..e07460843 100644 Binary files a/sapl/static/sapl/frontend/fonts/fa-solid-900.1ab236ed.ttf and b/sapl/static/sapl/frontend/fonts/fa-solid-900.205f07b3.ttf differ diff --git a/sapl/static/sapl/frontend/fonts/fa-solid-900.205f07b3.ttf.gz b/sapl/static/sapl/frontend/fonts/fa-solid-900.205f07b3.ttf.gz new file mode 100644 index 000000000..5fb15506f Binary files /dev/null and b/sapl/static/sapl/frontend/fonts/fa-solid-900.205f07b3.ttf.gz differ diff --git a/sapl/static/sapl/frontend/fonts/fa-solid-900.4451e1d8.woff b/sapl/static/sapl/frontend/fonts/fa-solid-900.4451e1d8.woff new file mode 100644 index 000000000..ef6b44744 Binary files /dev/null and b/sapl/static/sapl/frontend/fonts/fa-solid-900.4451e1d8.woff differ diff --git a/sapl/static/sapl/frontend/fonts/fa-solid-900.a0369ea5.eot b/sapl/static/sapl/frontend/fonts/fa-solid-900.8ac31674.eot similarity index 74% rename from sapl/static/sapl/frontend/fonts/fa-solid-900.a0369ea5.eot rename to sapl/static/sapl/frontend/fonts/fa-solid-900.8ac31674.eot index d3b77c223..5da4fa001 100644 Binary files a/sapl/static/sapl/frontend/fonts/fa-solid-900.a0369ea5.eot and b/sapl/static/sapl/frontend/fonts/fa-solid-900.8ac31674.eot differ diff --git a/sapl/static/sapl/frontend/fonts/fa-solid-900.8ac31674.eot.gz b/sapl/static/sapl/frontend/fonts/fa-solid-900.8ac31674.eot.gz new file mode 100644 index 000000000..8b704bc42 Binary files /dev/null and b/sapl/static/sapl/frontend/fonts/fa-solid-900.8ac31674.eot.gz differ diff --git a/sapl/static/sapl/frontend/fonts/fa-solid-900.8e1ed89b.woff2 b/sapl/static/sapl/frontend/fonts/fa-solid-900.8e1ed89b.woff2 new file mode 100644 index 000000000..120b3007e Binary files /dev/null and b/sapl/static/sapl/frontend/fonts/fa-solid-900.8e1ed89b.woff2 differ diff --git a/sapl/static/sapl/frontend/fonts/fa-solid-900.a0369ea5.eot.gz b/sapl/static/sapl/frontend/fonts/fa-solid-900.a0369ea5.eot.gz deleted file mode 100644 index bb052c19a..000000000 Binary files a/sapl/static/sapl/frontend/fonts/fa-solid-900.a0369ea5.eot.gz and /dev/null differ diff --git a/sapl/static/sapl/frontend/fonts/fa-solid-900.b15db15f.woff2 b/sapl/static/sapl/frontend/fonts/fa-solid-900.b15db15f.woff2 deleted file mode 100644 index 978a681a1..000000000 Binary files a/sapl/static/sapl/frontend/fonts/fa-solid-900.b15db15f.woff2 and /dev/null differ diff --git a/sapl/static/sapl/frontend/fonts/fa-solid-900.bea989e8.woff b/sapl/static/sapl/frontend/fonts/fa-solid-900.bea989e8.woff deleted file mode 100644 index beec79178..000000000 Binary files a/sapl/static/sapl/frontend/fonts/fa-solid-900.bea989e8.woff and /dev/null differ diff --git a/sapl/static/sapl/frontend/img/fa-brands-400.0cb5a5c0.svg.gz b/sapl/static/sapl/frontend/img/fa-brands-400.0cb5a5c0.svg.gz deleted file mode 100644 index a8b9e4762..000000000 Binary files a/sapl/static/sapl/frontend/img/fa-brands-400.0cb5a5c0.svg.gz and /dev/null differ diff --git a/sapl/static/sapl/frontend/img/fa-brands-400.0cb5a5c0.svg b/sapl/static/sapl/frontend/img/fa-brands-400.2f122423.svg similarity index 80% rename from sapl/static/sapl/frontend/img/fa-brands-400.0cb5a5c0.svg rename to sapl/static/sapl/frontend/img/fa-brands-400.2f122423.svg index 46ad237a6..2b7cf17b9 100644 --- a/sapl/static/sapl/frontend/img/fa-brands-400.0cb5a5c0.svg +++ b/sapl/static/sapl/frontend/img/fa-brands-400.2f122423.svg @@ -1,16 +1,12 @@ - -Created by FontForge 20190801 at Mon Mar 23 10:45:51 2020 +Created by FontForge 20200314 at Mon Oct 5 09:50:45 2020 By Robert Madole Copyright (c) Font Awesome - + + + + + + + + + + + + + + + + + + + + + + + + + + +d="M400 416c26.4922 0 48 -21.5078 48 -48v-352c0 -26.4922 -21.5078 -48 -48 -48h-137.25v152.31h57.7803l11 71.6904h-68.7803v46.5498c0 19.6104 9.61035 38.7305 40.4199 38.7305h31.2705v61s-28.3809 4.83984 -55.5205 4.83984 +c-56.6699 0 -93.6699 -34.3301 -93.6699 -96.4805v-54.6396h-63v-71.6904h63v-152.31h-137.25c-26.4922 0 -48 21.5078 -48 48v352c0 26.4922 21.5078 48 48 48h352z" /> +d="M22.2002 416l466.8 -0.200195c0.954102 -0.0136719 1.875 -0.0800781 2.7998 -0.200195c7.58789 -1.25 13.3994 -7.83203 13.3994 -15.7715c0 -0.860352 -0.0683594 -1.7041 -0.199219 -2.52832l-67.9004 -416.8c-1.24902 -7.58887 -7.84277 -13.4014 -15.7832 -13.4014 +c-0.0722656 0 -0.144531 0 -0.216797 0.000976562h-325.699c-10.7129 0.0869141 -19.5967 7.94727 -21.3008 18.2002l-67.8994 412.101c-0.116211 0.924805 -0.182617 1.84668 -0.200195 2.7998c0.108398 8.7373 7.23242 15.8008 15.9951 15.8008 +c0.0683594 0 0.136719 0 0.205078 -0.000976562zM308.1 118.2l25.2002 147h-157.3l28.0996 -147h104z" /> +d="M420.55 146.07c-13.2461 0 -24 10.7539 -24 24s10.7539 24 24 24s24 -10.7539 24 -24s-10.7539 -24 -24 -24zM155.45 146.07c-13.2461 0 -24 10.7539 -24 24s10.7539 24 24 24s24 -10.7539 24 -24s-10.7539 -24 -24 -24zM429.15 290.55l47.9395 83 +c1.06738 1.59082 1.69043 3.50391 1.69043 5.5625c0 5.51855 -4.48047 10 -10 10c-3.93359 0 -7.32812 -2.25684 -8.95996 -5.5625v0l-48.54 -84.0693c-37.5742 16.8516 -79.2197 26.2266 -123.037 26.2266c-43.8164 0 -85.9492 -9.375 -123.523 -26.2266l-48.54 84.0693 +c-1.63184 3.30566 -5.03809 5.58203 -8.97168 5.58203c-5.51953 0 -10 -4.48145 -10 -10c0 -2.05859 0.634766 -3.99121 1.70215 -5.58203v0l47.9395 -83c-82.3193 -44.7695 -138.609 -128.1 -146.85 -226.55h576c-8.24023 98.4502 -64.54 181.78 -146.85 226.55z" /> - + @@ -355,7 +558,7 @@ c-22.3994 0 -34.0996 13.0996 -34.0996 35.2998h100.2c0.0996094 2.2998 0.299805 4. d="M496 192c0 -137 -111.2 -248 -248.4 -248c-113.8 0 -209.6 76.2998 -239 180.4l95.2002 -39.3008c6.40039 -32.0996 34.9004 -56.3994 68.9004 -56.3994c39.2002 0 71.8994 32.3994 70.2002 73.5l84.5 60.2002c52.0996 -1.30078 95.7998 40.8994 95.7998 93.5 c0 51.5996 -42 93.5 -93.7002 93.5s-93.7002 -42 -93.7002 -93.5v-1.2002l-59.2002 -85.7002c-15.5 0.900391 -30.6992 -3.40039 -43.5 -12.0996l-133.1 55c10.2002 127.699 117.1 228.1 247.6 228.1c137.2 0 248.4 -111 248.4 -248zM155.7 63.7002 c19.7998 -8.2002 42.5 1.09961 50.7998 21c8.2998 19.7998 -1.09961 42.5 -20.9004 50.7002l-31.5 13c12.2002 4.59961 26 4.7998 38.9004 -0.600586c13 -5.39941 23.0996 -15.5996 28.5 -28.5996s5.2998 -27.2998 -0.0996094 -40.2998 -c-11.2002 -26.8008 -42.1006 -39.6006 -69 -28.4004c-10.2119 4.26953 -22.3975 15.8281 -27.2002 25.7998zM329.5 193.6c-34.4004 0 -62.4004 28 -62.4004 62.3008c0 34.2998 28 62.2998 62.4004 62.2998s62.4004 -28 62.4004 -62.2998 +c-11.2002 -26.8008 -42.1006 -39.6006 -69 -28.4004c-11.9453 4.99414 -21.6055 14.1826 -27.2002 25.7998zM329.5 193.6c-34.4004 0 -62.4004 28 -62.4004 62.3008c0 34.2998 28 62.2998 62.4004 62.2998s62.4004 -28 62.4004 -62.2998 c0 -34.3008 -27.9004 -62.3008 -62.4004 -62.3008zM329.6 209.2c25.9004 0 46.9004 21 46.9004 46.7998c0 25.9004 -21 46.7998 -46.9004 46.7998c-25.8994 0 -46.8994 -21 -46.8994 -46.7998c0.0996094 -25.7998 21.0996 -46.7998 46.8994 -46.7998z" /> +d="M42.9004 207.68l99.6191 -48.6094c19.2002 -9.40039 16.2002 -37.5107 -4.5 -42.71l-107.52 -26.8105c-1.78223 -0.448242 -3.64746 -0.685547 -5.56738 -0.685547c-11.7246 0 -21.3848 8.89453 -22.6426 20.2861c-0.853516 7.44141 -1.29297 15.0078 -1.29297 22.6768 +c0 21.9561 3.65723 42.9111 10.293 62.6426c3.03906 9.02148 11.5723 15.5264 21.6133 15.5264c3.5791 0 6.98145 -0.84375 9.99707 -2.31641zM86.9004 -31.5703c-6.01172 4.1123 -9.9248 11.0195 -9.9248 18.8457c0 5.85742 2.21191 11.2021 5.84473 15.2441l74.21 82.4004 +c14.3096 15.8105 40.5098 5.2002 39.8096 -16.0996l-3.89941 -110.82c-0.414062 -12.21 -10.4365 -22.0088 -22.7461 -22.0088c-1.32129 0 -2.61523 0.112305 -3.87402 0.329102c-28.9365 4.90039 -56.1416 16.1621 -79.4199 32.1094zM232.24 78.3496 +c-11.2998 18.1104 6.2002 40.4102 26.5098 33.9102l105.42 -34.2598c9.14453 -3.04102 15.7305 -11.6855 15.7305 -21.8447c0 -3.46289 -0.767578 -6.74805 -2.14062 -9.69531c-12.5361 -26.3281 -30.4697 -49.2246 -52.71 -67.6104 +c-3.96191 -3.26465 -9.03809 -5.25781 -14.5674 -5.25781c-8.18555 0 -15.375 4.29785 -19.4326 10.7578zM380.57 210.58c1.21289 -2.79883 1.93359 -5.89941 1.93359 -9.1416c0 -10.4385 -6.96875 -19.2627 -16.5039 -22.0684l-106.64 -30.5098 +c-20.5 -5.90039 -37.1006 17.0098 -25.2002 34.71l62 91.9199c4.10742 6.08398 11.0635 10.0615 18.9502 10.0615c5.76172 0 11.0283 -2.1377 15.0498 -5.66211c21.5781 -19.0479 38.7783 -42.5518 50.4102 -69.3096zM62.1104 417.82 +c34.3301 16.3438 72.6104 26.9434 112.33 30.0996c0.610352 0.0498047 1.20703 0.078125 1.83008 0.078125c12.5127 0 22.6709 -10.1582 22.6709 -22.6699c0 -0.0693359 -0.000976562 -0.138672 -0.000976562 -0.208008v-208.34 +c0 -23.2998 -30.9102 -31.6006 -42.6104 -11.4004l-104.12 180.44c-1.92871 3.35059 -3.06738 7.24805 -3.06738 11.3887c0 9.07422 5.29883 16.9199 12.9678 20.6113z" /> +d="M528.91 269.18c28.8652 -26.2666 46.9404 -64.1113 46.9404 -106.176c0 -0.0615234 -0.000976562 -0.12207 -0.000976562 -0.183594h0.0302734c-0.00195312 -79.4414 -64.5479 -143.928 -143.989 -143.928c-37.7363 0 -72.0996 14.5527 -97.7803 38.3477 +l-46.1104 -50.1699l-46.1396 50.1992c-25.6064 -23.4443 -59.8145 -37.7793 -97.2334 -37.7793c-79.4268 0 -143.911 64.4844 -143.911 143.911c0 41.8076 17.8662 79.4756 46.374 105.778l-47.0898 51.2402h104.66c52.2266 35.5498 115.938 56.3369 183.822 56.3369 +s130.95 -20.7871 183.178 -56.3369h104.34zM144.06 65.4297c53.751 0 97.3906 43.6396 97.3906 97.3906s-43.6396 97.3896 -97.3906 97.3896s-97.3896 -43.6387 -97.3896 -97.3896s43.6387 -97.3906 97.3896 -97.3906zM288 165.63c0 64.0801 46.6104 119.07 108.08 142.59 +c-33.2285 13.8467 -70.0527 21.4941 -108.272 21.4941c-38.2207 0 -74.6689 -7.64746 -107.897 -21.4941c61.4697 -23.5098 108.09 -78.5 108.09 -142.59zM431.88 65.4297c53.7568 0.00292969 97.4004 43.6475 97.4004 97.4053c0 53.7598 -43.6455 97.4053 -97.4053 97.4053 +c-53.7588 0 -97.4053 -43.6455 -97.4053 -97.4053c0 -53.7578 43.6436 -97.4023 97.4004 -97.4053h0.00976562zM144.06 213.88c0.0175781 0 0.0332031 -0.000976562 0.0507812 -0.000976562c28.1299 0 50.9717 -22.8242 51 -50.9492v-0.109375 +c0 -28.1807 -22.8799 -51.0605 -51.0605 -51.0605s-51.0596 22.8799 -51.0596 51.0605s22.8789 51.0596 51.0596 51.0596h0.00976562zM431.88 213.88c28.1807 0 51.0605 -22.8789 51.0605 -51.0596s-22.8799 -51.0605 -51.0605 -51.0605s-51.0596 22.8799 -51.0596 51.0605 +s22.8789 51.0596 51.0596 51.0596z" /> +d="M274.69 173.31l-108.69 -71.3096l71.3096 108.69zM256 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM411.85 265.21c-2.88672 -1.20801 -4.9082 -4.0625 -4.9082 -7.38574c0 -1.08496 0.21582 -2.12012 0.608398 -3.06445v0 +c1.20215 -2.90039 4.06348 -4.93457 7.39648 -4.93457c1.08105 0 2.1123 0.214844 3.05371 0.604492l14.75 6.11035c2.90234 1.20117 4.93848 4.06348 4.93848 7.39746c0 1.08496 -0.216797 2.11914 -0.608398 3.0625v0c-1.2002 2.90527 -4.06348 4.94336 -7.39941 4.94336 +c-1.08008 0 -2.11035 -0.214844 -3.05078 -0.603516zM314.43 354c-0.396484 -0.949219 -0.625 -1.99219 -0.625 -3.08496c0 -3.33398 2.04395 -6.19336 4.94531 -7.39551v0c0.941406 -0.388672 1.97461 -0.613281 3.05566 -0.613281 +c3.33301 0 6.19238 2.04297 7.39453 4.94336l6.12988 14.7803c0.389648 0.941406 0.613281 1.97461 0.613281 3.05566c0 3.33301 -2.04297 6.19238 -4.94336 7.39453v0c-0.944336 0.392578 -1.98047 0.618164 -3.06641 0.618164 +c-3.32324 0 -6.17578 -2.03125 -7.38379 -4.91797zM256 388c-4.41504 0 -8 -3.58496 -8 -8v-16c0 -4.41504 3.58496 -8 8 -8v0c4.41504 0 8 3.58496 8 8v16c0 4.41504 -3.58496 8 -8 8v0zM181 373.08c-2.89941 -1.20215 -4.93262 -4.0625 -4.93262 -7.39551 +c0 -1.06934 0.210938 -2.09082 0.592773 -3.02441l6.12988 -14.7803c1.16504 -2.97754 4.05762 -5.07812 7.44531 -5.07812c4.41602 0 8 3.58496 8 8c0 1.13672 -0.237305 2.21875 -0.665039 3.19824l-6.11035 14.75c-1.20117 2.90234 -4.06348 4.93848 -7.39746 4.93848 +c-1.08496 0 -2.11914 -0.216797 -3.0625 -0.608398zM117.42 330.59c-1.44727 -1.44824 -2.35254 -3.44922 -2.35254 -5.65625c0 -2.19141 0.883789 -4.17773 2.3125 -5.62402l11.3105 -11.3096c1.44727 -1.44727 3.44922 -2.34277 5.65527 -2.34277 +c2.20703 0 4.20605 0.895508 5.6543 2.34277v0c1.43848 1.44629 2.32715 3.44238 2.32715 5.6416c0 2.19824 -0.888672 4.19141 -2.32715 5.63867l-11.2695 11.3096c-1.44824 1.44727 -3.4502 2.34277 -5.65625 2.34277c-2.20703 0 -4.20605 -0.895508 -5.6543 -2.34277v0z +M60 192c0 -4.41504 3.58496 -8 8 -8h16c4.41504 0 8 3.58496 8 8v0c0 4.41504 -3.58496 8 -8 8h-16c-4.41504 0 -8 -3.58496 -8 -8v0zM100.15 118.79c2.88672 1.20801 4.9082 4.0625 4.9082 7.38574c0 1.08496 -0.21582 2.12012 -0.608398 3.06445v0 +c-1.20215 2.90039 -4.06348 4.93457 -7.39648 4.93457c-1.08105 0 -2.1123 -0.214844 -3.05371 -0.604492l-14.75 -6.11035c-2.90234 -1.20117 -4.93848 -4.06348 -4.93848 -7.39746c0 -1.08496 0.216797 -2.11914 0.608398 -3.0625v0 +c1.2002 -2.90527 4.06348 -4.94336 7.39941 -4.94336c1.08008 0 2.11035 0.214844 3.05078 0.603516zM104.48 254.79c0.386719 0.939453 0.609375 1.93945 0.609375 3.0166c0 3.33203 -2.04102 6.19043 -4.93945 7.39355l-14.7803 6.12988 +c-0.941406 0.389648 -1.97461 0.613281 -3.05566 0.613281c-3.33301 0 -6.19238 -2.04297 -7.39453 -4.94336v0c-0.392578 -0.944336 -0.618164 -1.98047 -0.618164 -3.06641c0 -3.32324 2.03125 -6.17578 4.91797 -7.38379l14.7803 -6.12012 +c0.945312 -0.393555 1.9834 -0.619141 3.07129 -0.619141c3.34668 0 6.21582 2.05957 7.40918 4.97949v0zM197.57 30c0.427734 0.979492 0.672852 2.07129 0.672852 3.20801c0 4.41602 -3.58496 8 -8 8c-3.38867 0 -6.28809 -2.11035 -7.45312 -5.08789l-6.12988 -14.7803 +c-0.389648 -0.941406 -0.611328 -1.9834 -0.611328 -3.06543c0 -4.41699 3.58594 -8.00293 8.00293 -8.00293c3.33496 0 6.19727 2.04492 7.39844 4.94824zM264 4v16c0 4.41504 -3.58496 8 -8 8v0c-4.41504 0 -8 -3.58496 -8 -8v-16c0 -4.41504 3.58496 -8 8 -8v0 +c4.41504 0 8 3.58496 8 8zM331 10.9199c2.89941 1.20215 4.93262 4.0625 4.93262 7.39551c0 1.06934 -0.210938 2.09082 -0.592773 3.02441l-6.12988 14.7803c-1.20215 2.90039 -4.06348 4.93457 -7.39648 4.93457c-1.08105 0 -2.1123 -0.214844 -3.05371 -0.604492v0 +c-2.90039 -1.20215 -4.93457 -4.06348 -4.93457 -7.39648c0 -1.08105 0.214844 -2.1123 0.604492 -3.05371l6.11035 -14.75c1.20117 -2.90234 4.06348 -4.93848 7.39746 -4.93848c1.08496 0 2.11914 0.216797 3.0625 0.608398v0zM394.58 53.4102 +c1.44727 1.44824 2.35254 3.44922 2.35254 5.65625c0 2.19141 -0.883789 4.17773 -2.3125 5.62402l-11.3105 11.3096c-1.44727 1.44727 -3.44922 2.34277 -5.65527 2.34277c-2.20703 0 -4.20605 -0.895508 -5.6543 -2.34277v0 +c-1.43848 -1.44629 -2.32715 -3.44238 -2.32715 -5.6416c0 -2.19824 0.888672 -4.19141 2.32715 -5.63867l11.2695 -11.3096c1.44824 -1.44727 3.4502 -2.34277 5.65625 -2.34277c2.20703 0 4.20605 0.895508 5.6543 2.34277v0zM286.25 161.75l115.41 175.91 +l-175.91 -115.41l-115.41 -175.91zM437.08 117c0.392578 0.944336 0.618164 1.98047 0.618164 3.06641c0 3.32324 -2.03125 6.17578 -4.91797 7.38379l-14.7803 6.12012c-0.949219 0.396484 -1.99219 0.625 -3.08496 0.625c-3.33398 0 -6.19336 -2.04395 -7.39551 -4.94531 +v0c-0.388672 -0.941406 -0.613281 -1.97461 -0.613281 -3.05566c0 -3.33301 2.04297 -6.19238 4.94336 -7.39453l14.7803 -6.12988c0.941406 -0.389648 1.97461 -0.613281 3.05566 -0.613281c3.33301 0 6.19238 2.04297 7.39453 4.94336v0zM444 184c4.41504 0 8 3.58496 8 8 +v0c0 4.41504 -3.58496 8 -8 8h-16c-4.41504 0 -8 -3.58496 -8 -8v0c0 -4.41504 3.58496 -8 8 -8h16z" /> +c0.119141 -0.120117 0.119141 -0.120117 0.119141 -0.240234c3.54297 -13.2549 6.04102 -27.1152 7.32031 -41.1494v-0.120117l0.360352 -4.67969v-0.120117c0 -1.56055 0.120117 -3.12012 0.239258 -4.68066z" /> +c1.84961 -3.23242 3.49902 -6.64551 4.88965 -10.1396c-4.21973 4.65039 -40.0596 44.2002 -99.0596 -1c-26.6719 -19.334 -46.8008 -46.8369 -56.9697 -78.9199c-14.1406 -40.4004 -12.8398 -88.5801 20.0996 -136c12.2471 -18.1914 27.9951 -33.3955 46.6396 -45z +M463.49 70.6602c2.1748 -1.37305 3.60742 -3.80176 3.60742 -6.56152c0 -1.53418 -0.447266 -2.96484 -1.21777 -4.16895c-47.5703 -75.4297 -127.86 -108.87 -163 -108.87c-22.7002 0 -48.1299 6.95996 -71.7002 19.6104c-33 17.6699 -49.4893 38.7598 -56 47.6699 +c-46.3301 63.5303 -28.25 122.29 -13.3301 151.66c9.73145 19.1172 22.8193 35.9404 38.7607 50c-4.04688 -8.04102 -6.40625 -17.168 -6.52051 -26.75c0 -80.9404 79.8506 -144 171.521 -144c0.116211 0 0.310547 0.0693359 0.426758 0.0693359 +c24.3125 0 47.6045 4.40137 69.123 12.4502c6.98145 2.61816 13.8652 5.69824 20.4102 9.12012c1.11328 0.618164 2.41113 0.970703 3.77441 0.970703c1.52344 0 2.94531 -0.44043 4.14551 -1.2002z" /> +d="M455.93 424.8c9.41992 2.40039 15.0703 -10.25 6.99023 -15.6797c-98.2295 -65.9199 -120.439 -127.561 -126.229 -160.18c-33.5205 -188.881 -101.37 -119.32 -184.311 -226.65c25.7607 -14.8125 55.8076 -23.3984 87.6299 -23.4004 +c97.6504 0 177.09 79.4502 177.09 177.11c-0.00488281 45.0508 -16.9824 86.25 -44.8496 117.41c4.72754 9.75293 10.4238 18.9131 17 27.3994c36.3574 -37.3457 58.75 -88.3779 58.75 -144.564v-0.245117c0 -114.87 -93.1299 -208 -208 -208s-208 93.1201 -208 208 +s93.1299 208 208 208c36.7422 -0.000976562 71.4697 -9.77246 101.35 -26.6602c46.4404 38.9697 87.8809 60.6602 114.58 67.46zM125 41.5996c64.7695 140.881 125.64 231.641 191.63 293.75c-23.0674 11.3037 -49.1611 17.75 -76.5615 17.75h-0.0683594 +c-97.6504 0 -177.1 -79.4395 -177.1 -177.1c0.0234375 -53.8203 24.0684 -102.002 62.0996 -134.4z" /> - + +c-3.24219 0.279297 -6.17676 1.69629 -8.36914 3.84961c-1.91016 2.76074 -3.81055 5.63086 -3.81055 8.38086c0.0205078 5.62988 3.86035 12.1992 13.2002 20.5498c44.4795 42.3701 67.3203 97 67.4795 165c0.180664 61.4697 -21.5898 112.45 -64.8193 154.06 +c-10.4004 10.6406 -16 17.1201 -16 21.9004c0 2.75977 1.91992 5.50977 3.83008 7.41992c2.35938 1.7207 5.26562 2.76855 8.38965 2.83984c8.51953 0 21 -8.79004 35.8799 -25.6904z" /> - + +d="M498.252 213.777c0.129883 -0.613281 0.322266 -1.21777 0.561523 -1.78223v-37.0557c-0.194336 -0.300781 -0.516602 -0.583008 -0.552734 -0.900391c-0.619141 -5.36426 -0.837891 -10.8076 -1.87012 -16.0869c-2.06934 -10.6074 -4.15723 -21.2393 -7.0166 -31.6523 +c-4.94531 -18.0205 -12.7578 -34.8809 -22.2998 -50.9258c-8.94336 -15.126 -19.4043 -28.9668 -31.4268 -41.6387c-3.74609 -3.92188 -7.54688 -7.80078 -11.5107 -11.5c-5.31152 -4.95703 -10.5146 -10.1094 -16.2998 -14.457 +c-9.3418 -7.02344 -18.9883 -13.6533 -28.7373 -20.1006c-15.083 -9.81543 -31.6211 -17.9053 -48.9512 -23.8174c-15.3828 -5.38281 -31.1533 -9.38574 -47.4893 -10.7178c-2.52734 -0.206055 -5.02051 -0.753906 -7.52734 -1.14258h-32.2891 +c-0.358398 0.245117 -0.762695 0.436523 -1.18945 0.55957c-6.1377 0.620117 -12.3418 0.863281 -18.4121 1.87305c-13.8301 2.22949 -27.5977 5.58398 -40.6416 9.83496c-19.5498 6.43359 -38.4463 15.0176 -55.8994 25.2773 +c-15.0488 8.79004 -28.9365 18.9688 -41.7871 30.5859c-9.6875 8.70605 -18.3936 18.0898 -26.3584 28.416c-9.38184 12.1963 -17.4385 25.4316 -24 39.5283c-7.5918 16.6592 -13.3467 34.7812 -16.7295 53.2998c-2.35547 13.1611 -3.85059 26.5459 -4.4248 40.2402 +c-0.136719 3.0332 -0.209961 5.74121 -0.209961 8.80859c0 9.05566 0.599609 17.9717 1.76172 26.7119c1.52637 11.874 4.15625 23.6367 7.69043 34.7588c5.05762 15.7021 12.0283 30.7871 20.4941 44.6006c9.58203 15.9961 20.7793 30.6025 33.6484 43.9502 +c9.55469 9.83496 19.7539 19.0605 29.9268 28.2676c5.70605 5.1582 11.8066 9.9082 17.9736 14.5186c12.0029 9.04004 24.6963 17.1025 38.0801 24.1572c12.5137 6.63281 25.9795 12.1963 39.7686 16.3555c10.9453 3.41016 22.5254 5.84375 34.2559 7.09961 +c2.42773 0.225586 4.82617 0.761719 7.23633 1.15039c10.7627 -0.00195312 21.5254 0 32.2881 0.00585938c0.299805 -0.195312 0.583984 -0.516602 0.899414 -0.552734c6.87793 -0.81543 13.8467 -1.16797 20.627 -2.48242 +c11.2432 -2.18359 22.4971 -4.51465 33.5156 -7.61523c19.999 -5.78125 39.2266 -14.2031 56.7227 -24.668c17.2832 -10.0947 32.9639 -22.1357 47.1133 -36.1152c6.71973 -6.90527 12.9209 -14.0508 18.8174 -21.6895c13.4639 -16.959 24.0283 -36.4561 30.874 -57.5 +c3.88867 -11.8086 7.16211 -24.2148 9.62207 -36.5996c2.0459 -10.1748 2.53809 -20.6602 3.74609 -31zM337.135 214.927l0.00488281 67.2695c-35.2686 0 -53.1152 -9.36719 -62.04 -36.1895v31.9316h-73.5176v-190.738h73.5127v93.667 +c0 22.1396 6.37012 37.04 33.5703 37.04c11.8984 0 28.4697 -2.98047 28.4697 -2.98047z" /> +c-0.0341797 0.227539 -0.0527344 0.459961 -0.0527344 0.697266c0 2.30566 1.70117 4.21387 3.91309 4.55273c0.240234 0.0400391 -2.12988 0 22.25 0c8.78027 0.879883 11.6396 -6.03027 12.5498 -10.3701l35.7197 -140.83l33.1602 140.83 +c0.530273 3.21973 2.94043 11.0693 12.7998 10.2393h17.1602c2.16992 0.180664 11.1104 0.5 12.6807 -10.3691l33.4199 -142.631l36.8701 142.631c0.479492 2.17969 2.71973 11.3691 12.6797 10.3691h19.7197c0.850586 0.130859 6.15039 0.810547 5.25 -8.5791 +c-0.429688 -1.85059 3.41016 10.6592 -52.75 -169.9c-1.14941 -5.50977 -4.82031 -11.0898 -12.6797 -10.3701h-18.6904c-10.9395 -1.15039 -12.5098 9.66016 -12.6797 10.75l-33.1602 137.13l-32.7803 -136.99c-0.15918 -1.08984 -1.72949 -11.8994 -12.6797 -10.75 +h-18.2998v-0.00976562zM538.39 183.92c-5.87988 -0.00976562 -33.9199 0.299805 -57.3594 12.29c-4.59375 1.94531 -7.81934 6.49609 -7.81934 11.7949c0 0.0410156 0.00878906 0.0742188 0.00878906 0.115234v10.75c0 8.4502 6.2002 6.89941 8.83008 5.88965 +c10.04 -4.05957 16.4805 -7.13965 28.8105 -9.59961c36.6494 -7.53027 52.7695 2.2998 56.7197 4.47949c13.1504 7.81055 14.1895 25.6807 5.25 34.9502c-10.4805 8.79004 -15.4805 9.12012 -53.1299 21c-4.64062 1.29004 -43.7002 13.6104 -43.79 52.3604 +c-0.610352 28.2402 25.0498 56.1797 69.5195 55.9502c12.6699 0.00976562 46.4307 -4.13086 55.5703 -15.6201c1.34961 -2.08984 2.01953 -4.5498 1.91992 -7.04004v-10.1104c0 -4.43945 -1.62012 -6.66016 -4.87012 -6.66016 +c-7.70996 0.860352 -21.3896 11.1699 -49.1602 10.75c-6.88965 0.360352 -39.8896 -0.910156 -38.4092 -24.9697c-0.430664 -18.96 26.6094 -26.0703 29.6992 -26.8896c36.46 -10.9707 48.6504 -12.79 63.1201 -29.5801c17.1406 -22.25 7.90039 -48.2998 4.35059 -55.4404 +c-19.0801 -37.4902 -68.4199 -34.4395 -69.2607 -34.4199zM578.59 79.0596c-70.0303 -51.7197 -171.689 -79.25 -258.49 -79.25c-1.0498 -0.00683594 -2.10059 -0.00976562 -3.15234 -0.00976562c-120.699 0 -230.949 45.7383 -314.117 120.74 +c-6.53027 5.88965 -0.770508 13.96 7.16992 9.46973c93.1143 -53.2637 200.925 -83.7148 315.791 -83.7148c0.138672 0 0.950195 -0.405273 1.08887 -0.405273c85.4404 0.458984 167.381 18.2432 241.59 49.5508c11.7803 5 21.7705 -7.80078 10.1201 -16.3809z +M607.78 112.35c-8.95996 11.5205 -59.2803 5.38086 -81.8105 2.69043c-6.79004 -0.770508 -7.93945 5.12012 -1.79004 9.46973c40.0703 28.1699 105.88 20.1006 113.44 10.6299c7.5498 -9.46973 -2.0498 -75.4092 -39.5605 -106.909 +c-5.75977 -4.87012 -11.2695 -2.30078 -8.70996 4.09961c8.44043 21.25 27.3906 68.4902 18.4307 80.0195z" /> @@ -1446,10 +1646,11 @@ c0.5 12.4004 0.5 18.1006 0 24.1006c2.5 65.2002 -14.7998 120 -46.1992 162.7z" /> +c-2.50586 -1.87988 -5.64258 -2.99316 -9.0127 -2.99316s-6.48145 1.11328 -8.9873 2.99316l-58.0596 43.46c-6.23047 4.65234 -13.9668 7.46582 -22.333 7.46582c-13.2803 0 -24.9512 -6.94434 -31.5771 -17.3965l-73 -115.569 +c-7.05078 -11.0703 6.64941 -23.6006 17.1094 -15.6699l78.3701 59.4395c2.50586 1.87891 5.64258 2.99316 9.0127 2.99316s6.48242 -1.11426 8.9873 -2.99316l58.0801 -43.4697c6.23047 -4.65039 13.9658 -7.46191 22.3301 -7.46191 +c13.2803 0 24.9512 6.94141 31.5801 17.3916z" /> d="M147.3 333.6v-70.5996l82.7998 118.2c31.2002 44.3994 83.3008 41.7998 113.601 12.7998c27.8994 -26.7002 27.7998 -65.0996 10.3994 -89.7998l-74.8994 -107.4l90.7998 -114.8c19.9004 -24.7998 19.5996 -64.5996 -7.40039 -92.2002 c-31.0996 -30.7002 -80.5 -27.2002 -103.199 0l-112.101 138.3v-76.5c0 -57.7998 -32.5996 -83.3994 -72.3994 -83.3994c-49.6006 0 -74.9004 36.0996 -74.9004 83.3994v283c0 45.2002 26.2002 81.4004 73.9004 81.4004c40.8994 0 73.3994 -26.2002 73.3994 -82.4004z" /> +d="M504.4 332.17c0.15625 -0.650391 0.240234 -1.32324 0.240234 -2.02051c0 -0.0234375 0 -0.046875 -0.000976562 -0.0693359v-109.85c0.000976562 -0.0244141 0.00878906 -0.0429688 0.00878906 -0.0673828c0 -2.96191 -1.61328 -5.5498 -4.00879 -6.93262 +l-92.2393 -53.1104v-105.26c0 -0.0078125 0.0078125 -0.00976562 0.0078125 -0.0166016c0 -2.96289 -1.61328 -5.55078 -4.00781 -6.93359l-192.561 -110.84c-0.442383 -0.231445 -0.916016 -0.428711 -1.39941 -0.580078 +c-0.180664 -0.0605469 -0.350586 -0.169922 -0.550781 -0.220703c-0.654297 -0.174805 -1.33789 -0.268555 -2.04688 -0.268555c-0.709961 0 -1.39844 0.09375 -2.05273 0.268555c-0.219727 0.0605469 -0.419922 0.180664 -0.629883 0.260742 +c-0.458008 0.143555 -0.908203 0.327148 -1.33008 0.540039l-192.5 110.84c-2.39551 1.38281 -4 3.96582 -4 6.92773v0.0224609v329.699c0.00195312 0.727539 0.0996094 1.42969 0.280273 2.10059c0.0839844 0.228516 0.181641 0.454102 0.290039 0.669922 +c0.133789 0.427734 0.307617 0.84668 0.509766 1.24023c0.149414 0.259766 0.370117 0.469727 0.549805 0.719727c0.21582 0.329102 0.450195 0.636719 0.709961 0.929688c0.250977 0.217773 0.512695 0.416016 0.790039 0.600586 +c0.274414 0.254883 0.56543 0.483398 0.879883 0.689453v0l96.2705 55.4199c1.1748 0.678711 2.55469 1.06738 4.00781 1.06738s2.81641 -0.388672 3.99219 -1.06738l96.29 -55.4199v0c0.307617 -0.210938 0.598633 -0.435547 0.879883 -0.679688 +c0.271484 -0.1875 0.529297 -0.385742 0.779297 -0.599609c0.260742 -0.298828 0.499023 -0.610352 0.720703 -0.94043c0.169922 -0.25 0.399414 -0.459961 0.540039 -0.719727c0.203125 -0.393555 0.379883 -0.813477 0.519531 -1.24023 +c0.0800781 -0.230469 0.219727 -0.44043 0.280273 -0.679688c0.181641 -0.661133 0.280273 -1.35352 0.280273 -2.07129v-0.0195312v-205.93l80.2197 46.1904v105.239c0.00292969 0.720703 0.100586 1.41602 0.280273 2.08008 +c0.0693359 0.240234 0.199219 0.450195 0.279297 0.680664c0.144531 0.427734 0.320312 0.850586 0.520508 1.25c0.149414 0.259766 0.370117 0.469727 0.540039 0.709961c0.21875 0.329102 0.457031 0.636719 0.719727 0.929688 +c0.248047 0.216797 0.505859 0.416016 0.780273 0.599609c0.277344 0.250977 0.568359 0.479492 0.879883 0.69043v0l96.2803 55.4502c1.1748 0.677734 2.55469 1.06641 4.00781 1.06641s2.81641 -0.388672 3.99219 -1.06641l96.2598 -55.4199 +c0.316406 -0.208984 0.613281 -0.433594 0.899414 -0.680664c0.25 -0.199219 0.540039 -0.379883 0.770508 -0.599609c0.260742 -0.298828 0.499023 -0.609375 0.719727 -0.94043c0.198242 -0.223633 0.376953 -0.458008 0.540039 -0.709961 +c0.207031 -0.396484 0.386719 -0.819336 0.530273 -1.25c0.106445 -0.217773 0.201172 -0.447266 0.280273 -0.679688zM111.6 430.72l-80.1895 -46.1602l80.1797 -46.1699l80.2002 46.1807l-80.1904 46.1494v0zM199.85 370.72l-33.6895 -19.4297l-46.5303 -26.79v-201.29 +l33.6904 19.4004l46.5293 26.79v201.319zM199.85 -42.0596l-0.109375 92.3594l-92.1904 52.1807v0v0c-0.301758 0.203125 -0.585938 0.421875 -0.859375 0.65918c-0.25 0.200195 -0.540039 0.360352 -0.770508 0.580078v0 +c-0.240234 0.265625 -0.458008 0.542969 -0.660156 0.839844c-0.21582 0.25 -0.414062 0.507812 -0.599609 0.780273v0c-0.166016 0.316406 -0.308594 0.655273 -0.419922 1c-0.149414 0.285156 -0.27832 0.589844 -0.379883 0.900391v0 +c-0.0820312 0.383789 -0.135742 0.77832 -0.160156 1.17969c-0.0595703 0.293945 -0.0996094 0.594727 -0.120117 0.900391v215.18l-46.5205 26.7998l-33.6895 19.3799v-311.18zM207.85 64.1104l117.62 67.1494l58.7998 33.5605l-80.1299 46.1299l-92.2598 -53.1104 +l-84.0898 -48.4102zM392.37 59.54v91.4102l-45.7705 -26.1504l-130.72 -74.5996v-92.3105zM392.37 178.67v91.3301l-46.5303 26.8096l-33.6895 19.4004v-91.4199l46.5293 -26.79zM400.37 283.95l80.1797 46.1797l-80.1797 46.1504l-80.2002 -46.1602zM408.37 178.67 +l80.3096 46.1504v0v91.3896l-33.6797 -19.4004l-46.6299 -26.8096v-91.3301z" /> +d="M104.324 178.828v26.1777h26.0664v-26.1777h-26.0664zM156.79 205.006h-26.3428v26.1777c-0.124023 7.05762 -5.8916 12.748 -12.9785 12.748c-7.08594 0 -12.8535 -5.69043 -12.9775 -12.748v-0.166016h-26.4004v0.166016 +c-0.000976562 0.119141 -0.000976562 0.220703 -0.000976562 0.339844c0 21.7041 17.6211 39.3242 39.3242 39.3242c21.5039 0 38.999 -17.2959 39.3213 -38.7227v-0.941406zM209.146 179.16v26.0117h26.3438v-26.0117 +c0 -0.0371094 -0.000976562 -0.0722656 -0.000976562 -0.109375c0 -64.7373 -52.5439 -117.3 -117.274 -117.331h-0.774414c-0.0380859 0 -0.0732422 0.000976562 -0.110352 0.000976562c-64.7373 0 -117.299 52.543 -117.33 117.273v0.166016h26.3369 +c0 -50.2793 40.8203 -91.1006 91.0996 -91.1006h0.609375c50.2793 0 91.1006 40.8213 91.1006 91.1006zM51.9131 179.16v25.96h-26.291v25.3994c0 50.6445 41.1162 91.7617 91.7607 91.7617s91.7607 -41.1172 91.7607 -91.7617v-25.293h-26.3438v25.293v0.200195 +c0 36.1055 -29.3135 65.4199 -65.4199 65.4199c-35.7656 0 -64.8672 -28.7646 -65.4121 -64.4023v-26.6201h26.2891v-25.957c0.356445 -21.2305 17.7031 -38.3564 39.0176 -38.3564s38.6611 17.126 39.0176 38.3564h26.3438 +c-0.140625 -35.9551 -29.374 -65.1016 -65.3613 -65.1016s-65.2207 29.1465 -65.3613 65.1016zM470.313 250.333c-11.3467 0 -20.8633 -4.75977 -24.2402 -12.1172v-8.41211c2.21875 -4.53809 6.30859 -7.69238 12.6191 -9.62988 +c4.75879 -1.37891 9.76562 -2.3623 14.832 -2.87793c6.36426 -0.827148 13.0068 -1.71484 20.6992 -4.42676c13.7256 -4.59375 24.0742 -13.2275 28.9443 -24.2412l0.166016 -0.664062l-0.166016 -25.8994c-7.69238 -17.0479 -28.668 -28.4473 -52.2998 -28.4473 +c-25.6797 0 -47.374 12.6182 -55.2891 32.0439l-0.552734 1.43848l23.0205 11.5078l0.719727 -1.49414c5.97754 -12.1211 17.5996 -19.0391 31.9336 -19.0391c12.0098 0 22.083 4.81445 25.791 12.3418v9.85059c-2.37988 4.59473 -6.47656 7.75098 -12.8398 9.85156 +c-5.20312 1.71582 -10.3506 2.37988 -15.8291 3.09961c-6.78809 0.675781 -13.4814 2.04199 -19.8135 3.98438c-14.1123 4.87109 -23.9678 13.2275 -28.668 24.2412c-0.158203 0.949219 -0.123047 -2.02637 0 24.8496c7.36133 17.0469 27.8379 28.4473 50.9727 28.4473 +c24.9062 0 45.3818 -12.0098 53.4062 -31.2705l0.609375 -1.43848l-23.2451 -11.5117l-0.71875 1.5498c-5.47949 11.6221 -16.3818 18.2637 -30.0518 18.2637zM287.568 136.656v68.3994h26.0664v-68.3994h-26.0664zM639.834 189.956l0.166016 -0.722656l-0.166016 -28.8906 +c-7.52734 -15.9941 -27.8916 -26.7305 -50.584 -26.7305s-43.0029 10.7363 -50.585 26.7305l-0.166016 0.720703l0.166016 28.8887c2.93262 6.25391 8.24121 12.0137 15.4414 16.7139c-5.57422 3.90332 -10.0391 9.14453 -13.0068 15.3311l-0.166016 0.664062 +l0.166016 25.3467c7.36133 15.9922 26.7334 26.7324 48.1504 26.7324s40.7881 -10.7402 48.1504 -26.7295l0.166016 -0.664062l-0.166016 -25.3467c-2.90137 -6.22852 -7.38379 -11.4873 -13.0078 -15.3301c7.1416 -4.7041 12.5088 -10.46 15.4414 -16.7139z +M566.614 240.762v-13.7246c3.48535 -6.19922 12.5068 -10.3486 22.5801 -10.3486c10.0723 0 19.0938 4.14844 22.6357 10.3486v13.7246c-3.59766 6.31055 -12.6191 10.5166 -22.6357 10.5166c-10.0176 0 -18.9805 -4.20605 -22.5801 -10.5166zM613.933 168.593v16.1572 +c-3.76367 6.36523 -13.3379 10.5146 -24.6826 10.5146c-11.1836 0 -20.9756 -4.20605 -24.6836 -10.5146v-16.1572c3.70801 -6.52734 13.5586 -10.8994 24.6836 -10.8994c11.3447 0 20.9189 4.25879 24.6826 10.8994zM376.4 182.038v89.7129h25.8994v-135.095h-25.6777 +l-62.5391 94.085v0.386719h-26.5098v40.623h29z" /> +d="M284.046 223.2c0.0341797 0 0.0664062 -0.00195312 0.100586 -0.00195312c18.8496 0 34.1592 -15.2754 34.2168 -34.1113c0 -18.8281 -15.2822 -34.1143 -34.1104 -34.1143s-34.1143 15.2861 -34.1143 34.1143c0 18.7588 15.1748 34.002 33.9072 34.1133zM173.596 223.2 +c0.0332031 0 0.0673828 -0.00195312 0.100586 -0.00195312c18.8496 0 34.1592 -15.2754 34.2168 -34.1113c0 -18.8281 -15.2822 -34.1143 -34.1104 -34.1143s-34.1143 15.2861 -34.1143 34.1143c0 18.7588 15.1748 34.002 33.9072 34.1133zM394.519 223.2 +c0.0351562 0 0.0683594 -0.00195312 0.102539 -0.00195312c18.8496 0 34.1592 -15.2754 34.2148 -34.1113c0 -18.8281 -15.2822 -34.1143 -34.1104 -34.1143s-34.1133 15.2861 -34.1133 34.1143c0 18.7588 15.1738 34.002 33.9062 34.1133zM548.326 278.519 +c17.3076 -26.9443 26.0674 -55.9189 26.0898 -86.9395c0 -30.209 -8.76074 -59.2021 -26.0703 -86.125c-15.5342 -24.1934 -37.3076 -45.5703 -64.6787 -63.6191c-52.8672 -34.8164 -122.354 -53.9746 -195.667 -53.9746 +c-0.150391 -0.000976562 0.0664062 -0.00585938 -0.0830078 -0.00585938c-24.5488 0 -48.5908 2.18359 -71.9443 6.36621c-14.8564 -14.2842 -31.3604 -26.5059 -49.5098 -36.5889c-66.7744 -33.3467 -125.6 -20.9092 -155.324 -10.2002 +c-5.54492 1.96289 -9.51758 7.25488 -9.51758 13.4697c0 3.82715 1.50879 7.30469 3.96289 9.87109c20.9619 21.6748 55.6416 64.5342 47.1162 103.49c-33.1426 33.9004 -51.1123 74.7764 -51.1123 118.148c0 42.5605 17.9697 83.4365 51.1123 117.337 +c8.52148 38.9521 -26.1582 81.7939 -47.1201 103.47c-2.45996 2.56738 -3.97656 6.0498 -3.97656 9.88281c0 6.21973 3.98047 11.5156 9.53125 13.4785c29.7246 10.71 88.5488 23.1211 155.302 -10.2109c18.1504 -10.0811 34.6553 -22.3027 49.5107 -36.5879 +c23.3457 4.18066 47.0137 6.35742 71.5547 6.35742c0.15918 0 0.318359 -0.000976562 0.476562 -0.000976562c73.293 0 142.78 -19.1826 195.666 -54c27.3711 -18.0479 49.1465 -39.4453 64.6816 -63.6182zM284.987 38.0996c128.612 0 232.866 67.376 232.866 150.487 +c0 83.0957 -104.274 150.469 -232.866 150.469c-128.593 0 -232.847 -67.3691 -232.847 -150.469c0 -36.2002 19.7861 -69.4375 52.7783 -95.4004c9.28809 -29.5986 3.84668 -62.958 -16.3252 -100.078c-0.960938 -1.79297 -1.8584 -3.58496 -2.8418 -5.35645 +c18.6367 1.63574 36.5557 6.875 52.5225 14.8701c13.5889 7.65625 25.9609 16.8633 37.1377 27.585l20.1289 19.3926c28.2617 -7.47852 57.8037 -11.501 88.4033 -11.501c0.347656 0 0.695312 0 1.04297 0.000976562z" /> @@ -2146,11 +2358,11 @@ c-0.5 -2 -1.7998 -3.7002 -3.59961 -4.7002l-61 -35.1992c-2.2002 -1.30078 -5 -1.40 c2.39941 1.40039 5.2998 1.2002 7.39941 0l61.1006 -35.2002c2.2998 -1.2998 3.89941 -3.7998 3.89941 -6.39941v-70.4004zM230.5 310.4l-0.799805 -0.5h1.09961zM306.7 180.2l-0.400391 0.700195v-0.900391z" /> +c-0.0830078 3.7627 -0.750977 7.4043 -1.89941 10.8008c-10.4102 -9.2002 -16.4004 -18.8008 -19 -24.5c-6.7002 -14.6006 -7 -19.3008 -5 -20.7002z" /> +d="M313.6 -26.5996c4.40039 -4.40039 8.10059 -9 13.3008 -12.5c-21.7051 -6.54492 -44.666 -10.1084 -68.4922 -10.1084c-0.636719 0 -1.27246 0.00292969 -1.9082 0.0078125c-135 0 -244.5 109.5 -244.5 244.601c0 135.1 109.4 244.6 244.5 244.6 +s244.6 -109.5 244.6 -244.6c0 -35.3008 -6.89941 -67.4004 -20.2998 -97.7002c-3 5.7002 -7.2002 10.2002 -11.2002 15.2998c11.2002 93.5 -62.0996 176.6 -157 176.6c-87.2578 0 -158.1 -70.8418 -158.1 -158.1s70.8418 -158.1 158.1 -158.1h1zM313.5 -26.5 +l0.400391 -0.0996094zM391.9 142.4c54.7393 0 99.1992 -44.4414 99.1992 -99.1797v-0.0205078c0 -54.75 -44.4492 -99.2002 -99.1992 -99.2002s-99.2002 44.4502 -99.2002 99.2002s44.4502 99.2002 99.2002 99.2002z" /> +d="M286.17 29c9.93457 0 18 -8.06543 18 -18s-8.06543 -18 -18 -18s-18 8.06543 -18 18s8.06543 18 18 18zM398.09 176.6c22.9102 -33.46 35.9102 -72.3398 35.9102 -110.92c0 -31.6797 -5 -60.6797 -14.5996 -86.2295 +c-3.04004 -8.0498 -10.9502 -12.7197 -18.3701 -11.1504c-6.83984 1.24023 -11.1201 9.28027 -8.60059 15.7402c11.1904 28.71 14.8799 58.3398 14.8799 81.6396c-0.0634766 9.75 -1.02246 19.1807 -2.7998 28.4307c-0.649414 -1.06055 -1.12988 -2.2207 -1.84961 -3.2207 +c-17.29 -24.5293 -50.54 -33.8896 -84.7402 -23.8398c-78.8701 23.1699 -178.02 3.81055 -236.25 -38.5898l24.6602 74.1104l-46.8203 -59.8301c2.4834 -18.6582 7.96191 -36.7539 15.7598 -53.1299c6.25 -13.1904 0.460938 -18.2402 -3.75 -20.1104 +c-4.76953 -2.12012 -13.8594 -2.7998 -19.6396 7.33008c-6.41504 11.584 -11.4131 24.3486 -14.5596 37.5596l-23.3203 -29.7998v33.6406c0 55.7695 0 125.109 62.6504 188.409c13.7461 13.917 29.1787 25.7891 46.29 35.54l-8.93066 0.540039 +c-27.8799 1.64062 -49.2402 24.8506 -47.6299 51.8506l2.36035 36.6797c0 -6.24023 0.139648 45.8799 50.75 45.8799c2.05957 0 -0.470703 0.120117 41.0596 -2.33008c2.82715 -0.19043 5.60742 -0.616211 8.29004 -1.25c7.41992 11.3398 15.6504 22.8301 24.3398 34.8906 +l5.48047 7.55957l22.8994 -13.5195c-11.29 -24 -10 -33 -9.39941 -35c9.08008 0.229492 20 -1.6709 32.4102 -5.77051c31.2002 -10.3584 53.6846 -39.8262 53.6846 -74.4844c0 -10.4883 -2.0625 -20.498 -5.80469 -29.6455 +c6.18652 -2.13965 12.3135 -4.56348 18.3799 -7.27051c47.8896 -21.2598 77.7598 -59.0898 87.2598 -73.71zM142.37 319.42c1.87695 6.54492 4.25684 13.041 7 19.1699l-29.1104 1.73047c0.610352 -0.0507812 -12.2598 0.849609 -13.2598 -11.3203l-2.41016 -36.6602 +c-0.00683594 -0.174805 -0.00292969 -0.34375 -0.00292969 -0.520508c0 -6.60449 5.22461 -11.998 11.7627 -12.2695l22.3809 -1.33984c-0.457031 3.73438 -0.692383 7.34863 -0.692383 11.2061c0 2.81836 0.125977 5.6084 0.37207 8.36426l-13.1299 0.779297l1.38965 21.79 +zM290.79 147.24c2.27441 1.75195 3.72949 4.50586 3.72949 7.59668c0 2.19922 -0.742188 4.22559 -1.98926 5.84277l-81.0898 96.3203c-1.9043 2.21094 -4.72949 3.60156 -7.87305 3.60156c-2.42578 0 -4.65918 -0.833984 -6.42773 -2.23145 +c-2.27344 -1.74805 -3.72754 -4.49902 -3.72754 -7.58594c0 -2.19531 0.741211 -4.21973 1.98828 -5.83398c0.0898438 -0.140625 18.5996 -22.1406 18.5996 -22.1406l-16.9102 -13.29c-1.75879 -1.34863 -2.88477 -3.47461 -2.88477 -5.86133 +c0 -1.68359 0.564453 -3.23633 1.51465 -4.47852c0.0800781 -0.109375 2.37988 -2.91113 3.7998 -4.5293c1.4209 -1.61914 3.50977 -2.63477 5.83105 -2.63477c1.79395 0 3.44531 0.610352 4.75977 1.63477l17.0898 13.4492l14.1396 -16.7393l-34.5703 -27.1807 +c-1.74805 -1.34961 -2.86621 -3.46875 -2.86621 -5.84668c0 -1.69043 0.569336 -3.24805 1.52637 -4.49316l15.7803 -18.6396c1.48438 -1.72363 3.68555 -2.80762 6.13574 -2.80762c1.88379 0 3.61816 0.645508 4.99414 1.72754l34.4199 27l9.68066 -11.4902 +c1.92676 -2.2041 4.76465 -3.58789 7.91992 -3.58789c2.4209 0 4.65234 0.820312 6.42969 2.19824zM187.44 29c9.93359 0 18 -8.06543 18 -18s-8.06641 -18 -18 -18c-9.93457 0 -18 8.06543 -18 18s8.06543 18 18 18z" /> +d="M433 268.89c0 0 0.799805 -71.6992 -9 -121.5c-6.23047 -31.5996 -55.1104 -66.1992 -111.23 -72.8994c-20.0996 -2.40039 -93.1191 -14.2002 -178.75 6.7002c0 -0.116211 -0.00390625 -0.119141 -0.00390625 -0.235352c0 -4.63281 0.307617 -9.19434 0.904297 -13.665 +c6.62988 -49.5996 49.2197 -52.5996 89.6299 -54c40.8105 -1.2998 77.1201 10.0996 77.1201 10.0996l1.7002 -36.8994s-28.5098 -15.2998 -79.3203 -18.1006c-28.0098 -1.59961 -62.8193 0.700195 -103.33 11.4004c-112.229 29.7002 -105.63 173.4 -105.63 289.1 +c0 97.2002 63.7197 125.7 63.7197 125.7c61.9209 28.4004 227.96 28.7002 290.48 0c0 0 63.71 -28.5 63.71 -125.7zM357.88 143.69c0 122 5.29004 147.71 -18.4199 175.01c-25.71 28.7002 -79.7197 31 -103.83 -6.10059l-11.5996 -19.5l-11.6006 19.5 +c-24.0098 36.9004 -77.9297 35 -103.83 6.10059c-23.6094 -27.1006 -18.4092 -52.9004 -18.4092 -175h46.7295v114.2c0 49.6992 64 51.5996 64 -6.90039v-62.5098h46.3301v62.5c0 58.5 64 56.5996 64 6.89941v-114.199h46.6299z" /> +s-211.51 -94.6895 -211.51 -211.51s94.7002 -211.51 211.51 -211.51zM434.23 143.47c-4.46582 -17.1914 -11.3633 -33.7256 -20.1309 -48.6895l-74.1299 35.8799l61.4805 -54.8203c-10.709 -14.1553 -23.0713 -26.5469 -37.2002 -37.29l-54.7998 61.5703l35.8799 -74.2705 +c-14.9385 -8.80469 -31.4502 -15.7354 -48.6299 -20.2295l-27.29 78.4697l4.79004 -82.9297c-8.61035 -1.17969 -17.4004 -1.7998 -26.3301 -1.7998s-17.7197 0.620117 -26.3301 1.7998l4.75977 82.46l-27.1494 -78.0303 +c-17.1836 4.48828 -33.7021 11.4092 -48.6504 20.2002l35.9297 74.3398l-54.8701 -61.6396c-14.1318 10.7412 -26.5 23.1299 -37.2197 37.2793l61.5898 54.9004l-74.2598 -35.9297c-8.77051 14.9639 -15.6709 31.4971 -20.1396 48.6895l77.8398 27.1104l-82.2305 -4.75977 +c-1.15918 8.56934 -1.7793 17.3193 -1.7793 26.21c0 9 0.629883 17.8398 1.81934 26.5098l82.3799 -4.76953l-77.9395 27.1592c4.5 17.1895 11.4307 33.7148 20.2295 48.6699l74.2207 -35.9199l-61.5205 54.8604c10.7412 14.1328 23.1299 26.501 37.2803 37.2197 +l54.7598 -61.5293l-35.8301 74.1699c14.9521 8.76465 31.4717 15.6621 48.6504 20.1299l26.8701 -77.25l-4.70996 81.6094c8.60938 1.18066 17.3896 1.80078 26.3193 1.80078c8.93066 0 17.71 -0.620117 26.3203 -1.80078l-4.74023 -82.1592l27.0498 77.7598 +c17.2705 -4.5 33.6006 -11.3506 48.6309 -20.1699l-35.8203 -74.1201l54.7197 61.4697c14.1426 -10.7178 26.5186 -23.0908 37.2402 -37.2295l-61.4502 -54.7705l74.1201 35.8604c8.78906 -14.9492 15.71 -31.4678 20.2002 -48.6504l-77.8105 -27.0996l82.2402 4.75 +c1.19043 -8.66016 1.82031 -17.5 1.82031 -26.4902c0 -8.87988 -0.610352 -17.6299 -1.78027 -26.1904l-82.1201 4.75z" /> @@ -2550,7 +2761,7 @@ c-1.23047 1.73926 -3.44043 3.79004 -6.68066 3.79004c-3.25 0 -5.4502 -2.04004 -6. c0 -14.9102 -7.38965 -32.6201 -19.1299 -48.2402c0.610352 106.761 10.8906 194.73 24.4707 215.351v26.0693zM223.52 266.75c-1.59961 -22.4004 -2.75 -46.5195 -3.47949 -72.0703c-23.2998 -11.2793 -40.7705 -33.1602 -46.3203 -59.5098 c-7.71973 -2.25977 -22.71 -3.91992 -40.4893 -4.21973c-7.51074 3.66016 -16.5 5.85938 -26.1807 6.04004c1.90039 14.9102 5.87012 29.1699 11.6504 42.4199c15.4395 -8.10059 30.9297 -8.66016 35.4697 -0.959961c4.57031 7.74023 -3.58984 21.04 -18.3203 30.6602 c8.68066 11.7695 18.9805 22.2998 30.5605 31.0898c9.50977 -15.5898 23.3594 -24.4404 31.3594 -19.8203c8.05078 4.65039 7.19043 21.1699 -1.70996 37.29c8.76074 3.88965 17.9404 6.92969 27.46 9.08008zM288.48 266.75 -c7.82227 -1.75977 20.1201 -5.82812 27.4492 -9.08008c-8.89941 -16.1299 -9.75977 -32.6396 -1.70996 -37.29c8 -4.62012 21.8506 4.23047 31.3604 19.8203c11.5801 -8.79004 21.8799 -19.3203 30.5596 -31.0898c-14.7197 -9.61035 -22.8896 -22.9199 -18.3193 -30.6602 +c9.45508 -2.12695 18.7754 -5.23145 27.4492 -9.08008c-8.89941 -16.1299 -9.75977 -32.6396 -1.70996 -37.29c8 -4.62012 21.8506 4.23047 31.3604 19.8203c11.5801 -8.79004 21.8799 -19.3203 30.5596 -31.0898c-14.7197 -9.61035 -22.8896 -22.9199 -18.3193 -30.6602 c4.54004 -7.7002 20.0293 -7.14062 35.4697 0.959961c5.79004 -13.25 9.75 -27.5098 11.6504 -42.4199c-9.68066 -0.19043 -18.6709 -2.37988 -26.1807 -6.04004c-17.7793 0.299805 -32.7695 1.95996 -40.4902 4.21973c-5.5498 26.3496 -23.0293 48.2305 -46.3193 59.5098 c-0.719727 25.5508 -1.87988 49.6699 -3.46973 72.0703zM256 258.15c3.23047 0 5.86035 -8.81055 6.08984 -19.9307h0.0498047v-16.8799c0 -41.4199 49.0107 -95.04 93.4902 -95.04c52 0 122.76 1.4502 156.37 -29.1699v-2.50977 c-9.41992 -17.1104 -20.5801 -33.1699 -33.1797 -47.9697c-12.5303 21.0898 -51.5898 40.96 -108.021 41.3496c-45.6797 -1.01953 -79.0195 -20.3301 -90.7598 -40.8701c-0.00976562 -0.00976562 0.00976562 -0.0400391 0 -0.0498047 @@ -2570,47 +2781,48 @@ l-62.5996 9.10059l62.5996 9.09961l-20.2002 55.5l31.4004 -45.8994c2.2998 87.8994 l24.2002 -47.3994s-30.2002 31.7002 -34.5 36.2002c1.7998 -68.8008 2.19922 -85.7002 2.19922 -85.7002s154.4 71.7002 68.6006 230.1c0 0 107 118 10.0996 190.7c0 0 165.5 -100 60.5 -271.5c0 0 86.7998 84.7002 41.4004 170.5c0 0 78.7002 -111 -17.2002 -233.1z" /> @@ -2619,7 +2831,7 @@ d="M235.76 437.77c7.5 0.310547 15 0.280273 22.5 0.0908203c3.61035 -0.140625 7.20 c7.90039 -1.33008 15.6699 -3.28027 23.3906 -5.39941c12.2393 -3.4707 24.1895 -7.91992 35.7598 -13.21c26.5596 -12.2402 50.9395 -29.21 71.6299 -49.8809c20.0303 -20.0898 36.7197 -43.5498 48.8896 -69.1895c1.12988 -2.58984 2.44043 -5.10059 3.4707 -7.74023 c2.80957 -6.42969 5.38965 -12.9697 7.58008 -19.6299c4.13965 -12.3301 7.33984 -24.9902 9.41992 -37.8301c0.569336 -3.13965 1.04004 -6.2998 1.39941 -9.46973c0.549805 -3.83008 0.94043 -7.69043 1.18066 -11.5605 c0.829102 -8.33984 0.839844 -16.7295 0.769531 -25.0996c-0.0703125 -4.96973 -0.259766 -9.94043 -0.75 -14.8896c-0.240234 -3.38086 -0.509766 -6.76074 -0.979492 -10.1201c-0.390625 -2.7207 -0.630859 -5.45996 -1.11035 -8.16992 -c-0.900391 -5.15039 -1.7002 -10.3105 -2.87012 -15.4102c-4.09961 -18.5 -10.2998 -36.5498 -18.5098 -53.6299c-15.7705 -32.8301 -38.8301 -62.1699 -67.1201 -85.1201c-14.3926 -11.7676 -39.8887 -27.3848 -56.9102 -34.8604 +c-0.900391 -5.15039 -1.7002 -10.3105 -2.87012 -15.4102c-4.09961 -18.5 -10.2998 -36.5498 -18.5098 -53.6299c-15.7705 -32.8301 -38.8301 -62.1699 -67.1201 -85.1201c-17.2012 -14.0635 -36.3066 -25.8115 -56.9102 -34.8604 c-6.20996 -2.67969 -12.46 -5.25 -18.8701 -7.41016c-3.50977 -1.16016 -7.00977 -2.37988 -10.5703 -3.38965c-6.61914 -1.87988 -13.2891 -3.63965 -20.0391 -5c-4.66016 -0.910156 -9.34082 -1.73047 -14.0303 -2.48047c-5.25 -0.65918 -10.5 -1.43945 -15.79 -1.73926 c-6.69043 -0.660156 -13.4102 -0.839844 -20.1201 -0.810547c-6.82031 -0.0292969 -13.6504 0.120117 -20.4502 0.790039c-3.29004 0.230469 -6.57031 0.5 -9.83008 0.950195c-2.71973 0.389648 -5.45996 0.629883 -8.16992 1.11035 c-4.12012 0.719727 -8.25 1.37012 -12.3496 2.21973c-4.25 0.939453 -8.49023 1.88965 -12.6904 3.01953c-8.62988 2.16992 -17.0801 5.01074 -25.4102 8.13086c-10.4893 4.11914 -20.79 8.75 -30.6396 14.25c-2.13965 1.14941 -4.28027 2.28906 -6.34961 3.56934 @@ -2703,21 +2915,21 @@ c-0.730469 7.99023 -1.87012 15.96 -3.70996 23.7803z" /> +l-58.8604 -11.5205l69.8408 91.0303c-1.49512 8.39453 -2.27539 16.7734 -2.27539 25.5947s0.780273 17.4609 2.27539 25.8555l-69.8408 91.0293l58.8604 -11.5195zM224 316.22c-31.7998 0 -63.6104 -12.0898 -87.8496 -36.3398c-48.4902 -48.4902 -48.5 -127.2 0 -175.7 +c48.5 -48.4893 127.21 -48.5195 175.699 -0.0292969c48.4902 48.4893 48.5 127.199 0 175.699c-24.25 24.25 -56.0498 36.3701 -87.8496 36.3701zM224 279.56c22.4199 0 44.8301 -8.51953 61.9199 -25.6094c34.1904 -34.1904 34.1797 -89.6904 0 -123.87 +c-34.1895 -34.1797 -89.6504 -34.1904 -123.84 0c-34.1904 34.1895 -34.1797 89.6895 0 123.87c17.0898 17.0898 39.5 25.6094 61.9199 25.6094z" /> +c-51.5254 -20.7842 -87.8506 -71.208 -87.8896 -130.13c0 -0.910156 0.139648 -1.78027 0.139648 -2.67969l-21.8398 -0.150391c-1.41016 100.43 29.8701 160.09 52.4199 190c-1.02051 -0.0820312 -2.03711 -0.0888672 -3.07812 -0.0888672 +c-20.9453 0 -37.9492 17.0049 -37.9492 37.9502s17.0039 37.9502 37.9492 37.9502c15.0898 0 28.1338 -8.8252 34.248 -21.5918c2.35742 -4.91211 3.70117 -10.4102 3.70117 -16.2188c0 -1.67188 -0.109375 -3.31738 -0.321289 -4.93066zM488.57 271.23 +c-4.87012 -2.31934 -10.2754 -3.63965 -16.0244 -3.63965c-1.09375 0 -2.17578 0.046875 -3.24609 0.139648c84.4502 -113.45 -49 -194.61 -49 -194.61c5.87012 43.0303 8.20996 91.1602 8.20996 91.1602c66.6006 40.96 0.640625 63.54 -38.46 72.54 +c-20.5566 51.9932 -71.2275 88.7393 -130.49 88.7598c-2.75 0 -5.43945 -0.259766 -8.13965 -0.410156l-0.139648 22.5c93.6094 1.33008 151.72 -25.7998 183.45 -47.7402c-0.270508 1.82617 -0.375 3.67676 -0.375 5.57715c0 20.9395 17 37.9395 37.9395 37.9395 +c20.9404 0 37.9404 -17 37.9404 -37.9395c0 -15.1162 -8.85938 -28.1797 -21.665 -34.2764zM374.06 11.7598v-0.0595703c0.112305 0.000976562 0.239258 -0.0332031 0.351562 -0.0332031c20.9336 0 37.9297 -16.9961 37.9297 -37.9297 +c0 -20.9346 -16.9961 -37.9307 -37.9297 -37.9307c-15.0908 0 -28.1348 8.83203 -34.2412 21.6035c-2.0498 4.26074 -3.33984 9.0332 -3.63965 14c-111.98 -80.3398 -191.9 51 -191.9 51c43.0703 -5.87988 91.1904 -8.21973 91.1904 -8.21973 +c41.3301 -67.1709 63.9199 0.540039 72.7695 39.4893c53.3574 19.8584 91.3574 71.2188 91.3906 131.45c0 2.08008 -0.220703 4.08984 -0.300781 6.15039l19.5205 0.139648c1.28027 -89.9697 -23.71 -147.2 -45.1406 -179.66z" /> +c1.04785 -1.25391 1.74121 -2.82812 1.9209 -4.54004c0 -1.94043 -1.25 -3.48047 -2.48047 -4.79004c-19.9805 -20.54 -26.3701 -53.1699 -18.8398 -80.3701c0.927734 -3.33594 2.13574 -6.6377 3.5498 -9.74023c17.7002 -41.2598 72.4902 -60.4795 126 -43 +c7.01562 2.29199 13.8936 5.20215 20.3398 8.58008c11.8203 5.84668 22.2969 13.7168 31.1504 23.3096c14.2002 14.8408 22.6396 30.9707 25.9297 50.8408c2.81055 18.6191 -7.78027 18.7598 -11.4395 18.0996c-1.37598 8.42188 -3.82812 16.6758 -7.12012 24.2803 +c-15.6299 -12.3506 -35.71 -20.9707 -51 -25.3506c-69.4004 -19.9102 -90.1904 6.35059 -96.4004 -13.8096c33.7705 -12.3701 69.5098 -7.07031 69.5098 -7.07031zM171.31 290.5l0.0605469 0.00976562c-0.107422 -0.130859 -0.170898 -0.297852 -0.170898 -0.480469 +c0 -0.419922 0.34082 -0.759766 0.759766 -0.759766c0.151367 0 0.292969 0.0439453 0.411133 0.120117c11.4199 8.30078 64.9502 42.7705 134.5 26.8301c0.860352 -0.189453 1.39941 1.29004 0.639648 1.7207c-11.3398 6.33984 -28.6895 10.6494 -41 10.7393 +c-0.405273 0.00976562 -0.732422 0.342773 -0.732422 0.750977c0 0.164062 0.0527344 0.31543 0.142578 0.439453c2.23535 2.92383 4.79492 5.49414 7.70996 7.74023c0.18457 0.140625 0.303711 0.362305 0.303711 0.611328 +c0 0.424805 -0.345703 0.770508 -0.770508 0.770508c-0.0175781 0 -0.0351562 -0.000976562 -0.0527344 -0.00195312c-17.5205 -1.08008 -37.5107 -9.4707 -49 -17.2998c-0.12207 -0.0859375 -0.271484 -0.136719 -0.431641 -0.136719 +c-0.414062 0 -0.75 0.335938 -0.75 0.75c0 0.0605469 0.0078125 0.120117 0.0214844 0.176758c0.899414 4.30957 3.72949 9.98926 5.18945 12.6494c0.0644531 0.108398 0.101562 0.236328 0.101562 0.371094c0 0.40332 -0.327148 0.730469 -0.730469 0.730469 +c-0.134766 0 -0.261719 -0.0371094 -0.371094 -0.101562c-18.4697 -9.4502 -39.0898 -26.2803 -55.8301 -45.6299z" /> +c-0.0263672 55.3057 -28.5371 103.871 -71.8105 131.84l45.3799 26.2002c44.3125 -36.582 72.8613 -91.4561 74.3203 -153h0.129883z" /> +d="M403.5 -7.41016c-40.9688 -30.4482 -91.7109 -48.4707 -146.63 -48.4707c-0.223633 0 -0.646484 -0.120117 -0.870117 -0.119141c-137.19 0 -248 111 -248 248c0 137.19 111 248 248 248h0.21582c63.5576 0 121.648 -24.0508 165.484 -63.5 +c0.716797 -0.65332 1.16699 -1.59375 1.16699 -2.63965c0 -1.9707 -1.59961 -3.57031 -3.57031 -3.57031c-0.155273 0 -0.306641 0.0107422 -0.457031 0.0302734c-18.2656 2.43848 -36.9023 3.69727 -55.8301 3.69727c-0.445312 0 -0.43457 -0.0166016 -0.879883 -0.0175781 +c-129.36 0 -222.399 -53.4697 -222.399 -155.35c0 -109 92.1299 -145.881 176.829 -178.73c33.6406 -13 65.4004 -25.3604 87 -41.5898c0.868164 -0.65332 1.42969 -1.69238 1.42969 -2.86133c0 -1.16992 -0.561523 -2.20508 -1.42969 -2.8584zM503 214.91 +c0.698242 -7.59375 0.950195 -15.1699 0.950195 -22.9443c0 -31.8691 -5.99902 -62.3467 -16.9307 -90.3662c-0.526367 -1.31445 -1.81543 -2.24023 -3.31738 -2.24023c-0.608398 0 -1.18066 0.152344 -1.68262 0.420898 +c-29.4893 16.3594 -61.6094 28.3398 -92.6797 39.9297c-60.2803 22.4902 -112.34 41.8896 -112.34 84.4902c0 1.45996 -3.87988 53.6299 80.25 53.6299c50.8604 0 92.7197 -17.4805 144.48 -60.4805c0.706055 -0.598633 1.17871 -1.46484 1.26953 -2.43945z" /> +c-0.0117188 -0.470703 -0.0126953 -0.894531 -0.0126953 -1.36816c0 -4.77148 0.594727 -9.40527 1.71289 -13.832l-1.7002 -5.90039c-2.90039 10.6006 -5.90039 20.2002 -9.2998 27.7998c-9.7002 17.7002 -30.2002 -9.19922 -43 -11.2998 +c4.53027 -0.25293 8.71777 -0.380859 13.3115 -0.380859c4.59277 0 9.15723 0.12793 13.6885 0.380859l-22.4004 -5.39941l3.40039 -4.7002c-5.5 0 -16.9004 -0.900391 -22.4004 17.2002zM358.4 346.9l-20.3008 -11.8008 +c11.3008 -7.59961 20.2002 -18.1992 27.8008 -31.1992c6.39941 2.89941 10.0996 5.09961 11.7998 7.59961c2.5 2.7998 2.5 4.7002 3 7.09961c0.599609 1.30078 0.799805 2.7002 -3.40039 11.1006c-7.5 11.7998 -16.2002 15.2998 -18.8994 17.2002zM91 304.9 +c-7.7998 -24.1006 -11.7002 -49.4004 -13.2002 -74.6006l13.2002 -5l1.2002 27c9.5 -16.3994 11.2002 -23.2998 12.2998 -28.7998c2.7998 2.09961 7.7002 7 22.5996 11.2998l1.2002 -1.7002l-7.59961 -10.5996c10.0996 3.5 19.5 3.5 28.2998 0.5l-10.5996 -8.40039 +c22.7998 -8.39941 26.5996 -7.59961 38.3994 -26.0996l-11.7998 1.2002c34.9297 -20.5 66 -47.9004 141.2 -63.2002c15.5996 24.0996 14 21.0996 14 22.9004l0.200195 0.199219l-0.200195 0.200195c-0.700195 1.90039 -14.1006 16.6006 -18.2002 20.7002 +c7.2998 -1.7998 6 -0.900391 10.7998 -3.7002c1.7002 -0.899414 -5.39941 5.40039 -21.8994 20.2002c16.5 -6.7002 27.5996 -15.5 33 -27.7998l1.69922 30.7002l-22.3994 17.6992l6.39941 5.90039c-7.2998 0 -31 3.7002 -49.1992 -16l-2.5 0.5 +c6.9668 14.3867 12.4512 30.0156 16 46c1.9209 9.16797 2.95508 18.5742 3 28.2998c0 19.5 -4.7002 38.4004 -13.5 56.6006c-6.40039 13.5 -16.5 25.2998 -30 35.3994c-6.5957 4.94238 -13.4805 9.43652 -20.7002 13.5c3 0.700195 1 1.2002 -5.40039 1.2002 +c-6.39941 0.200195 -13 0.700195 -19.3994 1.2002v-3c-10.2949 -1.63086 -19.2871 -7.22266 -25.3008 -15.2002h-1.19922l-5.40039 -3.40039c-1.2002 2.90039 0 6.30078 4.2002 9.30078l10.5996 11.2998l-3.39941 -0.5l2 3.39941 +c-2.30078 0.200195 -4.2002 0.5 -6.2002 0.700195l-0.5 1.2002l2.5 1.7002c2.2002 -0.200195 4.59961 -0.5 7.09961 -0.700195c2.9043 1.54785 6.22559 2.4375 9.74414 2.4375c1.45898 0 2.88184 -0.150391 4.25586 -0.4375l2.5 -1.2002l0.200195 -0.5 +c7.93457 0.514648 15.7422 1.49121 23.4004 2.90039c20.6992 2.89941 36.6992 11.2998 48.5 24.7998l-21.1006 0.5c-25.7998 0.5 -49.3994 -5.40039 -71.2998 -18.9004l-2.5 2.5l0.5 4.7002l1.7002 7.10059c1.66211 8.54199 3.83691 17.1143 6.39941 25.2998 +c-1.69922 -0.700195 -4.59961 -4.90039 -9.2998 -11.2998c-4.7002 -6.40039 -8.39941 -13 -10.0996 -19.4004c-1.0957 -5.14258 -3.14062 -10.0195 -5.90039 -14.2998l-13.5 29l8.40039 -35.7998l-0.5 -1.7002c-0.00585938 0 -0.0146484 0.0117188 -0.0195312 0.0117188 +c-5.57227 0 -10.9424 0.87207 -15.9805 2.48828c-3.40039 0.700195 -10.6006 1.2002 -20.9004 1.2002c0.5 0 -0.700195 0 -3.2002 -0.5c5.40039 -1.30078 13.5 -4.2002 24.8008 -8.40039l6.39941 1.2002c-4.2002 -3.40039 -10.8994 -10.1006 -20.2002 -19.4004 +c-9.39941 -8.89941 -20.1992 -26.0996 -32.5 -50.2002l4.2002 1.2002l10.1006 9.2998l-5.40039 -4.69922l13 12.2998l-2.5 -3.40039c-5.09961 -7.59961 -8.09961 -12.2998 -9.2998 -15.2002zM367.5 -25.0996c8.2998 40.2998 3.59961 55.1992 -0.700195 89.5 +c-35.5 -11.8008 -20.2998 -6 -32 -10.8008l10.5 -14.1992l-1.2002 -1.2002c-20.1992 6 -23.1992 10.7998 -27.7998 15c6 -22.2002 13.9004 -26.4004 29.5 -31.7002c-9.5 -9.59961 -25.3994 4 -34.3994 13l2.5 -23.5996l-4.2002 -3c-5 22.0996 -22 39.0996 -25.2998 39.0996 +c-44 -13 -79.1006 -5.7998 -113.9 10.5996c-1.59961 -0.399414 -70.5996 -18 -120.5 37.1006c13.7002 -35 32.2998 -63.7002 71.2998 -82.6006c-4.98047 10.3184 -12.0117 19.3135 -20.7002 26.6006c0 0 0.700195 3.7002 1.2002 10.0996 +c19.4004 -19.3994 50.7002 -39.5 93.2002 -60.2002c-59.5996 24.5 -59.9004 24.8008 -69.0996 29l16 -20.6992c-3 -1.30078 -6.7002 -0.5 -10.1006 1.19922c-12.5371 7.32422 -24.2949 15.5693 -35.3994 24.8008c1.89941 -2.2002 80.0996 -98.5 200.899 -74.3008 +c-43.0996 21.8008 -52.3994 52.4004 -66.5996 73.5l17.7002 -7.59961l-11.8008 23.0996c20.1006 -27.7998 28.6006 -35 38.4004 -44.2998l-30 16.5c12.5996 -27.0996 33.7002 -47 63.5 -58.7998c2.90039 1.5 9.09961 -1.09961 59 23.9004zM482.8 189.3l8.93066 -12.7998 +l-12.3008 32.5c10.9004 0 10 -0.0996094 21.2002 -3.40039c-8.16406 11.4756 -17.0879 22.0469 -27 32l-26.5996 23.1006l1.2002 3l23.5996 2.5c-10.6865 2.35742 -21.708 3.79199 -33 4.2002l-17.7002 -0.5l-0.5 2.89941l14.7998 13l-41.7998 -20.2002l-12.2998 18.9004 +l3.40039 -16l-2.5 -1.2002l-5.90039 4.2002h-10.0996l5.39941 -4.2002v-2l-13.5 -27.7998c-10.0996 -31.2002 -21.8994 -67.9004 -35.3994 -109.7l1.19922 16l-1.19922 -3v-0.5c-6.40039 -16 -13.6006 -29.5 -21.2002 -39.5996l9.2998 21.8994l-46.7002 -20.1992 +c11.7998 13.5 23.6006 19.3994 34.9004 18.8994c-71.2002 11.4004 -106.2 41 -110.4 46c3.60059 -6.2002 13.2002 -17.7998 16 -40.0996l-1.7002 -1.2002c-4.2998 15.5996 -16.3994 46.5996 -55.7998 69.5996l23.6006 -2.5c-10.5 12.6006 -36.3008 17.8008 -40.8008 16 +l-2.5 2.5l8.40039 8.40039l-22.2998 -5.7998l5.39941 13.5c-8.09961 -4.40039 -4.2998 -2.40039 -17 -8.90039l-1.69922 0.5c0.599609 0.600586 0.899414 -0.700195 -3 9.2998c-0.600586 -11 -0.400391 -8.59961 -1 -11.7998 +c-1.29785 -0.430664 -2.54785 -1.00781 -3.7002 -1.7002c-40 20.6006 -57.2002 11 -73 5.2002c36.7998 -6 29.2998 -4 38.3994 -9.2998c-25.7998 -12.2002 -31.8994 -12.5996 -51.3994 -70.0996l22.2695 22.2998l2.5 -16.4004c13.4004 -58 68.7002 -92.5 126.4 -83.3994 +l-26.1006 22.3994l44.8008 -22.3994l-1.2002 -3c4.59961 -1.7002 9.2998 -3 13.5 -4.2002c19.3359 -5.72266 39.5713 -8.83887 60.752 -8.83887c11.0293 0 21.8643 0.832031 32.4482 2.43848l-32.5 21.2002c35.7998 -7 50.6992 -31.4004 56.7998 -39.5996l-7.60059 29 +l1.2002 2.5l19 -27.9004l-9.2998 26.5996l21.9004 -13.5h1.19922l-3.39941 4.2002l7.09961 -4.7002l-14.2998 16l1.2002 3l7.59961 -7.09961c4.2998 1.2002 41.4004 10.5 80.9004 40.2998c47.8994 35.4004 68.0996 73.7998 71.5996 79.7002l-3 9.2998zM476.7 260.6 +l-18.2002 -1.19922l14.2998 -11.8008zM221.9 253.5c2.69922 -5.09961 5.69922 -12.4004 18.3994 -18.7998c-7.5 -10.9004 -8.2998 -10.5 -20.2002 -16c-7.59961 -7.7002 -13.5 -13.1006 -17.6992 -14.7998l7.09961 13c-5.38281 -1.97266 -11.167 -3.06836 -17.2295 -3.06836 +c-2.57324 0 -5.10156 0.194336 -7.57031 0.568359l-0.5 1.19922c19 2.10059 37.2002 9.40039 46.5 16c-4.10059 4.2002 -7.10059 11.3008 -8.7998 21.9004zM225.6 355.8c5.87793 -3.32715 10.7842 -8.04688 14.3008 -13.7998 +c14.6992 -24.0996 19.1992 -40.0996 11.2998 -47.7002c-7.90039 -7.59961 -16.7998 -7.09961 -26.1006 3c-9.2998 10.1006 -13.5 23.7002 -11.7998 39.6006c1.7002 15.8994 5.90039 22.2998 12.2998 18.8994zM220.9 309.5 +c7.09961 -21.2998 33.3994 -23.0996 26.8994 4.90039c-3.89941 16.5 -8.7998 27.0996 -15.2002 32.5c-6.59961 5.39941 -10.0996 6.69922 -11.2998 4.19922c-2.5 -2.89941 -3.5 -11.2998 -3 -24.7998c7.5 12.7998 11.6006 5.90039 12.5 4.7002l-0.5 -0.5 +c-0.799805 -1.7002 -2.59961 -3.09961 1.7002 -6.2002l1.2002 0.5v-4.7002c-1.7998 -12.5 -6.90039 -12.7998 -12.2998 -10.5996zM175.9 315c-2.41016 0.448242 -4.38965 2.04102 -5.40039 4.2002c-3.5 8.5 0 21.2002 8.09961 21.2002 +c2 -0.5 3.7002 -1.7002 5.40039 -4.7002c-1.5 -0.400391 -4.7002 -4.7998 0.700195 -5.90039h0.5c0 -13.7002 -7.7002 -15.0996 -9.2998 -14.7998zM216 365.1l-3.7002 2.40039l-0.5 2.5c18.2998 0 25.7998 -8.7998 28.2998 -14.2998 +c-6.94727 3.78809 -14.9268 5.97363 -23.3916 5.97363c-0.90918 0 -1.81152 -0.0244141 -2.70801 -0.0742188l-0.5 3zM144.2 315.7c1.59961 -1.60059 0.599609 -0.299805 4.89941 -6.60059c-25.3994 -4.69922 -23.1992 -12.2998 -30 -12.2998 +c0.300781 0.600586 7.10059 16 23.6006 16l-7.10059 7.60059c9.40039 0.5 15.2002 2.09961 19.9004 -5.90039c0.0214844 8.14648 1.03027 16.0225 2.90039 23.5996c2 7.60059 3.69922 11.8008 5.39941 13.5c1 1.5 16.2998 15.7002 29 22.4004 +c2.33496 1.68262 5.22168 2.67676 8.31641 2.67676c1.8291 0 3.57715 -0.34668 5.18359 -0.976562c0.321289 -0.390625 0.515625 -0.889648 0.515625 -1.43457c0 -0.0898438 -0.00488281 -0.178711 -0.015625 -0.265625l-13 -7.59961 +c7.60059 -11.8008 10.5 -25.3008 8.7998 -41.3008c-1.11328 -11.292 -6.61426 -21.3291 -14.7998 -28.2998l2.90039 -4.7002c-30 2.2002 -24.7998 6.80078 -46.5 23.6006zM162.9 334.4c-1.80078 -7.2002 -2.30078 -16 -3.10059 -26l5.40039 -6.40039l7.09961 -3.40039 +c2.39648 -0.458008 4.79688 -0.699219 7.3252 -0.699219c1.3418 0 2.66797 0.0673828 3.97461 0.199219c1 1.7002 3.5 4.2002 6.40039 7.60059c5 5.89941 7.90039 13.7998 8.40039 23.0996c0.0849609 1.43848 0.113281 2.82617 0.113281 4.28613 +c0 7.30859 -1.08887 14.3643 -3.11328 21.0137c-3 8.10059 -5.90039 11 -10.1006 9.30078c-5.39941 -1.7002 -10.5996 -5.40039 -16 -11.8008c-3 -4.19922 -5.2002 -9.59961 -6.39941 -17.1992zM204.9 278.3l-3.10059 -6.5c7.10059 4.2002 13.5 7.2002 19.4004 8.40039 +l7.09961 0.5l11.7998 -7.60059h-2.5c-8.7998 3.7002 -19.3994 1.2002 -30.6992 -7.59961c-0.5 -4.7002 1.69922 -14.7002 5.89941 -29.5l9.2002 0.5c-21.9004 -6.59961 -37.5996 -8.40039 -48.9004 -5.40039c-24.8994 6.7002 -27.3994 23.6006 -27.5 24.1006 +c-1.74121 6.70996 -2.67871 13.6348 -2.67871 20.8867c0 4.35645 0.333984 8.63574 0.979492 12.8135c-6.40039 -0.5 -11 -4.2002 -15.2002 -10.6006c-2.90039 5.90039 -5.40039 8.7998 -5.90039 9.2998c1.5 0.700195 12.2998 7.5 32.5 4.90039l0.5 -2.5l-5.89941 -1.2002 +c-0.100586 -0.399414 -1.90039 -29.5 18.8994 -24.7998c1.40039 0.299805 1.2998 -0.0996094 36.1006 14.2998z" /> +d="M357.45 -20.2002c2.2002 -14.2998 4.09961 -28.7002 6.59961 -43.7002c-367.8 0 -153.899 -0.599609 -337.1 0c-4 0 -6.10059 0.700195 -5.2998 5.7002c2.09961 12.9004 3.5 25.9004 5 38.7998c0.5 4.80078 2.2998 6.80078 7.59961 6.80078 +c118.1 -1 114.9 -0.300781 121.4 2.39941c9.39941 4 14.8994 12.9004 14.8994 23.1006c-0.0996094 42.8994 -0.299805 85.8994 -0.200195 128.8c0 3.7998 -1.19922 5.89941 -4.59961 6.7998c-15.7002 3.90039 -31.2998 7.7002 -47.5996 11.7002 +c-5.30078 -12.2998 -10.4004 -24.4004 -15.7002 -36.7002c1.7998 -3.2998 28.3994 -2.90039 35.2998 -2.90039v-27.5996h-114.3c1 8.59961 1.7002 16.7998 3.2002 24.9004c0.299805 1.39941 3.59961 3.09961 5.5 3.19922 +c8.39941 0.400391 16.8994 0.300781 25.3994 0.100586c4 0 5.90039 1.09961 7.60059 5.2002c16.5996 40.6992 13.5 31.1992 67.2998 161c31.5 76.0996 33 76 32.5996 87.3994c-0.700195 18.6006 -25.3994 22.2998 -37.7002 22.1006c-30 -0.400391 -38.3994 0.5 -101.8 0.5 +c-7.2002 44.5 -4.2002 32.0996 -6.39941 45.2998c-0.700195 4.2002 1 5.2998 4.59961 5.2998l339.1 -0.200195c-0.799805 -5.39941 -1.59961 -10.7998 -2.39941 -16.0996c-1.2998 -9.7002 -2.7998 -19.4004 -4 -29.2002c-0.299805 -2.90039 -1.2002 -4.2998 -4.2998 -4.2998 +c-20.6006 -0.100586 -41.2002 -0.100586 -61.8008 -0.5c-18.6992 -0.400391 -37.5996 -0.299805 -56.1992 -2c-13.4004 -1.2002 -23.3008 -12.6006 -18.9004 -26.6006c8.59961 -27.0996 27.7002 -69.0996 36.5 -89.1992c65.7002 -154.2 61.4004 -157 84 -158.601 +c6.59961 -0.5 13.4004 -0.0996094 20.4004 -0.0996094c1.2998 -9.40039 2.59961 -18 4 -27.5h-116v27c10.3994 0 20.3994 0.0996094 30.3994 -0.100586c3.5 0 5 0.700195 3.40039 4.40039c-4.40039 10.2998 -8.7002 20.5996 -13.2002 30.9004 +c-1.59961 3.69922 -4.09961 4.7998 -8.40039 3.5c-12.3994 -3.60059 -24.7998 -6.7002 -37.2998 -9.7002c-4.2998 -1.10059 -6 -2.7998 -5.89941 -7.5c0.799805 -57.5 0.899414 -127.5 1 -129.101c0.399414 -12.5996 8.69922 -21.3994 21 -23.0996 +c0.899414 -0.200195 12.8994 -2.7998 112.699 -2.59961c8.30078 0 8.40039 0.0996094 9.60059 -7.60059zM182.55 185.5c2.87695 -1.01465 5.98633 -1.56641 9.20801 -1.56641s6.31543 0.551758 9.19238 1.56641c13 4.2002 26.2998 7.7998 39.3994 11.7002 +c1.34473 0.620117 2.65234 1.32422 3.90039 2.09961c-6.7002 17.4004 -13.0996 34.2002 -19.7002 50.9004c-8.89941 22.7002 -17.7002 60.2998 -27 82.7998c-1.5 0.799805 -1.89941 -2.40039 -9.39941 0c-17.1006 -44 -34.1006 -87.7998 -51.3008 -132.1 +c1.8457 -1.09766 3.7959 -2.07422 5.80078 -2.90039c13.2998 -4.2998 26.5996 -8.2998 39.8994 -12.5z" /> - +c-13.3994 49.5996 -18.2002 101.8 -0.0996094 133.8c3.7998 6.74023 16.7998 27.7402 47.5996 27.7402c41.6006 0 110.3 -41.6396 182.2 -142.14c28.7607 -2.29492 57.1504 -6.70801 84.5996 -13c20.5 82 6.90039 125.1 -15.5 137.8 +c-1.2998 0.700195 -38.3994 27.2002 -120.899 -52.7998c-3.40039 3.5 -6.80078 6.89941 -10.2002 10.1992c52.2998 50.9404 103.7 74.6006 138.2 55.2402c33.8994 -19.2002 41.8994 -75.8994 22.2998 -153.899c12.0234 -3.14844 24.0938 -6.9873 35.5996 -11.3008z +M135.901 411.16c-23.1006 -40.7998 1 -121.562 1.19922 -122.961c27.2979 6.86914 55.7041 11.835 84.4004 14.5996c15.5215 22.6875 32.2832 43.9033 50.7002 64.2002c3.39941 -3.33301 6.7998 -6.74609 10.2002 -10.2393 +c-15.1953 -16.6592 -29.1309 -33.958 -42.2002 -52.3994c17.9678 1.35645 34.9062 2.04102 53.2197 2.04102c13.6523 0 27.2158 -0.383789 40.6797 -1.1416c-64.5 86.6006 -126.5 126.2 -163.3 126.2c-23 0 -32 -15.2002 -34.8994 -20.2998zM440.701 -27.1406 +c3.2998 6 21.5 38.5996 -1.2002 123c-4.09961 -1.10059 -37.0996 -9.90039 -84.4004 -14.6006c-15.4961 -22.7061 -32.2598 -43.9238 -50.6992 -64.2002c-3.40039 3.2998 -6.80078 6.7002 -10.2002 10.2002c15.1943 16.6602 29.1299 33.958 42.2002 52.4004 +c-17.9014 -1.38379 -34.792 -2.08301 -53.0459 -2.08301c-13.7139 0 -27.3359 0.398438 -40.8545 1.18262c64.5996 -86.7998 126.6 -126.2 163.3 -126.2c23.1006 0 32 15.2002 34.9004 20.3008zM449.801 111.459c25.6006 7.2998 85.9004 27.4004 105.7 62.5 +c1.40039 2.5 33.5 50.5 -72.5996 90.4004c-11.1553 4.18555 -22.8525 7.92188 -34.5 11c-3.60059 -12.9004 -7.90039 -26.1006 -12.8008 -39.5c-3.71387 -0.506836 -6.9248 -2.60645 -8.89941 -5.60059l-0.100586 0.100586c-1.94824 1.84863 -4.25 3.31445 -6.7998 4.2998 +c5.7002 15 10.6006 29.7998 14.6006 44.2002c-7.2002 1.69922 -31.8008 7.59961 -72.2002 11.6992c16.7002 -24.5 27.8994 -44.0996 34.2998 -55.5c-4.18457 -1.36719 -7.79199 -3.96777 -10.4004 -7.39941c-13.5996 16.3994 -11 19.8994 -42.5 64.5 +c-16.6885 1.17285 -32.207 1.77344 -49.1914 1.77344c-21.2998 0 -42.3818 -0.9375 -63.208 -2.77344c-16.9004 -25 -28.2998 -45.2002 -34.7998 -56.9004c-4.16797 -1.77637 -7.68652 -4.69238 -10.2002 -8.39941c-1.07422 3.39844 -3.37402 6.23633 -6.40039 8 +c6.10059 11.3994 16.9004 31 32.7998 55.2998c-39.5996 -4.60059 -65 -11.2002 -72 -13c4.30078 -14.1006 9.40039 -28.6006 15.2002 -43.2998c-0.866211 -0.632812 -1.63086 -1.36328 -2.2998 -2.2002c-1.5 1.89941 -4 5.2998 -14.4004 5.2998 +c-4.69922 12.2998 -8.7998 24.5 -12.3994 36.4004c-138.8 -40.3604 -158.4 -121.36 1.5 -164c3.59961 12.8994 7.7998 26 12.7002 39.3994c0.328125 -0.0185547 0.651367 -0.0214844 0.984375 -0.0214844c2.0752 0 4.06641 0.360352 5.91504 1.02148 +c3 -1.2002 5.2002 -1 8.40039 -1c-5.5 -14.5996 -10.2002 -28.8994 -14.1006 -42.8994c23.4512 -5.42578 47.71 -9.39258 72.2002 -11.7002c-16.2998 23.8994 -27.5 43.3994 -33.7998 54.5996c8.7002 0 10.7002 1.60059 12.5996 3.2002 +c0.950195 -0.574219 1.95996 -1.08008 3 -1.5c15.3008 -26.7002 28.9004 -46.5996 36.8008 -57.7998c16.6875 -1.17285 32.2051 -1.77344 49.1895 -1.77344c21.2998 0 42.3838 0.9375 63.21 2.77344c16.5 24.2998 27.7002 44 33.9004 55.2002 +c7.2998 0 9.7998 3 10.8994 4.19922c1.82324 -1.3252 3.84766 -2.41113 6 -3.19922c-15 -28 -28.6992 -48.9004 -32.1992 -54.2002c24.4219 2.70312 48.6768 7.11816 72 13c-4.10059 13.7998 -9 27.8994 -14.7002 42.2002c2.00391 0.898438 3.81934 2.11523 5.39941 3.59961 +l0.100586 0.0996094c2.2666 -3.44043 6.1543 -5.7002 10.5781 -5.7002c0.0410156 0 0.0810547 0 0.12207 0.000976562c4.69922 -12.3008 8.7998 -24.5 12.3994 -36.4004zM335.401 225.459c0.0664062 0.00683594 0.132812 0.00878906 0.201172 0.00878906 +c1.07422 0 1.95117 -0.84668 1.99805 -1.90918v-51.5c0 -9.5 -5 -14.0996 -15.0996 -14.0996h-0.400391c-10.0996 0 -15.0996 4.5 -15.0996 14.0996v51.5c-0.00195312 0.0341797 -0.00488281 0.0664062 -0.00488281 0.100586c0 0.999023 0.811523 1.81055 1.81055 1.81055 +c0.0654297 0 0.130859 -0.00390625 0.194336 -0.0107422h1.2002c0.0742188 0.00976562 0.148438 0.0166016 0.224609 0.0166016c0.932617 0 1.69043 -0.756836 1.69043 -1.68945c0 -0.0771484 -0.00488281 -0.15332 -0.015625 -0.227539v-49.7998 +c0 -8 2.60059 -11.0996 10.1006 -11.0996s10.0996 3.2002 10.0996 11.0996v49.7998c-0.00488281 0.0566406 -0.00976562 0.111328 -0.00976562 0.168945c0 0.959961 0.779297 1.73926 1.74023 1.73926c0.0576172 0 0.114258 -0.00195312 0.169922 -0.0078125h1.2002z +M321.701 139.999l7.09961 -0.0996094l-5.7002 -4.30078l2.10059 -6.7998l-5.7998 4.10059l-5.80078 -4.10059l2.10059 6.7998l-5.7002 4.30078l7.09961 0.0996094l2.30078 6.7998zM290.601 132.599l7.10059 -0.0996094l-5.7002 -4.2998l2.09961 -6.7998l-5.7998 4.09961 +l-5.7998 -4.09961l2.09961 6.7998l-5.69922 4.2998l7.09961 0.0996094l2.2998 6.80078zM295.701 163.399c0.0615234 0.00585938 0.12207 -0.0292969 0.185547 -0.0292969c1.00977 0 1.83008 -0.819336 1.83008 -1.83008 +c0 -0.0810547 -0.00585938 -0.162109 -0.015625 -0.241211v-0.799805c0.00390625 -0.0488281 0.0078125 -0.0966797 0.0078125 -0.145508c0 -0.977539 -0.792969 -1.77051 -1.77051 -1.77051c-0.0800781 0 -0.160156 0.00585938 -0.237305 0.015625h-22.5 +c-0.0644531 -0.00683594 -0.126953 -0.0117188 -0.193359 -0.0117188c-0.999023 0 -1.80957 0.811523 -1.80957 1.81055c0 0.0341797 0.000976562 0.0683594 0.00292969 0.101562v63c-0.00195312 0.0332031 -0.00488281 0.0664062 -0.00488281 0.100586 +c0 0.999023 0.811523 1.80957 1.80957 1.80957c0.0664062 0 0.130859 -0.00292969 0.195312 -0.00976562h22.2002c0.0771484 0.00976562 0.155273 0.0175781 0.235352 0.0175781c0.977539 0 1.77051 -0.793945 1.77051 -1.77051 +c0 -0.0498047 -0.00195312 -0.0986328 -0.00585938 -0.147461v-0.799805c0.00195312 -0.0380859 0.00488281 -0.0751953 0.00488281 -0.113281c0 -1.04395 -0.847656 -1.89062 -1.89062 -1.89062c-0.0380859 0 -0.0761719 0.000976562 -0.114258 0.00390625h-19.1006 +v-25.7998h16.1006c0.0380859 0.00195312 0.0742188 0.00488281 0.113281 0.00488281c1.04297 0 1.88965 -0.847656 1.88965 -1.89062c0 -0.0380859 -0.000976562 -0.0761719 -0.00292969 -0.114258v-0.800781 +c0.00195312 -0.0380859 0.00488281 -0.0742188 0.00488281 -0.113281c0 -1.04297 -0.847656 -1.88965 -1.89062 -1.88965c-0.0380859 0 -0.0761719 0.000976562 -0.114258 0.00292969h-16.1006v-26.6992h19.4004zM288.301 262.799l2.2998 -6.7998l7.10059 -0.0996094 +l-5.7002 -4.30078l2.09961 -6.7998l-5.7998 4.10059l-5.7998 -4.10059l2.09961 6.7998l-5.69922 4.30078l7.09961 0.0996094z" /> +d="M2 70.5996h315.1l59.2002 -102.6h-285.399c-0.00488281 0 0.0205078 -0.0498047 0.015625 -0.0498047c-20.0742 0 -37.4736 11.5439 -45.916 28.3496zM501.8 98c19 -29.4004 -0.0996094 -55.9004 -2 -59.0996l-40.7002 -70.5l-257.3 447.6h88.4004 +c0.00390625 0 -0.0234375 0.0527344 -0.0195312 0.0527344c19.6797 0 36.79 -11.0879 45.4189 -27.3525zM275 143.5h-231l115.5 200z" /> @@ -3198,26 +3408,26 @@ c13.9004 0 25.7998 -3.7998 35.4004 -14.7998h0.5v75.5h151.199v-48.0996h-56.0996v- c-34 0 -34.6006 -62.7998 0 -62.7998zM460.5 112.1v29.6006h-56.0996v44.7002h56.0996v28.0996h-55.5v33.9004h56.0996v30.1992h-95v-166.5h94.4004zM414.6 151.9h56.1006v-45.6006l50.7002 57l-50.7002 57v-44h-56.1006v-24.3994zM553.2 141.6l26.2998 -29.5h40.5 l-46 51.4004l45.4004 51h-38.5l-25.6006 -29.2998l-26.5996 29.2998h-39.7002l45.5996 -51.2002l-45.5996 -51.2002h38.0996z" /> +d="M225 416c123.7 -0.299805 223.7 -100.9 223.4 -224.6c-0.300781 -123.7 -100.9 -223.7 -224.601 -223.4l-170.2 0.400391c-29.582 0 -53.6006 24.0117 -53.6006 53.5938c0 0.102539 0 0.204102 0.000976562 0.305664l0.400391 170.3 +c0.399414 123.7 100.899 223.7 224.6 223.4zM394.8 258.8c-0.0947266 7.71387 -1.06445 15.1934 -2.7998 22.4004l-55.2002 56.0996v-1.59961c0 -5.10059 -1.5 -9.60059 -3.7998 -14.2998zM331 353.7c1.94141 -2.71777 3.39453 -5.85449 4.2002 -9.2002l54.2998 -54.5996 +c-9.56543 28.6953 -30.9629 51.8848 -58.5 63.7998zM118.1 200.8c-5.54395 -0.450195 -11.0029 -1.44336 -16.1992 -2.89941l8.5 -8.5c2.04004 4.16895 4.62598 7.98535 7.69922 11.3994zM97 196.6c-4.72363 -1.31543 -9.36719 -3.08691 -13.7002 -5.19922l27 -27.2002 +c-1.51855 3.87012 -2.37598 8.09961 -2.39941 12.5l0.899414 8zM78.7998 189.2c-3.89551 -2.1748 -7.62207 -4.57227 -11.2002 -7.2002l35.3008 -35.9004c4.36133 2.17188 9.16016 3.79395 14.0996 4.7002zM63.5996 179.4 +c-3.7207 -2.78223 -7.0625 -5.89355 -10.0996 -9.40039l34.9004 -34.5996c3.2168 3.18945 6.69531 6.00781 10.5 8.5zM50.2998 167.1c-2.89941 -3.2998 -5.7998 -6.69922 -8.59961 -10.5l35.7998 -35.8994c2.11035 4.12598 4.6875 7.93262 7.7002 11.3994zM39.2998 152.8 +c-2.49414 -3.82227 -4.73926 -7.83984 -6.7002 -12l39.5 -39.7998c0.374023 5.3252 1.63574 10.4883 3.60059 15.2002zM30.5 136.5c-1.7998 -4.90039 -3.2998 -9.59961 -4.7002 -14.5l52.7002 -53.5c-3.96484 7.90234 -6.36621 16.8438 -6.7002 26.2002zM22.5996 93.5 +c0.046875 -7.56934 1.05859 -14.8945 2.90039 -21.9004l55.4004 -55.6992v1.09961c0.0429688 5.14551 1.35156 10.0322 3.59961 14.2998zM27.9004 62.7998c9.59375 -28.6787 30.9805 -51.8564 58.5 -63.7998c-1.90527 2.74219 -3.35254 5.87402 -4.2002 9.2002z +M22.5996 99.7998l64.4004 -64.2002c2.76953 3.4707 6.08594 6.38965 9.90039 8.7002l-72.2002 72.5c-1.2793 -5.48047 -2.00293 -11.1543 -2.10059 -17zM275.9 151.6c32.5996 -0.0996094 32.6992 49.2002 0.199219 49.4004l-33.5996 0.0996094 +c-4.91504 0.0224609 -8.90039 4.01855 -8.90039 8.93945v0.0605469l0.100586 47c0.0996094 40.5 38.5996 60.8008 66 54.9004c15.3994 -3.90039 30.2998 8.40039 30.2998 23.9004c0 12.0996 -8.7002 22.1992 -19.9004 24c-6.37305 1.50098 -12.9639 2.30078 -19.793 2.30078 +c-0.135742 0 -0.271484 -0.000976562 -0.40625 -0.000976562c-0.143555 0 -0.277344 -0.00292969 -0.420898 -0.00292969c-57.9893 0 -105.081 -47.0303 -105.18 -104.997l-0.0996094 -56l-42.6006 0.0996094c-32.5996 0.100586 -32.6992 -49.2002 -0.0996094 -49.2998 +l33.5996 -0.0996094c4.40039 0 8.90039 -4.5 8.90039 -9l-0.0996094 -47c-0.00585938 -30.8535 -25.0527 -55.9004 -55.9062 -55.9004h-0.194336c-9.39941 0 -9.39941 1.59961 -15.7002 1.59961c-13.458 -0.209961 -24.3447 -11.1289 -24.5 -24.5996 +c0 -15.5 14.2002 -24.2002 19.9004 -24.2002c61.2998 -12.8994 125.5 33.6006 125.7 102.9l0.0996094 56zM299.4 151.9c5.48145 0.538086 10.9062 1.52637 16.0996 2.89941l-8.5 8.5c-1.78711 -4.29492 -4.37207 -8.14844 -7.59961 -11.3994zM320.4 156.1 +c4.74121 1.31738 9.38574 3.12305 13.6992 5.30078l-27 27.1992c1.51855 -3.86914 2.37598 -8.09961 2.40039 -12.5l-0.900391 -8.09961zM338.4 163.5c4 2.2002 8.09961 4.7002 11.8994 7.2002l-36.2002 35.8994c-4.09961 -2.2998 -8.7998 -3.59961 -13.6992 -4.69922z +M353.9 173.3c3.55273 2.83594 6.87891 5.7998 10.0996 9l-34.9004 35c-3.18457 -3.22266 -6.66797 -6.04492 -10.5 -8.5zM367.1 185.6c3.0625 3.36523 5.89941 6.82812 8.60059 10.5l-35.7998 35.9004c-2.1582 -4.0957 -4.73145 -7.89746 -7.7002 -11.4004zM378.1 199.9 +c2.53027 3.79688 4.77832 7.81738 6.7002 12l-39.5 39.7998c-0.374023 -5.3252 -1.63574 -10.4893 -3.59961 -15.2002zM391.6 230.8l-53.0996 53.4004c4.25977 -7.79688 6.82422 -16.7627 7.09961 -26.2002l41.3008 -41.5c1.7959 4.61523 3.39258 9.46387 4.69922 14.2998z +M392.6 236.4c1.25586 5.3623 2.04199 10.9189 2.30078 16.5996l-64.3008 64.7002c-2.61426 -3.74805 -5.95898 -6.85938 -9.89941 -9.2002z" /> +d="M277 277.3h-85.4004v-256c-0.0273438 -47.082 -38.2617 -85.2998 -85.3506 -85.2998c-47.1055 0 -85.3496 38.2441 -85.3496 85.3496c0 47.1064 38.2441 85.3506 85.3496 85.3506h0.0507812c-47.1055 0 -85.3496 38.2441 -85.3496 85.3496 +c0 47.1064 38.2441 85.3506 85.3496 85.3506c-47.0781 0 -85.2998 38.2217 -85.2998 85.2998s38.2217 85.2998 85.2998 85.2998h170.7c47.1055 0 85.3496 -38.2441 85.3496 -85.3496c0 -47.1064 -38.2441 -85.3506 -85.3496 -85.3506zM277 277.3 +c47.0762 -0.00488281 85.2949 -38.2236 85.2998 -85.2998c0 -47.0781 -38.2217 -85.2998 -85.2998 -85.2998s-85.2998 38.2217 -85.2998 85.2998s38.2217 85.2998 85.2998 85.2998z" /> +d="M427.84 67.3301l-196.5 -97.8203c-2.24707 -0.963867 -4.72266 -1.49805 -7.32129 -1.49805s-5.10156 0.53418 -7.34863 1.49805l-196.51 97.8203c-4 2 -4 5.28027 0 7.29004l47.0596 23.3799c2.25098 0.964844 4.72949 1.49805 7.33203 1.49805 +c2.60156 0 5.10742 -0.533203 7.3584 -1.49805l134.76 -67c2.24609 -0.969727 4.72168 -1.50684 7.32129 -1.50684s5.10254 0.537109 7.34863 1.50684l134.76 67c2.24902 0.964844 4.72656 1.49902 7.32715 1.49902s5.10449 -0.53418 7.35352 -1.49902l47.0596 -23.4297 +c4.0498 -1.95996 4.0498 -5.24023 0 -7.24023zM427.84 203.86c4.0498 -2.01074 4.0498 -5.29004 0 -7.31055l-196.5 -97.7998c-2.24707 -0.964844 -4.74902 -1.49902 -7.34863 -1.49902c-2.59863 0 -5.07422 0.53418 -7.32129 1.49902l-196.51 97.7998 +c-4 2.02051 -4 5.31055 0 7.31055l47.0596 23.4297c2.25098 0.964844 4.75684 1.49805 7.3584 1.49805c2.60254 0 5.08105 -0.533203 7.33203 -1.49805l134.76 -67.0801c2.24902 -0.959961 4.75 -1.49121 7.34863 -1.49121c2.59766 0 5.07227 0.53125 7.32129 1.49121 +l134.76 67.0801c2.24902 0.964844 4.75293 1.49902 7.35352 1.49902s5.07812 -0.53418 7.32715 -1.49902zM20.1602 317.58c-4.0498 1.86035 -4.0498 4.88965 0 6.74023l196.5 90.2793c2.2666 0.900391 4.76074 1.39551 7.3457 1.39551 +c2.58594 0 5.05762 -0.495117 7.32422 -1.39551l196.51 -90.2793c4 -1.85059 4 -4.87988 0 -6.74023l-196.51 -90.29c-2.26953 -0.890625 -4.76172 -1.37988 -7.3457 -1.37988s-5.05469 0.489258 -7.32422 1.37988z" /> +d="M447.8 384c23.6006 0 42.9004 -19.0996 42.9004 -42.7002v-298.6c0 -23.6006 -19.1006 -42.7002 -42.7002 -42.7002h-149.4v42.7002h149.2v298.6h-383.8v-63.8994h-42.7002v63.8994c0 23.6006 19.1006 42.7002 42.7002 42.7002h383.8zM21.2998 64.4004 +c35.2998 0 63.9004 -28.6006 63.9004 -63.9004h-63.9004v63.9004v0zM21.2998 149.4c82.4004 -0.100586 149.4 -67 149.3 -149.4h-42.6992c0 58.9004 -47.7002 107 -106.601 107v42.4004zM213.4 0c-0.100586 106 -86.1006 192.4 -192.101 192.2v42.3994 +c129.5 -0.299805 234.3 -105.1 234.8 -234.6h-42.6992z" /> +c0.00195312 0.0214844 0.00195312 0.0419922 0.00195312 0.0634766c0 0.612305 -0.49707 1.11035 -1.10938 1.11035c-0.0244141 0 -0.0478516 -0.00195312 -0.0722656 -0.00390625h-9.39941c-0.0244141 0.00195312 -0.0488281 0.00292969 -0.0732422 0.00292969 +c-0.612305 0 -1.11035 -0.498047 -1.11035 -1.11035c0 -0.0214844 0.00195312 -0.0410156 0.00292969 -0.0625v-55.2793c-0.000976562 -0.0214844 -0.00195312 -0.0419922 -0.00195312 -0.0634766c0 -0.618164 0.501953 -1.11914 1.12012 -1.11914 +c0.0214844 0 0.0410156 0.000976562 0.0625 0.00195312h9.63965c0.0205078 -0.000976562 0.0410156 -0.00195312 0.0625 -0.00195312c0.618164 0 1.12012 0.501953 1.12012 1.12012c0 0.0214844 -0.00195312 0.0410156 -0.00292969 0.0625v27.7695 +c0 2.91016 0.0498047 11.3701 4.45996 15.0498c4.90039 4.90039 12 3.36035 13.4102 3.06055c0.630859 0.0107422 1.1709 0.393555 1.41016 0.939453c1.15918 2.57324 2.19629 5.28125 3.05957 8c0.0517578 0.130859 0.0800781 0.273438 0.0800781 0.422852 +c0 0.416992 -0.21875 0.783203 -0.549805 0.987305v-0.00976562zM502.69 170.6l-2.12012 7.29004c-0.470703 1.18066 -1.41016 0.709961 -1.41016 0.709961c-4.23047 -1.81934 -10.1504 -1.88965 -11.29 -1.88965c-4.63965 0 -17.1699 1.12988 -17.1699 19.7598 +c0 6.23047 1.84961 19.7607 16.4697 19.7607c0.299805 0.00683594 0.601562 0.0107422 0.90332 0.0107422c3.70605 0 7.26562 -0.587891 10.6172 -1.66113c3.35059 -1.07324 0.939453 -0.469727 1.17969 0.709961c0.939453 2.58984 1.63965 4.46973 2.58984 7.53027 +c0.230469 0.939453 -0.469727 1.16992 -0.709961 1.16992c-11.5898 3.87012 -22.3398 2.5293 -27.7598 0c-1.58984 -0.740234 -16.2305 -6.49023 -16.2305 -27.5205c0 -2.89941 -0.580078 -30.1094 28.9404 -30.1094c5.45117 0.0107422 10.6943 1.02051 15.5195 2.83008 +c0.319336 0.236328 0.527344 0.616211 0.527344 1.04395c0 0.130859 -0.0214844 0.256836 -0.0566406 0.375977v-0.0107422zM556.56 210.12c-0.799805 3 -5.36914 16.2295 -22.3496 16.2295c-16 0 -23.5195 -10.1094 -25.6396 -18.5898 +c-1.07129 -3.53906 -1.64746 -7.29199 -1.64746 -11.1787c0 -0.198242 -0.00585938 -0.383789 -0.00292969 -0.581055c0 -25.8701 18.8398 -29.4004 29.8799 -29.4004c10.8203 0 16.46 2.35059 18.5801 3.76074c0.469727 0.239258 0.709961 0.709961 0.240234 1.87988 +l-2.36035 6.83008c-0.200195 0.430664 -0.636719 0.729492 -1.14258 0.729492c-0.0927734 0 -0.180664 -0.0107422 -0.267578 -0.0302734c-2.58984 -0.939453 -6.34961 -2.81934 -15.29 -2.81934c-17.4199 0 -16.8496 14.7402 -16.9297 16.7002h37.1602 +c0.569336 0.0136719 1.04395 0.40918 1.17969 0.939453c-0.239258 0.00976562 0.94043 7.07031 -1.41016 15.54v-0.00976562zM533.27 216.47c5.11035 0 11.8506 -2.2002 12.7305 -14.1201h-26.3701c0.639648 5.12012 3.31055 14.1201 13.6396 14.1201z" /> +d="M213.86 152h-113.86c-55.1914 0 -100 44.8086 -100 100s44.8086 100 100 100h132.84c22.0771 0 40 -17.9238 40 -40s-17.9229 -40 -40 -40h-134.84c-26.4697 0 -26.4502 -40 0 -40h113.82c55.1914 0 100 -44.8086 100 -100s-44.8086 -100 -100 -100h-171.82 +c-22.0762 0 -40 17.9238 -40 40s17.9238 40 40 40h173.86c26.4795 0 26.46 40 0 40zM298 32c26.7314 18.1455 45.667 46.8174 51.1104 80h64.5498c10.8652 0.0927734 19.6572 8.94238 19.6572 19.8291c0 0.0585938 0.00292969 0.113281 0.00292969 0.170898v120v0.173828 +c0 10.8867 -8.79492 19.7334 -19.6602 19.8262h-117.24c9.34473 10.6875 15.0088 24.6729 15.0088 39.9697c0 15.2979 -5.66406 29.3428 -15.0088 40.0303h136.93c43.4404 0 78.6504 -35.8203 78.6504 -80v-160c0 -44.1797 -35.21 -80 -78.6504 -80h-135.35z" /> +d="M421.78 295.83c-48.1602 -26.3896 -118.561 -58.1504 -130.2 -50s91.4395 80.3701 106.689 88.7695c0.920898 0.5 1.80078 0.970703 2.63086 1.40039c2.07227 0.612305 4.28125 0.954102 6.55176 0.954102c12.7275 0 23.0605 -10.332 23.0605 -23.0596 +c0 -7.31445 -3.41309 -13.8389 -8.73242 -18.0645zM421.78 78.6602c5.27539 -4.22949 8.64258 -10.7148 8.64258 -17.9961c0 -12.7334 -10.3369 -23.0703 -23.0693 -23.0703c-2.24023 0 -4.40527 0.320312 -6.45312 0.916016 +c-0.830078 0.410156 -1.70996 0.900391 -2.63086 1.41016c-15.2695 8.38965 -118.25 80.6396 -106.689 88.7402c11.5596 8.09961 82.04 -23.6201 130.2 -50zM464.21 211c10.4287 -2.18359 18.2344 -11.4395 18.2344 -22.5127 +c0 -11.4219 -8.34375 -20.9102 -19.2646 -22.6973c-54.9102 0.0195312 -131.93 6.00977 -138.21 18.7598c-6.2793 12.75 118.84 26.5098 136.24 26.5098c1.0498 0 2.0498 -0.0595703 3 -0.0595703zM31 351.35c-0.817383 2.46387 -1.26074 5.09766 -1.26074 7.83496 +c0 13.7314 11.1484 24.8799 24.8799 24.8799c9.96582 0 18.5498 -5.8457 22.5205 -14.3145l81 -205.06h1.20996l77 203.529c3.42188 8.7627 11.9502 14.9775 21.9189 14.9775c12.9805 0 23.5195 -10.5391 23.5195 -23.5195 +c0 -2.33398 -0.353516 -4.59863 -0.988281 -6.72754l-109.6 -273.391c-18.5498 -47.2197 -37.1201 -79.5596 -93.29 -79.5596c-0.185547 -0.000976562 -0.371094 -0.000976562 -0.556641 -0.000976562c-7.9707 0 -15.6465 0.666016 -23.2539 1.95117 +c-8.90723 2.55371 -15.4336 10.7646 -15.4336 20.4883c0 11.7607 9.54883 21.3096 21.3105 21.3096c0.349609 0 0.677734 -0.0117188 1.02344 -0.0283203c0.660156 -0.0595703 10.9102 -0.660156 13.8604 -0.660156c30.4697 0 43.7393 18.9404 58.0693 59.4102z" /> +d="M439.55 211.95c5.22266 -5.22363 8.45508 -12.4463 8.45508 -20.4092s-3.23242 -15.1768 -8.45508 -20.4014l-194.689 -194.689c-5.22363 -5.21973 -12.4443 -8.4502 -20.4043 -8.4502c-7.96094 0 -15.1729 3.23047 -20.3965 8.4502l-195.609 195.6 +c-5.22266 5.22363 -8.45508 12.4463 -8.45508 20.4092s3.23242 15.1768 8.45508 20.4014l134.12 134.14l50.79 -50.8496c-5.95996 -14.2607 -2.16016 -36.4902 18.6396 -45v-123c-22.3203 -9.09082 -28.8203 -38.4004 -11.25 -56 +c6.21582 -6.21191 14.8066 -10.0557 24.2803 -10.0557c9.47266 0 18.0547 3.84375 24.2695 10.0557c13.1807 13.1494 16.2197 42.46 -9.08008 55v121.85l46.3506 -46.29c-14.21 -34.4697 29.5098 -63.8301 56 -37.3398c25.71 25.6895 -1.24023 68.4902 -35.4707 56.6895 +l-49.6592 49.6602c9.29004 26.9102 -16.3301 52.8203 -43.3906 43.6807l-51.5195 51.5195l40.6602 40.6299c5.22461 5.2207 12.4463 8.45117 20.4082 8.45117c7.96289 0 15.1768 -3.23047 20.4014 -8.45117z" /> +c14.4902 -7.60059 25.5605 -19.3301 33.5605 -33.8301c7.52734 14.4502 19.1924 26.1982 33.5801 33.8301c-14.4902 8.00977 -26.0508 19.0596 -33.8203 33.5498c-7.60156 -14.3262 -19.2539 -25.9658 -33.5898 -33.5498z" /> +c0 41.7695 34.3408 75.6494 76.6904 75.6494c0.0117188 0 -0.0234375 -0.00292969 -0.0117188 -0.00292969c5.91797 0 11.6826 -0.666016 17.2217 -1.92676c0.623047 2.21875 1.13281 4.53516 1.5 6.84961c6.92969 44.1904 -14.8496 72.8408 -78 72.8408h-133.44 +l-77.25 -290.74zM358 240.89l-9.4502 -36.75l-15 36.75h-31.3398l-26.6299 -90.3096h37.8301l7.83008 35.6299l11.1895 -35.6299h35.4102l22.1602 90.3096h-32zM503.86 58.8096l21.1992 84.0605h-103.869l53.0498 205.36h-92.5l-21.3301 -82.3506 +c29.3799 -10.5996 50.3799 -38.4102 50.3799 -71.0596c0 -41.7803 -34.3496 -75.6504 -76.6904 -75.6504c-0.0205078 0 0.0380859 -0.00292969 0.0166016 -0.00292969c-3.90137 0 -7.73633 0.28418 -11.4863 0.833008l-15.8398 -61.1904h197.07zM211.7 178.61 +c16.1494 0 29.7002 -7.51074 24.1396 -29.8203c-5.83008 -23.4697 -21.7998 -26.6504 -37.9395 -26.6504h-24.7002l13.7998 56.4707h24.7002zM233 278c18.0703 0 32.2305 1.29004 27.5801 -17.5703c-3.83008 -15.5 -21.21 -30.1396 -39.21 -30.1396h-21.3701l11.6602 47.71 +h21.3398z" /> +c33.6494 -45.6201 48.5293 -100.87 35.3096 -149.2c-1.16797 -4.21484 -2.58105 -8.44238 -4.16016 -12.4697c-1.72949 1.14941 -3.84961 2.41992 -6.72949 4c0 0 -76.3906 47.1699 -159.181 130.59c-2.16992 2.2002 44.1504 -66.25 96.7207 -121.74 +c-24.7803 13.9004 -93.7803 64.1201 -137.48 104.12c5.58301 -9.18652 11.8184 -17.7773 18.7803 -25.8994c36.4902 -46.2207 84.0898 -103.37 141.09 -147.221c-40 -24.4902 -96.6396 -26.3994 -153 0c-13.8662 6.50977 -26.9756 14.3477 -39.1699 23.3701 +c25.1133 -39.9365 61.6025 -71.4268 105.29 -90.3701c53.3203 -22.9199 106.35 -21.3799 145.85 -0.379883l0.419922 0.25c1.77051 1 3.53027 2 5.25 3c19.0801 9.7998 56.3105 19.46 76.3105 -19.4697z" /> - - - - - - - - - +c0.360352 5.24023 0.524414 10.1309 0.524414 15.4619c0 5.12988 -0.169922 10.2197 -0.503906 15.2656c-0.43457 14.9102 -1.64258 29.4004 -3.61035 43.8799c-1.87012 13.2197 -3.56934 22.3799 -5.38965 32c-1.02051 4.87988 -1.28027 6.39941 -1.83008 8.44922 +c-0.506836 2.22461 -2.49805 3.89062 -4.875 3.89062h-0.0253906h-0.819336l-32 -5c-2.37793 -0.385742 -4.20117 -2.44922 -4.20117 -4.93457c0 -0.0224609 0.000976562 -0.0439453 0.000976562 -0.0654297 +c-0.00976562 -0.128906 -0.0146484 -0.249023 -0.0146484 -0.380859c0 -0.130859 0.00488281 -0.260742 0.0146484 -0.389648l1.68945 -8.7793c1.60645 -8.86719 3.23633 -20.0938 4.88965 -33.6807c1.62695 -13.9551 2.49707 -27.7852 2.59961 -42.1494 +c0.266602 -26.9072 -2.44336 -46.834 -8.12988 -59.7803c-5.62891 -12.7627 -17.1777 -22.3076 -31.1504 -25.2305c-16.2686 -3.44336 -32.8506 -5.2627 -50.1387 -5.2627c-2.38477 0 -4.76172 0.0341797 -7.13086 0.103516h-10.25 +c-2.40625 -0.0712891 -4.53223 -0.0996094 -6.95605 -0.0996094c-17.2725 0 -34.127 1.80566 -50.3838 5.23926c-14.0283 2.86719 -25.6377 12.4033 -31.3105 25.1797c-5.60645 12.9336 -8.31641 32.877 -8.12988 59.8301 +c0.101562 14.3672 0.986328 28.2021 2.64062 42.1504c1.62012 13.6201 3.2334 24.8467 4.83984 33.6797l1.7002 8.78027c0.00976562 0.128906 0.0146484 0.249023 0.0146484 0.379883c0 0.131836 -0.00488281 0.261719 -0.0146484 0.389648 +c0 0.00488281 -0.00488281 0.00878906 -0.00488281 0.0126953c0 2.48633 -1.79297 4.55664 -4.15527 4.9873l-32 5h-0.69043c-2.37402 -0.0214844 -4.3623 -1.6748 -4.89941 -3.88965c-0.540039 -2.03027 -0.820312 -3.57031 -1.82031 -8.4502 +c-1.83008 -9.41992 -3.52051 -18.6094 -5.40039 -32c-1.95898 -14.4814 -3.16406 -28.9697 -3.59961 -43.8799c-0.351562 -5.13867 -0.530273 -9.93066 -0.530273 -15.1582s0.178711 -10.4131 0.530273 -15.5518c0.766602 -27.0928 5.43359 -48.7598 14 -65 +c8.57324 -16.2061 23.0801 -27.873 43.5195 -35c20.4404 -7.12695 48.9209 -10.6172 85.4414 -10.4697h4.59961c36.5605 -0.15332 65.0439 3.33691 85.4502 10.4707c20.4336 7.12012 34.9365 18.7871 43.5098 35.001s13.2402 37.8809 14 65.001z" /> diff --git a/sapl/static/sapl/frontend/img/fa-brands-400.2f122423.svg.gz b/sapl/static/sapl/frontend/img/fa-brands-400.2f122423.svg.gz new file mode 100644 index 000000000..9985d995b Binary files /dev/null and b/sapl/static/sapl/frontend/img/fa-brands-400.2f122423.svg.gz differ diff --git a/sapl/static/sapl/frontend/img/fa-regular-400.89ffa3ab.svg b/sapl/static/sapl/frontend/img/fa-regular-400.3602b7e8.svg similarity index 88% rename from sapl/static/sapl/frontend/img/fa-regular-400.89ffa3ab.svg rename to sapl/static/sapl/frontend/img/fa-regular-400.3602b7e8.svg index 48634a9ab..bccc256b9 100644 --- a/sapl/static/sapl/frontend/img/fa-regular-400.89ffa3ab.svg +++ b/sapl/static/sapl/frontend/img/fa-regular-400.3602b7e8.svg @@ -1,16 +1,12 @@ - -Created by FontForge 20190801 at Mon Mar 23 10:45:51 2020 +Created by FontForge 20200314 at Mon Oct 5 09:50:45 2020 By Robert Madole Copyright (c) Font Awesome - + @@ -77,17 +73,17 @@ c0 -110.569 89.4678 -200 200 -200zM363.244 247.2c0 -67.0518 -72.4209 -68.084 -72 c17.5615 9.84473 28.3242 16.541 28.3242 29.5791c0 17.2461 -21.999 28.6934 -39.7842 28.6934c-23.1885 0 -33.8936 -10.9775 -48.9424 -29.9697c-4.05664 -5.11914 -11.46 -6.07031 -16.666 -2.12402l-27.8232 21.0986 c-5.10742 3.87207 -6.25098 11.0654 -2.64453 16.3633c23.627 34.6934 53.7217 54.1846 100.575 54.1846c49.0713 0 101.45 -38.3037 101.45 -88.7998zM298 80c0 -23.1592 -18.8408 -42 -42 -42s-42 18.8408 -42 42s18.8408 42 42 42s42 -18.8408 42 -42z" /> +d="M288 304c0.114258 0 0.240234 -0.0175781 0.354492 -0.0175781c61.6543 0 111.71 -50.0557 111.71 -111.71s-50.0557 -111.71 -111.71 -111.71s-111.71 50.0557 -111.71 111.71c0 10.7422 1.51953 21.1328 4.35547 30.9678 +c7.95898 -4.52637 17.2129 -7.17188 27 -7.24023c30.9072 0 56 25.0928 56 56c-0.0683594 9.78711 -2.71387 19.041 -7.24023 27c9.88379 3.07617 20.3896 4.83008 31.2402 5zM572.52 206.6c2.21387 -4.37793 3.46094 -9.38965 3.46094 -14.626 +c0 -5.2373 -1.24707 -10.1855 -3.46094 -14.5635c-54.1992 -105.771 -161.59 -177.41 -284.52 -177.41s-230.29 71.5898 -284.52 177.4c-2.21387 4.37793 -3.46094 9.38965 -3.46094 14.626c0 5.2373 1.24707 10.1855 3.46094 14.5635 +c54.1992 105.771 161.59 177.41 284.52 177.41s230.29 -71.5898 284.52 -177.4zM288 48c98.6602 0 189.1 55 237.93 144c-48.8398 89 -139.27 144 -237.93 144s-189.09 -55 -237.93 -144c48.8398 -89 139.279 -144 237.93 -144z" /> +d="M634 -23c3.66895 -2.93262 6.00391 -7.45117 6.00391 -12.5088c0 -3.7832 -1.31543 -7.26074 -3.51367 -10.001l-10 -12.4902c-2.93359 -3.66309 -7.44824 -5.99414 -12.502 -5.99414c-3.77637 0 -7.25 1.31152 -9.98828 3.50391l-598 467.49 +c-3.66895 2.93262 -6.00391 7.45117 -6.00391 12.5088c0 3.7832 1.31543 7.26074 3.51367 10.001l10 12.4902c2.93359 3.66309 7.44824 5.99414 12.502 5.99414c3.77637 0 7.25 -1.31152 9.98828 -3.50391zM296.79 301.53c7.51172 1.60254 15.2266 2.45508 23.21 2.46973 +c60.4805 0 109.36 -47.9102 111.58 -107.85zM343.21 82.46c-7.51367 -1.59375 -15.2285 -2.44336 -23.21 -2.45996c-60.4697 0 -109.35 47.9102 -111.58 107.84zM320 336c-19.8799 0 -39.2803 -2.7998 -58.2197 -7.09961l-46.4102 36.29 +c32.9199 11.8096 67.9297 18.8096 104.63 18.8096c122.93 0 230.29 -71.5898 284.57 -177.4c2.21289 -4.37793 3.45996 -9.38965 3.45996 -14.626c0 -5.2373 -1.24707 -10.1855 -3.45996 -14.5635c-14.1924 -27.5625 -31.9229 -52.6689 -52.9004 -75.1104l-37.7402 29.5 +c17.2305 18.0527 31.9385 38.1318 44 60.2002c-48.8398 89 -139.279 144 -237.93 144zM320 48c19.8896 0 39.2803 2.7998 58.2197 7.08984l46.4102 -36.2803c-32.9199 -11.7598 -67.9297 -18.8096 -104.63 -18.8096c-122.92 0 -230.28 71.5898 -284.51 177.4 +c-2.21387 4.37793 -3.46094 9.38965 -3.46094 14.626c0 5.2373 1.24707 10.1855 3.46094 14.5635c14.1885 27.5586 31.916 52.6621 52.8896 75.1006l37.7402 -29.5c-17.249 -18.0469 -31.9727 -38.1221 -44.0498 -60.1904c48.8496 -89 139.279 -144 237.93 -144z" /> +d="M567.403 212.358c5.59668 -8.04688 8.59668 -17.6113 8.59668 -27.4121v-136.946c0 -26.5098 -21.4902 -48 -48 -48h-480c-26.5098 0 -48 21.4902 -48 48v136.946c0 10.167 3.19531 19.6465 8.59668 27.4121l105.08 151.053 +c8.67383 12.4678 23.0791 20.5889 39.4043 20.5889h269.838c16.3252 0 30.7305 -8.12109 39.4043 -20.5889zM153.081 336l-77.9131 -112h425.664l-77.9131 112h-269.838zM528 48v128h-480v-128h480zM496 112c0 -17.6729 -14.3271 -32 -32 -32s-32 14.3271 -32 32 +s14.3271 32 32 32s32 -14.3271 32 -32zM400 112c0 -17.6729 -14.3271 -32 -32 -32s-32 14.3271 -32 32s14.3271 32 32 32s32 -14.3271 32 -32z" /> +c0 56.9277 35.2861 92 83.2002 92c0.0283203 0 -0.0361328 0 -0.0078125 0c7.66602 0 15.1582 -0.748047 22.4072 -2.17578v86.1768zM224 364.8c0 18.9756 -16.2246 35.2002 -35.2002 35.2002c-18.7002 0 -35.2002 -16.7754 -35.2002 -35.2002v-158.399 +c-17.3242 0 -35.1992 26.3994 -70.3994 26.3994c-26.4004 0 -35.2002 -20.625 -35.2002 -44c0 -8.79395 32.7119 -20.4443 56.0996 -34.9258c14.5752 -9.07422 27.2256 -19.5244 39.875 -30.7988c18.374 -16.1094 36.6328 -33.8359 39.5967 -59.0752h176.753 +c3.7627 42.79 39.6758 74.5088 39.6758 120v21.2988c0 40.5244 -22.1973 57.124 -61.3252 50.6006c-8.00098 14.6113 -33.9785 24.1514 -53.625 12.9248c-18.2246 19.3652 -46.3809 17.7871 -61.0498 4.9502v91.0254zM352 24c-13.2549 0 -24 -10.7451 -24 -24 +s10.7451 -24 24 -24s24 10.7451 24 24s-10.7451 24 -24 24z" /> +d="M433.941 382.059c8.68848 -8.68848 14.0586 -20.6943 14.0586 -33.9404v-268.118c0 -26.5098 -21.4902 -48 -48 -48h-80v-48c0 -26.5098 -21.4902 -48 -48 -48h-224c-26.5098 0 -48 21.4902 -48 48v320c0 26.5098 21.4902 48 48 48h80v48c0 26.5098 21.4902 48 48 48 +h172.118c13.2461 0 25.252 -5.37012 33.9404 -14.0586zM266 -16c3.31152 0 6 2.68848 6 6v42h-96c-26.5098 0 -48 21.4902 -48 48v224h-74c-3.31152 0 -6 -2.68848 -6 -6v-308c0 -3.31152 2.68848 -6 6 -6h212zM394 80c3.31152 0 6 2.68848 6 6v202h-88 +c-13.2549 0 -24 10.7451 -24 24v88h-106c-3.31152 0 -6 -2.68848 -6 -6v-308c0 -3.31152 2.68848 -6 6 -6h212zM400 336v9.63184c0 1.65527 -0.670898 3.15723 -1.75684 4.24316l-48.3682 48.3682c-1.12598 1.125 -2.65234 1.75684 -4.24316 1.75684h-9.63184v-64h64z" /> +d="M433.941 318.059c8.68848 -8.68848 14.0586 -20.6943 14.0586 -33.9404v-268.118c0 -26.5098 -21.4902 -48 -48 -48h-352c-26.5098 0 -48 21.4902 -48 48v352c0 26.5098 21.4902 48 48 48h268.118c13.2461 0 25.252 -5.37012 33.9404 -14.0586zM272 368h-128v-80h128v80z +M394 16c3.31152 0 6 2.68848 6 6v259.632c0 1.65527 -0.670898 3.15723 -1.75684 4.24316l-78.2432 78.2432v-100.118c0 -13.2549 -10.7451 -24 -24 -24h-176c-13.2549 0 -24 10.7451 -24 24v104h-42c-3.31152 0 -6 -2.68848 -6 -6v-340c0 -3.31152 2.68848 -6 6 -6h340z +M224 216c48.5234 0 88 -39.4766 88 -88s-39.4766 -88 -88 -88s-88 39.4766 -88 88s39.4766 88 88 88zM224 88c22.0557 0 40 17.9443 40 40s-17.9443 40 -40 40s-40 -17.9443 -40 -40s17.9443 -40 40 -40z" /> @@ -241,13 +237,13 @@ c4.70508 4.66699 12.3027 4.63672 16.9697 -0.0683594l22.5361 -22.7178c4.66699 -4. +c-13.7021 -5.33105 -26.3955 -11.5371 -38.0498 -18.585c-1.82715 -1.11523 -3.98633 -1.76953 -6.28027 -1.77734h-86.1006c-3.31152 0 -6 -2.68848 -6 -6v-340c0 -3.31152 2.68848 -6 6 -6h340c3.31152 0 6 2.68848 6 6v25.9658c0 5.37012 3.5791 10.0596 8.74023 11.541z +" /> +M363.351 93.0645c-9.61328 -9.71289 -45.5293 -41.3965 -104.064 -41.3965c-82.4297 0 -140.484 61.4248 -140.484 141.567c0 79.1514 60.2754 139.4 139.763 139.4c55.5303 0 88.7373 -26.6201 97.5928 -34.7783c2.37793 -2.1875 3.86914 -5.3252 3.86914 -8.80762 +c0 -2.39746 -0.717773 -4.64258 -1.93359 -6.51465l-18.1543 -28.1133c-3.8418 -5.9502 -11.9668 -7.28223 -17.499 -2.9209c-8.5957 6.77637 -31.8145 22.5381 -61.708 22.5381c-48.3037 0 -77.916 -35.3301 -77.916 -80.082c0 -41.5889 26.8877 -83.6924 78.2764 -83.6924 +c32.6572 0 56.8428 19.0391 65.7266 27.2256c5.26953 4.85645 13.5957 4.03906 17.8193 -1.73828l19.8652 -27.1699c1.45996 -1.98145 2.32422 -4.42969 2.32422 -7.07715c0 -3.28809 -1.32422 -6.2793 -3.47656 -8.44043z" /> +c0 34.4023 -52 33.7744 -52 0.676758v-116.571c0 -8.83105 -7.17773 -15.9961 -16.0078 -15.9961c-4.0166 0 -7.68848 1.48242 -10.499 3.92969l-7 6.09473c-3.37012 2.93457 -5.49316 7.25293 -5.49316 12.0674v41.2275c0 34.2148 -52 33.8857 -52 0.677734v-56.9531 +c0 -18.8555 8.27441 -36.874 22.7002 -49.4365l97.71 -85.0801c12.4502 -10.8398 19.5898 -26.4463 19.5898 -42.8164v-10.2861h220v7.07617c0 13.21 2.65332 26.0791 7.88281 38.25l42.835 99.6553c3.37891 7.82715 5.28223 16.501 5.28223 25.5625v0.0498047z" /> +c-44.1123 0 -80 35.8877 -80 80v8c0 30.8779 25.1211 56 56 56h293.917c24.5 0 47.084 -12.2725 60.4111 -32.8291zM528 16v76.1709c0 0.0166016 -0.0439453 0.106445 -0.0439453 0.12207c0 14.3945 -4.24219 27.8057 -11.5439 39.0498l-146.358 225.715 +c-4.44336 6.85254 -11.9707 10.9424 -20.1367 10.9424h-293.917c-4.41113 0 -8 -3.58887 -8 -8v-8c0 -17.6445 14.3555 -32 32 -32h213.471c25.2021 0 42.626 -25.293 33.6299 -48.8457l-24.5518 -64.2812c-7.05371 -18.4658 -25.0732 -30.873 -44.8398 -30.873h-113.709 +c-22.0557 0 -40 -17.9443 -40 -40c0 -4.41113 3.58887 -8 8 -8h131.552c0.0175781 0 0.0712891 -0.0273438 0.0888672 -0.0273438c9.16992 0 17.9404 -1.72461 26.0039 -4.86621l99.752 -38.7881c18.5898 -7.22852 30.6035 -24.7881 30.6035 -44.7363v-23.582h128z" /> +d="M501.03 331.824c6.92773 -11.1826 10.9697 -24.4053 10.9697 -38.5146c0 -5.92676 -0.706055 -11.6885 -2.03809 -17.208l-57.623 -241.963c-13.2236 -56.1904 -63.707 -98.1387 -123.908 -98.1387h-0.352539h-107.455 +c-0.0761719 0 -0.193359 0.00195312 -0.270508 0.00195312c-40.9248 0 -78.1475 15.9814 -105.761 42.0391l-91.3652 85.9766c-14.3076 13.4434 -23.2246 32.5547 -23.2246 53.7168c0 19.5254 7.61035 37.2861 20.0254 50.4766 +c5.31836 5.66406 29.875 29.3926 68.1152 21.8477l-24.3594 82.1973c-1.97363 6.64844 -2.97656 13.6836 -2.97656 20.9688c0 38.6953 29.8926 70.4639 67.8262 73.4531c-0.246094 2.45117 -0.34082 4.85547 -0.34082 7.37207c0 34.4199 23.585 63.376 55.4619 71.5752 +c43.248 10.9785 80.5645 -17.7012 89.6602 -53.0723l13.6836 -53.207l4.64648 22.6602c6.99023 33.5186 36.6826 58.8037 72.2373 58.916c8.73438 0 56.625 -3.26953 70.7383 -54.0801c15.0664 0.710938 46.9199 -3.50977 66.3105 -35.0176zM463.271 287.219 +c7.86914 32.9844 -42.1211 45.2695 -50.0859 11.9219l-24.8008 -104.146c-4.38867 -18.4141 -31.7783 -11.8926 -28.0557 6.2168l28.5479 139.166c7.39844 36.0703 -43.3076 45.0703 -50.1182 11.9629l-31.791 -154.971 +c-3.54883 -17.3086 -28.2832 -18.0469 -32.7109 -0.804688l-47.3262 184.035c-8.43359 32.8105 -58.3691 20.2676 -49.8652 -12.8359l42.4414 -165.039c4.81641 -18.7207 -23.3711 -26.9121 -28.9648 -8.00781l-31.3438 105.779 +c-9.6875 32.6465 -59.1191 18.2578 -49.3867 -14.625l36.0137 -121.539c6.59375 -22.2441 10.1777 -45.7803 10.1777 -70.1523c0 -6.54297 -8.05664 -10.9355 -13.4824 -5.82617l-51.123 48.1074c-24.7852 23.4082 -60.0527 -14.1875 -35.2793 -37.4902l91.3691 -85.9805 +c19.0469 -17.9736 44.75 -28.998 72.9795 -28.998h0.157227h107.455c0.0732422 0 0.138672 0.0429688 0.212891 0.0429688c37.5791 0 69.1016 26.1416 77.3564 61.2168z" /> +d="M358.182 268.639c43.1934 16.6348 89.8184 -15.7949 89.8184 -62.6387v-84c-0.000976562 -5.24023 -0.600586 -10.3037 -1.72754 -15.2041l-27.4297 -118.999c-6.98242 -30.2969 -33.7549 -51.7969 -64.5566 -51.7969h-178.286 +c-21.2588 0 -41.3682 10.4102 -53.791 27.8457l-109.699 154.001c-21.2432 29.8193 -14.8047 71.3574 14.5498 93.1523c18.8115 13.9658 42.1748 16.2822 62.083 8.87207v161.129c0 36.9443 29.7363 67 66.2861 67s66.2861 -30.0557 66.2861 -67v-73.6338 +c20.4131 2.85742 41.4678 -3.94238 56.5947 -19.6289c27.1934 12.8467 60.3799 5.66992 79.8721 -19.0986zM80.9854 168.303c-14.4004 20.2119 -43.8008 -2.38281 -29.3945 -22.6055l109.712 -154c3.43457 -4.81934 8.92871 -7.69727 14.6973 -7.69727h178.285 +c8.49219 0 15.8037 5.99414 17.7822 14.5762l27.4297 119.001c0.333008 1.44629 0.501953 2.93457 0.501953 4.42285v84c0 25.1602 -36.5713 25.1211 -36.5713 0c0 -8.83594 -7.16309 -16 -16 -16h-6.85645c-8.83691 0 -16 7.16406 -16 16v21 +c0 25.1602 -36.5713 25.1201 -36.5713 0v-21c0 -8.83594 -7.16309 -16 -16 -16h-6.85938c-8.83691 0 -16 7.16406 -16 16v35c0 25.1602 -36.5703 25.1201 -36.5703 0v-35c0 -8.83594 -7.16309 -16 -16 -16h-6.85742c-8.83691 0 -16 7.16406 -16 16v175 +c0 25.1602 -36.5713 25.1201 -36.5713 0v-241.493c0 -15.5703 -20.0352 -21.9092 -29.0303 -9.2832zM176.143 48v96c0 8.83691 6.26855 16 14 16h6c7.73242 0 14 -7.16309 14 -16v-96c0 -8.83691 -6.26758 -16 -14 -16h-6c-7.73242 0 -14 7.16309 -14 16zM251.571 48v96 +c0 8.83691 6.26758 16 14 16h6c7.73145 0 14 -7.16309 14 -16v-96c0 -8.83691 -6.26855 -16 -14 -16h-6c-7.73242 0 -14 7.16309 -14 16zM327 48v96c0 8.83691 6.26758 16 14 16h6c7.73242 0 14 -7.16309 14 -16v-96c0 -8.83691 -6.26758 -16 -14 -16h-6 +c-7.73242 0 -14 7.16309 -14 16z" /> +M366.442 73.791c4.40332 -7.99219 -1.37012 -17.791 -10.5107 -17.791h-42.8096c-0.00488281 0 -0.000976562 -0.0126953 -0.00585938 -0.0126953c-4.58594 0 -8.57422 2.58301 -10.5869 6.37305l-47.5156 89.3027h-31.958v-83.6631c0 -6.61719 -5.38281 -12 -12 -12 +h-38.5674c-6.61719 0 -12 5.38281 -12 12v248.304c0 6.61719 5.38281 12 12 12h78.667c71.251 0 101.498 -32.749 101.498 -85.252c0 -31.6123 -15.2148 -59.2969 -39.4824 -73.1758c3.02148 -4.61719 0.225586 0.199219 53.2715 -96.085zM256.933 208.094 +c20.9131 0 32.4307 11.5186 32.4316 32.4316c0 19.5752 -6.5127 31.709 -38.9297 31.709h-27.377v-64.1406h33.875z" /> +d="M268 32c-6.62305 0 -12 5.37695 -12 12v216c0 6.62305 5.37695 12 12 12h24c6.62305 0 12 -5.37695 12 -12v-216c0 -6.62305 -5.37695 -12 -12 -12h-24zM432 368c8.83105 0 16 -7.16895 16 -16v-16c0 -8.83105 -7.16895 -16 -16 -16h-16v-336 +c0 -26.4922 -21.5078 -48 -48 -48h-288c-26.4922 0 -48 21.5078 -48 48v336h-16c-8.83105 0 -16 7.16895 -16 16v16c0 8.83105 7.16895 16 16 16h82.4102l34.0195 56.7002c8.39258 13.9844 23.6777 23.2998 41.1602 23.2998h100.82 +c0.0078125 0 -0.015625 0.0517578 -0.0078125 0.0517578c17.4824 0 32.7949 -9.36719 41.1875 -23.3516l34 -56.7002h82.4102zM171.84 397.09l-17.4502 -29.0898h139.221l-17.46 29.0898c-1.0498 1.74707 -2.95898 2.91016 -5.14355 2.91016h-0.00683594h-94 +c-0.00585938 0 -0.00683594 0.00683594 -0.0126953 0.00683594c-2.18457 0 -4.09766 -1.16992 -5.14746 -2.91699zM368 -16v336h-288v-336h288zM156 32c-6.62305 0 -12 5.37695 -12 12v216c0 6.62305 5.37695 12 12 12h24c6.62305 0 12 -5.37695 12 -12v-216 +c0 -6.62305 -5.37695 -12 -12 -12h-24z" /> - -Created by FontForge 20190801 at Mon Mar 23 10:45:51 2020 +Created by FontForge 20200314 at Mon Oct 5 09:50:45 2020 By Robert Madole Copyright (c) Font Awesome - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +d="M470.38 446.49c3.03613 0.957031 6.26953 1.47949 9.62012 1.47949c17.6514 0 31.9834 -14.3223 32 -31.9697v-352c0 -35.3496 -43 -64 -96 -64s-96 28.6602 -96 64s43 64 96 64c11.0361 -0.0605469 21.7158 -1.4248 32 -3.92969v184.609l-256 -75v-233.68 +c0 -35.3398 -43 -64 -96 -64s-96 28.6602 -96 64s43 64 96 64c11.0352 -0.0625 21.7139 -1.42285 32 -3.91992v261.41c0.00878906 14.3125 9.43359 26.4336 22.4102 30.5098z" /> +d="M280.37 299.74c2.09082 1.68555 4.76562 2.69434 7.6582 2.69434s5.55078 -1.00879 7.6416 -2.69434l184.33 -151.74v-164c0 -8.83105 -7.16895 -16 -16 -16l-112.02 0.30957c-8.83105 0 -16.001 7.16895 -16.001 15.999c0 0.0175781 0 0.0341797 0.000976562 0.0517578 +v95.6396c0 8.83105 -7.16992 16 -16 16h-64c-8.83105 0 -16 -7.16895 -16 -16v-95.71c0 -8.80371 -7.12695 -15.9561 -15.9209 -16l-112.06 -0.290039c-8.83105 0 -16 7.16895 -16 16v163.89zM571.6 196.53c2.70703 -2.20117 4.42578 -5.56152 4.42578 -9.31836 +c0 -2.88867 -1.02246 -5.54004 -2.72559 -7.6123l-25.5 -31c-2.20117 -2.66309 -5.53418 -4.35059 -9.25684 -4.35059c-2.90332 0 -5.56641 1.0332 -7.64258 2.75098l-235.23 193.74c-2.09082 1.68555 -4.7666 2.69434 -7.6582 2.69434 +c-2.89258 0 -5.55078 -1.00879 -7.6416 -2.69434l-235.22 -193.74c-2.0752 -1.71387 -4.73926 -2.75586 -7.63867 -2.75586c-3.73242 0 -7.07031 1.70898 -9.27148 4.38574l-25.5 31c-1.71875 2.07617 -2.7627 4.74414 -2.7627 7.64648 +c0 3.72266 1.69824 7.05176 4.3623 9.25391l253.13 208.47c8.29102 6.82227 18.9668 10.9209 30.5312 10.9209s22.1787 -4.09863 30.4688 -10.9209l89.5303 -73.6602v72.6104c0 6.62305 5.37695 12 12 12h56c6.62305 0 12 -5.37695 12 -12v-138.51z" /> +d="M256 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM348.49 127c2.19531 2.73926 3.52637 6.21973 3.52637 10c0 5.05566 -2.35059 9.56738 -6.0166 12.5l-58 42.5v144c0 8.83105 -7.16895 16 -16 16h-32 +c-8.83105 0 -16 -7.16895 -16 -16v-155.55c0 -12.6338 5.8418 -23.8975 15 -31.2305l67 -49.7197v0c2.7373 -2.19043 6.21387 -3.51758 9.98926 -3.51758c5.05566 0 9.56738 2.35059 12.501 6.01758l20 25v0z" /> +c-0.00195312 0 -0.00390625 -0.0078125 -0.00488281 -0.0078125c-4.12891 0 -7.53125 -3.13477 -7.95508 -7.15234zM315.64 144c9.5 0 16.9102 8.23047 15.9102 17.6797l-5.06934 48c-0.860352 8.14062 -7.7207 14.3203 -15.9102 14.3203h-45.1504 +c-8.18945 0 -15.0498 -6.17969 -15.9102 -14.3203l-5.06934 -48c-1 -9.44922 6.40918 -17.6797 15.9092 -17.6797h55.29z" /> +d="M567.938 204.092c5.07422 -7.61035 8.06152 -16.7998 8.06152 -26.625v-129.467c0 -26.5098 -21.4902 -48 -48 -48h-480c-26.5098 0 -48 21.4902 -48 48v129.467c0 9.8252 2.9873 19.0146 8.06152 26.625l105.689 158.534c8.60742 12.9102 23.2725 21.374 39.9385 21.374 +h268.621c16.667 0 31.332 -8.46387 39.9395 -21.374zM162.252 320l-85.334 -128h123.082l32 -64h112l32 64h123.082l-85.333 128h-251.497z" /> +d="M500.33 448c6.62305 0 12 -5.37695 12 -12v-200.34c0 -6.62305 -5.37695 -12 -12 -12h-200.33c-6.62305 0 -12 5.37695 -12 12v47.4102c0 0.00390625 -0.00878906 0.00878906 -0.00878906 0.0136719c0 6.62305 5.37695 12 12 12 +c0.194336 0 0.386719 -0.00488281 0.579102 -0.0136719l101.529 -4.87012c-31.6084 47.0322 -85.1172 77.8594 -145.992 77.8594c-97.1367 0 -176 -78.8633 -176 -176s78.8633 -176 176 -176c44.502 0 85.168 16.5518 116.173 43.8301 +c2.10938 1.84375 4.87793 2.96582 7.89746 2.96582c3.31055 0 6.31055 -1.34375 8.48242 -3.51562l34 -34c2.17383 -2.17188 3.52246 -5.17285 3.52246 -8.48633c0 -3.55176 -1.54688 -6.74512 -4.00293 -8.94336c-43.8477 -39.6924 -102.079 -63.9102 -165.824 -63.9102 +h-0.355469c-136.9 0 -247.9 110.93 -248 247.81c-0.0996094 136.66 111.34 248.19 248 248.19c0.0927734 0 0.116211 0.140625 0.208984 0.140625c75.5918 0 143.312 -33.9727 188.711 -87.4707l-4 82.7598c-0.00878906 0.192383 -0.0136719 0.375977 -0.0136719 0.570312 +c0 6.62305 5.37695 12 12 12h0.0136719h47.4102z" /> +d="M440.65 435.43c-0.00976562 0.192383 -0.0136719 0.375977 -0.0136719 0.570312c0 6.62109 5.37305 11.9961 11.9932 12h47.3701c6.62305 0 12 -5.37695 12 -12v-200.35c0 -6.62305 -5.37695 -12 -12 -12h-200.22c-6.62305 0 -12 5.37695 -12 12v47.4092 +c0 0.00488281 -0.00878906 0.00976562 -0.00878906 0.0136719c0 6.62305 5.37695 12 12 12c0.194336 0 0.386719 -0.00390625 0.578125 -0.0136719l101.46 -4.85938c-31.5938 46.9941 -85.1406 77.6738 -145.973 77.6738c-82.8662 0 -152.428 -57.4229 -171.027 -134.614 +c-1.24219 -5.29688 -5.99707 -9.25391 -11.6699 -9.25977h-49.0498c-6.62305 0 -12 5.36719 -12 11.9893c0 0.748047 0.0693359 1.48047 0.200195 2.19043c21.6201 114.9 122.44 201.82 243.54 201.82c0.0966797 0 0.123047 0.141602 0.219727 0.141602 +c75.5615 0 143.248 -33.9814 188.601 -87.4814zM255.83 16c0.015625 0 0.0185547 0.0898438 0.0332031 0.0898438c82.8701 0 152.43 57.4434 170.997 134.65c1.24219 5.29688 5.99707 9.25391 11.6699 9.25977h49.0498c6.62305 0 12 -5.36719 12 -11.9893 +c0 -0.748047 -0.0693359 -1.48047 -0.200195 -2.19043c-21.6201 -114.9 -122.439 -201.82 -243.55 -201.82c-0.0800781 0 -0.0908203 -0.140625 -0.170898 -0.140625c-75.4814 0 -143.106 33.9082 -188.459 87.3105l4.14941 -82.5703 +c0.0107422 -0.201172 0.015625 -0.395508 0.015625 -0.599609c0 -6.62305 -5.37695 -12 -12 -12h-0.015625h-47.3496c-6.62305 0 -12 5.37695 -12 12v200.33c0 6.62305 5.37695 12 12 12h200.2c6.62305 0 12 -5.37695 12 -12v-47.4004 +c0 -0.00390625 0.0078125 -0.00878906 0.0078125 -0.0136719c0 -6.62305 -5.37695 -12 -12 -12c-0.193359 0 -0.386719 0.00488281 -0.578125 0.0136719l-101.8 4.87012c31.5254 -47.0088 85.0449 -77.7998 145.847 -77.7998h0.15332z" /> +c-60.5791 0 -109.917 48.0967 -111.928 108.187l-14.3828 7.19141c-10.502 5.25098 -17.6895 16.0908 -17.6895 28.6221v48c0 141.504 114.52 256 256 256z" /> +d="M215 377c15 15 41 4.46973 41 -17v-336c0 -21.4697 -26 -32 -41 -17l-88.9404 89h-102.06c-13.2461 0 -24 10.7539 -24 24v144c0 13.2461 10.7539 24 24 24h102z" /> +d="M0 195.882v204.118c0 26.5098 21.4902 48 48 48h204.118c13.2461 0 25.252 -5.37012 33.9404 -14.0586l211.883 -211.883c18.7441 -18.7441 18.7441 -49.1367 0 -67.8818l-204.118 -204.118c-18.7451 -18.7441 -49.1377 -18.7441 -67.8818 0l-211.883 211.883 +c-8.68848 8.68848 -14.0586 20.6943 -14.0586 33.9404zM112 384c-26.5098 0 -48 -21.4902 -48 -48s21.4902 -48 48 -48s48 21.4902 48 48s-21.4902 48 -48 48z" /> +d="M497.941 222.059c18.7441 -18.7441 18.7441 -49.1367 0 -67.8818l-204.118 -204.118c-18.7461 -18.7451 -49.1387 -18.7441 -67.8818 0l-211.883 211.883c-8.68848 8.68848 -14.0586 20.6943 -14.0586 33.9404v204.118c0 26.5098 21.4902 48 48 48h204.118 +c13.2461 0 25.252 -5.37012 33.9404 -14.0586zM112 288c26.5098 0 48 21.4902 48 48s-21.4902 48 -48 48s-48 -21.4902 -48 -48s21.4902 -48 48 -48zM625.941 154.177l-204.118 -204.118c-18.7451 -18.7441 -49.1377 -18.7441 -67.8818 0l-0.360352 0.360352 +l174.059 174.059c16.999 16.999 26.3604 39.6006 26.3604 63.6406s-9.3623 46.6406 -26.3604 63.6396l-196.242 196.242h48.7207c13.2461 0 25.252 -5.37012 33.9404 -14.0586l211.883 -211.883c18.7441 -18.7441 18.7441 -49.1367 0 -67.8818z" /> d="M512 304v-288c0 -26.5 -21.5 -48 -48 -48h-416c-26.5 0 -48 21.5 -48 48v288c0 26.5 21.5 48 48 48h88l12.2998 32.9004c7 18.6992 24.9004 31.0996 44.9004 31.0996h125.5c20 0 37.8994 -12.4004 44.8994 -31.0996l12.4004 -32.9004h88c26.5 0 48 -21.5 48 -48zM376 160 c0 66.2002 -53.7998 120 -120 120s-120 -53.7998 -120 -120s53.7998 -120 120 -120s120 53.7998 120 120zM344 160c0 -48.5 -39.5 -88 -88 -88s-88 39.5 -88 88s39.5 88 88 88s88 -39.5 88 -88z" /> +d="M333.49 210c34.4395 -27.54 55.5693 -71.1504 50.8301 -119.6c-6.86035 -70.6504 -70.2002 -122.4 -141 -122.4h-209.32c-8.83105 0 -16 7.16895 -16 16v48c0 8.83105 7.16895 16 16 16h31.8701v288h-31.8701c-8.83105 0 -16 7.16895 -16 16v48 +c0 8.83105 7.16895 16 16 16h199.42c74.5801 0 134.45 -64.4902 127.07 -140.79c-2.43945 -24.5273 -12.1992 -47.1309 -27 -65.21zM145.66 336v-96h87.7598c26.4922 0 48 21.5078 48 48s-21.5078 48 -48 48h-87.7598zM233.42 48c30.9072 0 56 25.0928 56 56 +s-25.0928 56 -56 56h-87.7598v-112h87.7598z" /> +d="M320 400v-32c0 -8.83105 -7.16895 -16 -16 -16h-62.7598l-80 -320h46.7598c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-192c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h62.7598l80 320h-46.7598 +c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h192c8.83105 0 16 -7.16895 16 -16z" /> +d="M432 416c8.83105 0 16 -7.16895 16 -16v-80c0 -8.83105 -7.16895 -16 -16 -16h-32c-8.83105 0 -16 7.16895 -16 16v16h-120v-112h24c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-128c-8.83105 0 -16 7.16895 -16 16v32 +c0 8.83105 7.16895 16 16 16h24v112h-120v-16c0 -8.83105 -7.16895 -16 -16 -16h-32c-8.83105 0 -16 7.16895 -16 16v80c0 8.83105 7.16895 16 16 16h416zM363.31 155.31l80 -80c2.89453 -2.89551 4.68555 -6.89844 4.68555 -11.3115 +c0 -4.41406 -1.79102 -8.41211 -4.68555 -11.3076l-80 -80c-10 -10.0205 -27.3096 -3 -27.3096 11.3096v48h-224v-48c0 -15.6396 -18 -20.6396 -27.3096 -11.3096l-80 80c-2.89453 2.89551 -4.68555 6.89844 -4.68555 11.3115c0 4.41406 1.79102 8.41211 4.68555 11.3076 +l80 80c10 10.0107 27.3096 3 27.3096 -11.3096v-48h224v48c0 15.6396 18 20.6396 27.3096 11.3096z" /> +d="M12.8301 96c-7.07617 0 -12.8301 5.74414 -12.8301 12.8193v0.0107422v38.3398v0.00976562c0 7.07617 5.74414 12.8203 12.8193 12.8203h0.0107422h262.34h0.00976562c7.07617 0 12.8203 -5.74414 12.8203 -12.8193v-0.0107422v-38.3398v-0.00976562 +c0 -7.07617 -5.74414 -12.8203 -12.8193 -12.8203h-0.0107422h-262.34zM12.8301 352c-7.07617 0 -12.8301 5.74414 -12.8301 12.8193v0.0107422v38.3398v0.00976562c0 7.07617 5.74414 12.8203 12.8193 12.8203h0.0107422h262.34h0.00976562 +c7.07617 0 12.8203 -5.74414 12.8203 -12.8193v-0.0107422v-38.3398v-0.00976562c0 -7.07617 -5.74414 -12.8203 -12.8193 -12.8203h-0.0107422h-262.34zM432 288c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-416c-8.83105 0 -16 7.16895 -16 16v32 +c0 8.83105 7.16895 16 16 16h416zM432 32c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-416c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h416z" /> +d="M432 288c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-416c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h416zM432 32c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-416c-8.83105 0 -16 7.16895 -16 16 +v32c0 8.83105 7.16895 16 16 16h416zM108.1 352c-6.67773 0 -12.0996 5.42188 -12.0996 12.0996v39.8105c0 6.67285 5.41699 12.0898 12.0898 12.0898h0.00976562h231.811c6.67285 0 12.0898 -5.41699 12.0898 -12.0898v-39.8105v-0.00976562 +c0 -6.67285 -5.41699 -12.0898 -12.0898 -12.0898h-231.811zM339.91 96h-231.811c-6.67773 0 -12.0996 5.42188 -12.0996 12.0996v39.8105c0 6.67285 5.41699 12.0898 12.0898 12.0898h0.00976562h231.811c6.67285 0 12.0898 -5.41699 12.0898 -12.0898v-39.8105 +v-0.00976562c0 -6.67285 -5.41699 -12.0898 -12.0898 -12.0898z" /> +d="M16 224c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h416c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-416zM432 32c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-416c-8.83105 0 -16 7.16895 -16 16 +v32c0 8.83105 7.16895 16 16 16h416zM435.17 416c7.07617 0 12.8301 -5.74414 12.8301 -12.8193v-0.0107422v-38.3398v-0.00976562c0 -7.07617 -5.74414 -12.8203 -12.8193 -12.8203h-0.0107422h-262.34h-0.00976562c-7.07617 0 -12.8203 5.74414 -12.8203 12.8193 +v0.0107422v38.3398v0.00976562c0 7.07617 5.74414 12.8203 12.8193 12.8203h0.0107422h262.34zM435.17 160c7.07617 0 12.8301 -5.74414 12.8301 -12.8193v-0.0107422v-38.3398v-0.00976562c0 -7.07617 -5.74414 -12.8203 -12.8193 -12.8203h-0.0107422h-262.34h-0.00976562 +c-7.07617 0 -12.8203 5.74414 -12.8203 12.8193v0.0107422v38.3398v0.00976562c0 7.07617 5.74414 12.8203 12.8193 12.8203h0.0107422h262.34z" /> +d="M432 32c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-416c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h416zM432 160c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-416c-8.83105 0 -16 7.16895 -16 16 +v32c0 8.83105 7.16895 16 16 16h416zM432 288c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-416c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h416zM432 416c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16 +h-416c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h416z" /> +d="M80 80c8.83105 0 16 -7.16895 16 -16v-64c0 -8.83105 -7.16895 -16 -16 -16h-64c-8.83105 0 -16 7.16895 -16 16v64c0 8.83105 7.16895 16 16 16h64zM80 400c8.83105 0 16 -7.16895 16 -16v-64c0 -8.83105 -7.16895 -16 -16 -16h-64c-8.83105 0 -16 7.16895 -16 16v64 +c0 8.83105 7.16895 16 16 16h64zM80 240c8.83105 0 16 -7.16895 16 -16v-64c0 -8.83105 -7.16895 -16 -16 -16h-64c-8.83105 0 -16 7.16895 -16 16v64c0 8.83105 7.16895 16 16 16h64zM496 64c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-320 +c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h320zM496 384c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-320c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h320zM496 224c8.83105 0 16 -7.16895 16 -16v-32 +c0 -8.83105 -7.16895 -16 -16 -16h-320c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h320z" /> +d="M100.69 84.71l-96 95.9805c-2.89453 2.89551 -4.68555 6.89844 -4.68555 11.3115c0 4.41406 1.79102 8.41211 4.68555 11.3076l96 96c9.97949 10 27.3096 3.01074 27.3096 -11.3096v-191.98c0 -14.2393 -17.3096 -21.3096 -27.3096 -11.3096zM432 32 +c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-416c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h416zM435.17 160c7.07617 0 12.8301 -5.74414 12.8301 -12.8193v-0.0107422v-38.3398v-0.00976562 +c0 -7.07617 -5.74414 -12.8203 -12.8193 -12.8203h-0.0107422h-230.34h-0.00976562c-7.07617 0 -12.8203 5.74414 -12.8203 12.8193v0.0107422v38.3398v0.00976562c0 7.07617 5.74414 12.8203 12.8193 12.8203h0.0107422h230.34zM435.17 288 +c7.07617 0 12.8301 -5.74414 12.8301 -12.8193v-0.0107422v-38.3398v-0.00976562c0 -7.07617 -5.74414 -12.8203 -12.8193 -12.8203h-0.0107422h-230.34h-0.00976562c-7.07617 0 -12.8203 5.74414 -12.8203 12.8193v0.0107422v38.3398v0.00976562 +c0 7.07617 5.74414 12.8203 12.8193 12.8203h0.0107422h230.34zM432 416c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-416c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h416z" /> +d="M27.3096 84.7002c-9.97949 -10 -27.3096 -3.00977 -27.3096 11.2998v192c0 14.2197 17.2695 21.3398 27.3096 11.3203l96 -96c2.89453 -2.89648 4.68555 -6.89941 4.68555 -11.3125s-1.79102 -8.41211 -4.68555 -11.3076zM432 32c8.83105 0 16 -7.16895 16 -16v-32 +c0 -8.83105 -7.16895 -16 -16 -16h-416c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h416zM435.17 160c7.07617 0 12.8301 -5.74414 12.8301 -12.8193v-0.0107422v-38.3398v-0.00976562c0 -7.07617 -5.74414 -12.8203 -12.8193 -12.8203h-0.0107422 +h-230.34h-0.00976562c-7.07617 0 -12.8203 5.74414 -12.8203 12.8193v0.0107422v38.3398v0.00976562c0 7.07617 5.74414 12.8203 12.8193 12.8203h0.0107422h230.34zM435.17 288c7.07617 0 12.8301 -5.74414 12.8301 -12.8193v-0.0107422v-38.3398v-0.00976562 +c0 -7.07617 -5.74414 -12.8203 -12.8193 -12.8203h-0.0107422h-230.34h-0.00976562c-7.07617 0 -12.8203 5.74414 -12.8203 12.8193v0.0107422v38.3398v0.00976562c0 7.07617 5.74414 12.8203 12.8193 12.8203h0.0107422h230.34zM432 416c8.83105 0 16 -7.16895 16 -16v-32 +c0 -8.83105 -7.16895 -16 -16 -16h-416c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h416z" /> @@ -375,18 +674,18 @@ c63.4004 0 118.9 33.5996 149.9 87.5c6.69922 11.7998 22.6992 11.2998 28.2998 -1.2 d="M216 424.14c0 -103.14 168 -125.85 168 -296.14c0 -105.87 -86.1299 -192 -192 -192s-192 86.1299 -192 192c0 58.6699 27.7998 106.84 54.5703 134.96c14.96 15.7305 41.4297 5.2002 41.4297 -16.5v-85.5098c0 -35.1699 27.9805 -64.4902 63.1504 -64.9404 c35.7393 -0.469727 64.8496 28.3604 64.8496 63.9902c0 88 -176 96.1504 -52.1504 277.18c13.5 19.7305 44.1504 10.7607 44.1504 -13.04z" /> +d="M572.52 206.6c2.21387 -4.37793 3.46094 -9.38965 3.46094 -14.626c0 -5.2373 -1.24707 -10.1855 -3.46094 -14.5635c-54.1992 -105.771 -161.59 -177.41 -284.52 -177.41s-230.29 71.5898 -284.52 177.4c-2.21387 4.37793 -3.46094 9.38965 -3.46094 14.626 +c0 5.2373 1.24707 10.1855 3.46094 14.5635c54.1992 105.771 161.59 177.41 284.52 177.41s230.29 -71.5898 284.52 -177.4zM288 48c0.0234375 0 0.0458984 -0.000976562 0.0703125 -0.000976562c79.4365 0 143.93 64.4922 143.93 143.93v0.0712891 +c0 79.4756 -64.5244 144 -144 144s-144 -64.5244 -144 -144s64.5244 -144 144 -144zM288 288c0.0761719 0 0.160156 -0.0273438 0.237305 -0.0273438c52.8623 0 95.7803 -42.917 95.7803 -95.7793s-42.918 -95.7803 -95.7803 -95.7803s-95.7803 42.918 -95.7803 95.7803 +c0 8.68945 1.16016 17.1104 3.33301 25.1162c7.93164 -5.83594 17.7432 -9.26758 28.3359 -9.26758c26.4092 0 47.8496 21.4404 47.8496 47.8496c0 10.5938 -3.44922 20.3867 -9.28516 28.3184c8.0459 2.34277 16.541 3.66797 25.3096 3.79004z" /> +d="M320 48c8.91309 0.0830078 17.542 0.976562 26 2.61035l51.8896 -40.1504c-25.0195 -6.45996 -50.9795 -10.46 -77.8896 -10.46c-122.93 0 -230.29 71.5898 -284.52 177.4c-2.21387 4.37793 -3.46094 9.38965 -3.46094 14.626c0 5.2373 1.24707 10.1855 3.46094 14.5635 +c10.2393 20 22.9297 38.29 36.7197 55.5898l104.899 -81.0693c5.65039 -74.4004 67.0508 -133.11 142.9 -133.11zM633.82 -10.0996c3.76855 -2.92871 6.17676 -7.50977 6.17676 -12.6475c0 -3.69238 -1.25293 -7.09375 -3.35742 -9.80273l-19.6396 -25.2705 +c-2.92871 -3.76855 -7.50879 -6.17578 -12.6465 -6.17578c-3.69727 0 -7.10254 1.25684 -9.81348 3.36621l-588.36 454.729c-3.76562 2.92871 -6.1709 7.50781 -6.1709 12.6426c0 3.69434 1.25488 7.09863 3.36133 9.80762l19.6299 25.2705 +c2.92871 3.76855 7.50879 6.17578 12.6465 6.17578c3.69727 0 7.10254 -1.25684 9.81348 -3.36621l127.22 -98.3301c43.6846 23.8564 94.0967 37.6357 147.32 37.7002c122.93 0 230.29 -71.5898 284.52 -177.4c2.21387 -4.37793 3.46094 -9.38965 3.46094 -14.626 +c0 -5.2373 -1.24707 -10.1855 -3.46094 -14.5635c-20.2109 -39.3887 -47.6904 -73.7881 -81.25 -102.07zM450.1 131.9c8.61035 18.3203 13.9004 38.4697 13.9004 60.0996c0 0.0273438 0.00195312 0.0527344 0.00195312 0.0800781c0 79.4316 -64.4883 143.92 -143.92 143.92 +h-0.0820312c-34.6328 -0.0253906 -66.4756 -12.4902 -91.1504 -33.1104l73.6104 -56.8896c0.857422 3.20508 1.38867 6.5625 1.54004 10c-0.0185547 10.5391 -3.49023 20.3242 -9.30957 28.21c8.43164 2.46191 17.3359 3.82031 26.5576 3.82031 +c52.2998 0 94.7607 -42.46 94.7607 -94.7598c0 -0.423828 -0.00292969 -0.847656 -0.00878906 -1.27051c-0.138672 -10.377 -1.97559 -20.4014 -5.2002 -29.7197z" /> +l43.2002 -57.5996h102.86l-49.0303 171.61c-2.91992 10.2197 4.75 20.3896 15.3799 20.3896h65.5c5.95117 0 11.1396 -3.23633 13.9004 -8.05957l105.1 -183.94h114.29z" /> +d="M504.971 88.9707c9.37305 -9.37305 9.37305 -24.5684 0 -33.9404l-80 -79.9844c-15.0098 -15.0098 -40.9707 -4.49023 -40.9707 16.9707v39.9834h-58.7852c-3.46094 0 -6.58105 1.46484 -8.77246 3.81152l-70.5566 75.5967l53.333 57.1426l52.7812 -56.5508h32v39.9814 +c0 21.4375 25.9434 31.9971 40.9707 16.9707zM12 272c-6.62695 0 -12 5.37305 -12 12v56c0 6.62695 5.37305 12 12 12h110.785c3.46094 0 6.58203 -1.46484 8.77246 -3.81152l70.5566 -75.5967l-53.333 -57.1426l-52.7812 56.5508h-84zM384 272h-32l-220.442 -236.188 +c-2.26953 -2.43066 -5.44629 -3.81152 -8.77246 -3.81152h-110.785c-6.62695 0 -12 5.37305 -12 12v56c0 6.62695 5.37305 12 12 12h84l220.442 236.188c2.19141 2.34668 5.31152 3.81152 8.77246 3.81152h58.7852v39.9814c0 21.4365 25.9434 31.9971 40.9707 16.9697 +l80 -79.9814c9.37305 -9.37207 9.37305 -24.5674 0 -33.9404l-80 -79.9844c-15.0098 -15.0088 -40.9707 -4.48926 -40.9707 16.9707v39.9844z" /> +d="M164.07 299.9h-152.07c-6.62305 0 -12 5.37695 -12 12v80c0 19.8682 16.1309 36 36 36h104c19.8691 0 36 -16.1318 36 -36v-80c0 -0.0380859 0.000976562 -0.0751953 0.000976562 -0.112305c0 -6.5625 -5.32812 -11.8906 -11.8906 -11.8906 +c-0.0136719 0 -0.0263672 0.00292969 -0.0400391 0.00292969zM512 311.9c0 -0.00390625 0.00195312 -0.0078125 0.00195312 -0.0107422c0 -6.5625 -5.32715 -11.8906 -11.8896 -11.8906c-0.0380859 0 -0.0751953 0.000976562 -0.112305 0.000976562h-152 +c-6.62305 0 -12 5.37695 -12 12v80c0 19.8691 16.1309 36 36 36h104c19.8691 0 36 -16.1309 36 -36v-80.0996zM348 267.9h151.85c6.62305 0 12.001 -5.37598 12.001 -11.998c0 -0.0341797 0 -0.0683594 -0.000976562 -0.102539 +c-0.199219 -20.2002 -0.599609 -40.3994 0 -53.2002c0 -150.699 -134.42 -246.699 -255 -246.699s-256.75 96 -256.75 246.6c0.600586 13 0.100586 31.9004 0 53.2998v0.100586c0 6.62305 5.37695 12 12 12h151.9c6.62305 0 12 -5.37695 12 -12v-52 +c0 -127.9 160 -128.101 160 0v52c0 6.62305 5.37695 12 12 12z" /> @@ -422,10 +722,10 @@ d="M207.029 66.5244l-194.344 194.344c-9.37207 9.37305 -9.37207 24.5684 0 33.9404 c9.37207 -9.37305 9.37207 -24.5684 0 -33.9404l-194.343 -194.344c-9.37305 -9.37207 -24.5684 -9.37207 -33.9414 0z" /> +l-40.416 42.792v-182.119h187.548c6.62305 0 12.627 -2.68457 16.9707 -7.0293z" /> +d="M400 416c26.5098 0 48 -21.4902 48 -48v-352c0 -26.5098 -21.4902 -48 -48 -48h-352c-26.5098 0 -48 21.4902 -48 48v352c0 26.5098 21.4902 48 48 48h352zM94 32c160.055 0 290 129.708 290 290c0 7.11621 -4.97559 13.0801 -11.6279 14.6143l-65 14.998 +c-1.08691 0.250977 -2.20312 0.394531 -3.36621 0.394531c-6.18457 0 -11.501 -3.75195 -13.7939 -9.10156l-30 -69.998c-0.775391 -1.81055 -1.22266 -3.81055 -1.22266 -5.90332c0 -4.68066 2.14844 -8.86328 5.51172 -11.6152l37.8857 -30.9971 +c-22.4834 -47.9219 -61.8369 -87.8164 -110.78 -110.779l-30.9971 37.8848c-2.75195 3.36328 -6.94043 5.49414 -11.6211 5.49414c-2.09277 0 -4.08691 -0.429688 -5.89746 -1.20508l-69.998 -29.999c-5.34961 -2.29297 -9.08984 -7.59375 -9.08984 -13.7783 +c0 -1.16309 0.131836 -2.29492 0.382812 -3.38184l14.998 -65c1.55957 -6.75391 7.58301 -11.627 14.6162 -11.627z" /> @@ -512,11 +812,11 @@ c-8.41406 0 -15.4707 6.49023 -16.0176 14.8867c-7.29883 112.07 -96.9404 201.488 - M447.99 -15.4971c0.324219 -9.03027 -6.97168 -16.5029 -16.0049 -16.5039h-48.0684c-8.62598 0 -15.6455 6.83496 -15.999 15.4531c-7.83789 191.148 -161.286 344.626 -352.465 352.465c-8.61816 0.354492 -15.4531 7.37402 -15.4531 15.999v48.0684 c0 9.03418 7.47266 16.3301 16.5029 16.0059c234.962 -8.43555 423.093 -197.667 431.487 -431.487z" /> +d="M576 144v-96c0 -26.5098 -21.4902 -48 -48 -48h-480c-26.5098 0 -48 21.4902 -48 48v96c0 26.5098 21.4902 48 48 48h480c26.5098 0 48 -21.4902 48 -48zM528 224h-480c-0.0234375 0 -0.0996094 -0.0361328 -0.124023 -0.0361328 +c-10.8613 0 -21.2168 -2.18066 -30.6533 -6.12891l96.5283 144.791c8.60742 12.9102 23.2725 21.374 39.9385 21.374h268.621c16.667 0 31.332 -8.46387 39.9395 -21.374l96.5273 -144.791c-9.43652 3.94824 -19.8447 6.16504 -30.7061 6.16504h-0.0712891zM480 128 +c-17.6729 0 -32 -14.3271 -32 -32s14.3271 -32 32 -32s32 14.3271 32 32s-14.3271 32 -32 32zM384 128c-17.6729 0 -32 -14.3271 -32 -32s14.3271 -32 32 -32s32 14.3271 32 32s-14.3271 32 -32 32z" /> @@ -572,13 +872,14 @@ d="M507.73 338.9c11.7891 -47.4102 -0.84082 -99.6602 -37.9102 -136.73c-39.9004 -3 c-16.5 50.1006 -5.58984 107.561 34.0498 147.2c37.0303 37.0195 89.2002 49.6699 136.58 37.9297c9.08984 -2.25977 12.2803 -13.54 5.66016 -20.1602l-74.3604 -74.3594l11.3105 -67.8799l67.8799 -11.3105l74.3604 74.3604 c6.58008 6.58008 17.8799 3.51953 20.1201 -5.50977zM64 -24c13.25 0 24 10.75 24 24c0 13.2598 -10.75 24 -24 24s-24 -10.7402 -24 -24c0 -13.25 10.75 -24 24 -24z" /> +d="M139.61 412.5l17 -16.5c2.13281 -2.18066 3.44922 -5.16797 3.44922 -8.45605c0 -3.33496 -1.35352 -6.35547 -3.54004 -8.54395l-72.1992 -72.1904l-15.5898 -15.6191c-2.29297 -2.17969 -5.39941 -3.51758 -8.80859 -3.51758 +c-3.41016 0 -6.50977 1.33789 -8.80176 3.51758l-47.5898 47.3994c-2.18066 2.17383 -3.53125 5.18262 -3.53125 8.50195c0 3.31836 1.35059 6.3252 3.53125 8.49805l15.7002 15.7197c2.17285 2.18164 5.18164 3.53125 8.50098 3.53125s6.3252 -1.34961 8.49902 -3.53125 +l22.6992 -22.1191l63.6807 63.3096c2.17285 2.18066 5.18262 3.53125 8.50098 3.53125c3.31934 0 6.3252 -1.35059 8.49902 -3.53125zM139.61 253.31l16.9795 -17c2.125 -2.16504 3.43652 -5.13574 3.43652 -8.40625c0 -3.31641 -1.34863 -6.32031 -3.52637 -8.49316 +l-72.2002 -72.2197l-15.7002 -15.6904c-2.29004 -2.17871 -5.39551 -3.5166 -8.80273 -3.5166c-3.4082 0 -6.50586 1.33789 -8.79688 3.5166l-47.4697 47.5c-2.18066 2.17285 -3.53125 5.18262 -3.53125 8.50195c0 3.31836 1.35059 6.3252 3.53125 8.49805l15.7002 15.6904 +c2.17285 2.18066 5.18164 3.53125 8.50098 3.53125s6.3252 -1.35059 8.49902 -3.53125l22.6992 -22.1006l63.6807 63.7197c2.17285 2.18164 5.18262 3.53125 8.50098 3.53125c3.31934 0 6.3252 -1.34961 8.49902 -3.53125zM64 80c26.4922 0 48 -21.5078 48 -48 +s-21.5078 -48 -48 -48c-26.4697 0 -48.5898 21.5 -48.5898 48s22.0996 48 48.5898 48zM496 64c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-288c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h288zM496 384 +c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-288c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h288zM496 224c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-288c-8.83105 0 -16 7.16895 -16 16v32 +c0 8.83105 7.16895 16 16 16h288z" /> @@ -598,11 +899,11 @@ c-40.2998 -22.1006 -68.8994 -62 -75.1992 -109.4h-65.9004c-17.7002 0 -32 14.2998 +c-13.2549 0 -24 10.7451 -24 24v368c0 13.2549 10.7451 24 24 24h168v-104zM440.971 375.029c4.34473 -4.34473 7.0293 -10.3477 7.0293 -16.9707v-6.05859h-96v96h6.05859c6.62305 0 12.626 -2.68457 16.9707 -7.0293z" /> @@ -634,30 +935,30 @@ d="M400 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 - d="M16 316c-8.83691 0 -16 7.16309 -16 16v40c0 8.83691 7.16309 16 16 16h416c8.83691 0 16 -7.16309 16 -16v-40c0 -8.83691 -7.16309 -16 -16 -16h-416zM16 156c-8.83691 0 -16 7.16309 -16 16v40c0 8.83691 7.16309 16 16 16h416c8.83691 0 16 -7.16309 16 -16v-40 c0 -8.83691 -7.16309 -16 -16 -16h-416zM16 -4c-8.83691 0 -16 7.16309 -16 16v40c0 8.83691 7.16309 16 16 16h416c8.83691 0 16 -7.16309 16 -16v-40c0 -8.83691 -7.16309 -16 -16 -16h-416z" /> +d="M48 400c26.4922 0 48 -21.5078 48 -48s-21.5078 -48 -48 -48s-48 21.5078 -48 48s21.5078 48 48 48zM48 240c26.4922 0 48 -21.5078 48 -48s-21.5078 -48 -48 -48s-48 21.5078 -48 48s21.5078 48 48 48zM48 80c26.4922 0 48 -21.5078 48 -48s-21.5078 -48 -48 -48 +s-48 21.5078 -48 48s21.5078 48 48 48zM496 64c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-320c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h320zM496 384c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16 +h-320c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h320zM496 224c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-320c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h320z" /> +c4.76758 -1.95996 10.0107 -3.07617 15.4707 -3.11914c10.1602 0 14.3594 3.5 14.3594 8.21973c0 6.64941 -5.60938 9.08984 -15.9395 9.08984h-4.73047c-5.95996 0 -9.25 2.12012 -12.25 7.87988l-1.0498 1.92969c-2.4502 4.75 -1.2002 9.81055 2.7998 14.8809l5.61035 7 +c3.47461 4.32422 7.0957 8.37695 11 12.3096h-22.8301c-4.41504 0 -8 3.58496 -8 8v16c0 4.41504 3.58496 8 8 8h57c7.5 0 11.3398 -4 11.3398 -11.3496v-3.31055c0.0136719 -0.299805 0.0175781 -0.595703 0.0175781 -0.899414 +c0 -5.10449 -1.9248 -9.76367 -5.08789 -13.29zM496 224c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-320c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h320zM496 384c8.83105 0 16 -7.16895 16 -16v-32 +c0 -8.83105 -7.16895 -16 -16 -16h-320c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h320zM496 64c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-320c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h320zM16 288 +c-4.41504 0 -8 3.58496 -8 8v16c0 4.41504 3.58496 8 8 8h16v64h-8c-4.4082 0.0078125 -7.98145 3.59766 -7.98145 8.00781c0 1.2832 0.303711 2.49707 0.841797 3.57227l8 16c1.31055 2.62012 4.01367 4.41406 7.13965 4.41992h24c4.41504 0 8 -3.58496 8 -8v-88h16 +c4.41504 0 8 -3.58496 8 -8v-16c0 -4.41504 -3.58496 -8 -8 -8h-64zM12.0898 128c-7.00977 0 -12.0898 4 -12.0898 11.4102v4c0 47.2803 51 56.3994 50.9697 69.1201c0 7.18945 -5.9502 8.75 -9.2793 8.75c-0.0185547 0 -0.0380859 0.000976562 -0.0566406 0.000976562 +c-3.65918 0 -6.97949 -1.46582 -9.40332 -3.84082c-5.12012 -4.91016 -10.5107 -7 -16.1201 -2.44043l-8.58008 6.87988c-5.7998 4.53027 -7.16992 9.78027 -2.7998 15.3701c6.65918 8.75 19.0996 18.75 40.46 18.75c19.4697 0 44.4697 -10.5 44.4697 -39.5596 +c0 -37.7607 -45.0498 -46.1504 -48.3398 -56.4404h38.6797c4.41504 0 8 -3.58496 8 -8v-16c0 -4.41504 -3.58496 -8 -8 -8h-67.9102z" /> +d="M496 224c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-480c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h102.29c-11.6797 16.5303 -19.7803 35.4697 -21.7803 56.3604c-0.385742 3.97559 -0.577148 7.88281 -0.577148 11.96 +c0 68.2266 55.3633 123.624 123.577 123.68h68c50.1416 0 93.5244 -28.7686 114.521 -70.7998l0.529297 -1c1.07324 -2.14844 1.70215 -4.57715 1.70215 -7.13965c0 -6.26562 -3.61035 -11.6953 -8.86133 -14.3203l-42.9404 -21.4707 +c-2.14941 -1.07324 -4.5791 -1.70312 -7.14355 -1.70312c-6.2627 0 -11.6895 3.60645 -14.3164 8.85352c-8.18652 16.374 -25.0859 27.5801 -44.623 27.5801h-0.0371094h-66.79c-24.0352 -0.000976562 -43.5479 -19.5059 -43.5479 -43.541 +c0 -19.5742 12.9414 -36.1494 30.7285 -41.6289l87.1699 -26.8301h202.1zM315.76 128h94.3906c2.6084 -7.7373 4.44434 -15.9834 5.33984 -24.3604c0.385742 -3.97559 0.577148 -7.88281 0.577148 -11.96c0 -68.2266 -55.3633 -123.624 -123.577 -123.68h-68 +c-50.1416 0 -93.5244 28.7686 -114.521 70.7998l-0.529297 1c-1.07324 2.14844 -1.70215 4.57715 -1.70215 7.13965c0 6.26562 3.61035 11.6953 8.86133 14.3203l42.9404 21.4707c2.14941 1.07324 4.5791 1.70312 7.14355 1.70312 +c6.2627 0 11.6895 -3.60645 14.3164 -8.85352c8.18652 -16.374 25.0859 -27.5801 44.623 -27.5801h0.0371094h66.79c24.0254 0.0224609 43.5273 19.5244 43.5498 43.5498c-0.0117188 15.3828 -8.07227 28.8594 -20.2402 36.4502z" /> +d="M32 384c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h144c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-32v-160c0 -44.1533 35.8467 -80 80 -80s80 35.8467 80 80v160h-32c-8.83105 0 -16 7.16895 -16 16v32 +c0 8.83105 7.16895 16 16 16h144c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-32v-160c0 -88.2197 -71.7803 -160 -160 -160s-160 71.7803 -160 160v160h-32zM432 0c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-416 +c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h416z" /> +M448 198.059v-6.05859h-96v96h6.05859c6.62305 0 12.626 -2.68457 16.9707 -7.0293l65.9404 -65.9404c4.34473 -4.34473 7.03027 -10.3477 7.03027 -16.9717z" /> @@ -764,7 +1065,7 @@ d="M544 224c96 -21.333 96 -26.583 96 -32s0 -10.667 -96 -32l-128 -16l-48 -16h-24l l64 8v2.66602h-48v16h-8v69.333l10.667 10.667h34.666l66.667 -80h48v164h-16v12h114.667c11.666 0 21.333 -2.625 21.333 -6s-9.66699 -6 -21.333 -6h-39.5088l116.842 -148h24l48 -16z" /> +c15.4062 13.3047 39.6865 2.50293 39.6865 -18.1641v-15.8174l-108.607 -93.7861c-11.8906 -10.2637 -19.3926 -25.4307 -19.3926 -42.3564v-0.0234375c0 -0.0078125 -0.0292969 -0.00292969 -0.0292969 -0.0117188c0 -16.9268 7.53125 -32.1084 19.4229 -42.373 +l108.606 -93.7852v-15.8184c0 -20.7002 -24.2998 -31.4531 -39.6865 -18.1641z" /> +d="M496 288c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-96c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h16v96h-16c-8.82422 0.0078125 -15.9775 7.18945 -15.9775 16.0156c0 2.57129 0.608398 5.00098 1.6875 7.1543l16 32 +c2.62598 5.23926 8.03613 8.8252 14.29 8.83008h48c8.83105 0 16 -7.16895 16 -16v-144h16zM336 384c8.83105 0 16 -7.16895 16 -16v-48c0 -8.83105 -7.16895 -16 -16 -16h-33.4805l-77.8096 -112l77.8096 -112h33.4805c8.83105 0 16 -7.16895 16 -16v-48 +c0 -8.83105 -7.16895 -16 -16 -16h-67c-5.41113 0.0273438 -10.1836 2.73047 -13.0596 6.87012l-79.9004 115l-79.9004 -115c-2.89062 -4.16016 -7.69531 -6.87012 -13.1396 -6.87012h-67c-8.83105 0 -16 7.16895 -16 16v48c0 8.83105 7.16895 16 16 16h33.4805l77.8096 112 +l-77.8096 112h-33.4805c-8.83105 0 -16 7.16895 -16 16v48c0 8.83105 7.16895 16 16 16h67c5.41113 -0.0273438 10.1836 -2.73047 13.0596 -6.87012l79.9004 -115l79.9004 115c2.89062 4.16016 7.69531 6.87012 13.1396 6.87012h67z" /> +d="M496 0c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-96c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h16v96h-16c-8.82422 0.0078125 -15.9775 7.18945 -15.9775 16.0156c0 2.57129 0.608398 5.00098 1.6875 7.1543l16 32 +c2.62598 5.23926 8.03613 8.8252 14.29 8.83008h48c8.83105 0 16 -7.16895 16 -16v-144h16zM336 384c8.83105 0 16 -7.16895 16 -16v-48c0 -8.83105 -7.16895 -16 -16 -16h-33.4805l-77.8096 -112l77.8096 -112h33.4805c8.83105 0 16 -7.16895 16 -16v-48 +c0 -8.83105 -7.16895 -16 -16 -16h-67c-5.41113 0.0273438 -10.1836 2.73047 -13.0596 6.87012l-79.9004 115l-79.9004 -115c-2.89062 -4.16016 -7.69531 -6.87012 -13.1396 -6.87012h-67c-8.83105 0 -16 7.16895 -16 16v48c0 8.83105 7.16895 16 16 16h33.4805l77.8096 112 +l-77.8096 112h-33.4805c-8.83105 0 -16 7.16895 -16 16v48c0 8.83105 7.16895 16 16 16h67c5.41113 -0.0273438 10.1836 -2.73047 13.0596 -6.87012l79.9004 -115l79.9004 115c2.89062 4.16016 7.69531 6.87012 13.1396 6.87012h67z" /> +c0.136719 3.79004 1.03223 7.43164 2.51562 10.7031l49.4355 98.8125c7.33008 14.6094 26.5391 26.4688 42.8867 26.4844h104.215c46.2168 72.7969 108.122 128 211.354 128c25.0996 0 50.3086 0 82.5059 -6.90625c5.54883 -1.1875 11.0176 -6.65625 12.207 -12.1875z +M384.04 280c22.0752 0.0078125 39.9971 17.9258 40.0098 40c0 22.0762 -17.9229 40 -40 40c-22.0762 0 -40 -17.9238 -40 -40c0 -22.0732 17.918 -39.9951 39.9902 -40z" /> @@ -987,12 +1288,12 @@ c2.2998 -2.30078 6.09961 -2.30078 8.5 0l23.0996 23.0996c9.2998 9.2998 9.2998 24. +c3.36816 -0.485352 6.75977 -0.711914 10.2607 -0.711914c8.3877 0 16.4424 1.44043 23.9287 4.08887c7.81348 2.76367 16.0107 -3.01465 16.0107 -11.3027v-88.8057c0 -26.5098 -21.4902 -48 -48 -48h-352c-26.5098 0 -48 21.4902 -48 48v352c0 26.5098 21.4902 48 48 48 +h121.033c12.5508 0 16.6748 -16.8301 5.54492 -22.6309c-18.7773 -9.78613 -36.0615 -22.1084 -51.0137 -37.6758c-2.18164 -2.27637 -5.25098 -3.69141 -8.64844 -3.69336h-50.916v-320h320v68.8721z" /> +M374.14 291.95c7.61035 16.6494 -9.54004 33.7998 -26.1895 26.2002l-144.34 -65.9707c-6.98438 -3.19238 -12.5781 -8.78516 -15.7705 -15.7695l-65.9795 -144.351c-7.61035 -16.6494 9.5498 -33.8096 26.1992 -26.1992l144.341 65.9697 +c6.9834 3.19238 12.5771 8.78613 15.7695 15.7695z" /> @@ -1006,8 +1307,8 @@ c-7.56055 7.56055 -20.4854 2.20605 -20.4854 -8.48438v-246.06c0 -10.6904 12.9258 d="M310.706 34.2354l8.81836 -44.4902c1.23828 -6.24902 -2.62109 -12.3623 -8.78809 -13.957c-12.5391 -3.24414 -34.8008 -7.78809 -61.1016 -7.78809c-104.371 0 -182.496 65.3076 -207.521 155.64h-30.1143c-6.62695 0 -12 5.37305 -12 12v28.3604 c0 6.62695 5.37305 12 12 12h21.3877c-1 12.958 -0.828125 28.6377 0.181641 42.2451h-21.5693c-6.62695 0 -12 5.37305 -12 12v29.7549c0 6.62695 5.37305 12 12 12h33.0752c28.9551 83.748 107.376 144 204.56 144c21.0752 0 40.582 -2.91211 52.6865 -5.20703 c6.86035 -1.30078 11.1475 -8.17578 9.32617 -14.917l-11.9912 -44.3682c-1.65527 -6.125 -7.78613 -9.89062 -14.002 -8.62305c-9.28711 1.89551 -23.3652 4.14551 -37.8516 4.14551c-54.9287 0 -96.9854 -30.0391 -117.619 -75.0303h138.278 -c7.66211 0 13.3613 -7.08203 11.7227 -14.5664l-6.51172 -29.7549c-1.13965 -5.20703 -6.3916 -9.43359 -11.7227 -9.43359v0h-146.593c-1.55176 -13.958 -1.34766 -27.917 -0.137695 -42.2451h134.237c7.68945 0 13.3936 -7.12891 11.708 -14.6309l-6.37305 -28.3604 -c-1.16211 -5.17188 -6.40723 -9.36914 -11.708 -9.36914h-113.689c19.5322 -50.6582 64.6982 -85.4482 121.462 -85.4482c18.0039 0 34.7334 2.97363 45.4258 5.41211c6.58887 1.50391 13.1094 -2.73828 14.4238 -9.36816z" /> +c7.66211 0 13.3613 -7.08203 11.7227 -14.5664l-6.51172 -29.7549c-1.17969 -5.3877 -5.9834 -9.43359 -11.7227 -9.43359h-146.593c-1.55176 -13.958 -1.34766 -27.917 -0.137695 -42.2451h134.237c7.68945 0 13.3936 -7.12891 11.708 -14.6309l-6.37305 -28.3604 +c-1.20312 -5.35547 -5.99121 -9.36914 -11.708 -9.36914h-113.689c19.5322 -50.6582 64.6982 -85.4482 121.462 -85.4482c18.0039 0 34.7334 2.97363 45.4258 5.41211c6.58887 1.50391 13.1094 -2.73828 14.4238 -9.36816z" /> +d="M176 96c14.2197 0 21.3496 -17.2598 11.3301 -27.3096l-80 -96c-2.89551 -2.89453 -6.89844 -4.68555 -11.3125 -4.68555c-4.41309 0 -8.41211 1.79102 -11.3076 4.68555l-80 96c-10.0703 10.0693 -2.90039 27.3096 11.29 27.3096h48v304c0 8.83105 7.16895 16 16 16h32 +c8.83105 0 16 -7.16895 16 -16v-304h48zM416 160c8.83105 0 16 -7.16895 16 -16v-17.6299c0 -9.51074 -4.14355 -18.0566 -10.7402 -23.9199l-61.2598 -70.4502h56c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-128c-8.83105 0 -16 7.16895 -16 16 +v17.6299c0 9.51074 4.14355 18.0566 10.7402 23.9199l61.2598 70.4502h-56c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h128zM447.06 245.38c0.600586 -1.67969 0.931641 -3.49512 0.931641 -5.37988c0 -8.82812 -7.16406 -15.9951 -15.9912 -16h-24.8398 +c-0.015625 0 -0.0263672 -0.00195312 -0.0419922 -0.00195312c-7.11426 0 -13.1514 4.6543 -15.2285 11.082l-4.40918 12.9199h-71l-4.4209 -12.9199c-2.07617 -6.42773 -8.10938 -11.0801 -15.2246 -11.0801h-0.00488281h-24.8301 +c-8.82715 0.00488281 -15.9863 7.17773 -15.9863 16.0049c0 1.88574 0.326172 3.69531 0.926758 5.375l59.2695 160c2.20996 6.19043 8.125 10.6201 15.0703 10.6201h41.4395c6.94531 0 12.8604 -4.42969 15.0703 -10.6201zM335.61 304h32.7793l-16.3896 48z" /> +d="M304 32c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-64c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h64zM176 96c14.2197 0 21.3496 -17.2598 11.3301 -27.3096l-80 -96 +c-2.89551 -2.89453 -6.89844 -4.68555 -11.3125 -4.68555c-4.41309 0 -8.41211 1.79102 -11.3076 4.68555l-80 96c-10.0801 10.0693 -2.90039 27.3096 11.29 27.3096h48v304c0 8.83105 7.16895 16 16 16h32c8.83105 0 16 -7.16895 16 -16v-304h48zM432 288 +c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-192c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h192zM368 160c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-128c-8.83105 0 -16 7.16895 -16 16v32 +c0 8.83105 7.16895 16 16 16h128zM496 416c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-256c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h256z" /> +d="M304 32c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-64c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h64zM16 288c-14.2305 0 -21.3496 17.2598 -11.3096 27.3096l80 96c2.89551 2.89453 6.89844 4.68555 11.3115 4.68555 +c4.41406 0 8.41211 -1.79102 11.3076 -4.68555l80 -96c10.0703 -10.0693 2.90039 -27.3096 -11.3096 -27.3096h-48v-304c0 -8.83105 -7.16895 -16 -16 -16h-32c-8.83105 0 -16 7.16895 -16 16v304h-48zM432 288c8.83105 0 16 -7.16895 16 -16v-32 +c0 -8.83105 -7.16895 -16 -16 -16h-192c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h192zM368 160c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-128c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h128zM496 416 +c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-256c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h256z" /> +d="M304 352c-8.82422 0.0078125 -15.9775 7.18945 -15.9775 16.0156c0 2.57129 0.608398 5.00098 1.6875 7.1543l16 32c2.62598 5.23926 8.03613 8.8252 14.29 8.83008h48c8.83105 0 16 -7.16895 16 -16v-112h16c8.83105 0 16 -7.16895 16 -16v-32 +c0 -8.83105 -7.16895 -16 -16 -16h-96c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h16v64h-16zM330.15 189.09c53.4502 14.25 101.85 -25.8799 101.869 -77.0898v-10.7695c0 -70.3906 -28.25 -107.24 -86.25 -132 +c-8.36914 -3.58008 -18.0293 1.2793 -20.8994 9.90918l-9.90039 20c-2.62012 7.87012 0.610352 16.9404 8.18066 20.3408c7.59961 3.28516 14.6064 7.64258 20.8496 12.9092c-47.6396 4.76074 -83.0996 51.4805 -68.8496 102.53c7.62793 26.2793 28.5596 46.9287 55 54.1699 +zM352 92c11.0381 0 20 8.96191 20 20s-8.96191 20 -20 20s-20 -8.96191 -20 -20s8.96191 -20 20 -20zM176 96c14.2197 0 21.3496 -17.2598 11.3301 -27.3096l-80 -96c-2.89551 -2.89453 -6.89844 -4.68555 -11.3125 -4.68555c-4.41309 0 -8.41211 1.79102 -11.3076 4.68555 +l-80 96c-10.0703 10.0693 -2.90039 27.3096 11.29 27.3096h48v304c0 8.83105 7.16895 16 16 16h32c8.83105 0 16 -7.16895 16 -16v-304h48z" /> +c7.59961 3.28516 14.6064 7.64258 20.8496 12.9092c-47.6396 4.76074 -83.0996 51.4805 -68.8301 102.53c7.62891 26.2793 28.5596 46.9287 55 54.1699zM352 92c11.0381 0 20 8.96191 20 20s-8.96191 20 -20 20s-20 -8.96191 -20 -20s8.96191 -20 20 -20zM304 352 +c-8.82422 0.0078125 -15.9775 7.18945 -15.9775 16.0156c0 2.57129 0.608398 5.00098 1.6875 7.1543l16 32c2.62598 5.23926 8.03613 8.8252 14.29 8.83008h48c8.83105 0 16 -7.16895 16 -16v-112h16c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-96 +c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h16v64h-16zM107.31 411.31l80 -96c10.0703 -10.0693 2.90039 -27.3096 -11.3096 -27.3096h-48v-304c0 -8.83105 -7.16895 -16 -16 -16h-32c-8.83105 0 -16 7.16895 -16 16v304h-48 +c-14.2197 0 -21.3496 17.2598 -11.3096 27.3096l80 96c2.89551 2.89453 6.89844 4.68555 11.3115 4.68555c4.41406 0 8.41211 -1.79102 11.3076 -4.68555z" /> +c-20.1826 0 -29.4854 39.293 -33.9307 57.7949c-5.20605 21.666 -10.5889 44.0703 -25.3936 58.9023c-32.4688 32.5234 -49.5029 73.9668 -89.1172 113.11c-2.19727 2.17285 -3.55762 5.19043 -3.55762 8.52148v213.77c0 6.54102 5.24316 11.8779 11.7832 11.998 +c15.8311 0.290039 36.6934 9.0791 52.6504 16.1787c31.7549 14.127 71.2744 31.708 119.561 31.7246h2.84375c42.7773 0 93.3633 -0.413086 113.774 -29.7373c8.3916 -12.0566 10.4453 -27.0342 6.14746 -44.6318c16.3125 -17.0527 25.0635 -48.8633 16.3818 -74.7568 +c17.5439 -23.4316 19.1436 -56.1318 9.30859 -79.4688l0.109375 -0.110352c11.8936 -11.9492 19.5234 -31.2588 19.4395 -49.1973c-0.15625 -30.3516 -26.1572 -58.0977 -59.5527 -58.0977h-101.725c7.30762 -28.3398 33.2773 -52.1318 33.2773 -94.5479 +c0 -73.4521 -48 -81.4521 -72 -81.4521z" /> +c-15.6172 0 -27.0654 14.6953 -23.2832 29.8213l48 192c2.6084 10.4316 12.0488 18.1787 23.2832 18.1787h11.3604c23.6895 -10.8936 50.5684 -10.4434 73.2793 0h11.3604c11.2344 0 20.6748 -7.74707 23.2832 -18.1787z" /> @@ -1105,7 +1405,7 @@ l-100.399 33.5l-47.2998 -94.7002c-6.40039 -12.7998 -24.6006 -12.7998 -31 0l-47.3 c-4.59961 13.5 8.2998 26.4004 21.9004 21.9004l100.5 -33.5l47.2998 94.7002c6.40039 12.7998 24.5996 12.7998 31 0l47.4004 -94.8008l100.399 33.5c13.5 4.60059 26.4004 -8.2998 21.9004 -21.8994l-33.5 -100.4zM346.5 101.5c49.9004 49.9004 49.9004 131.1 0 181 s-131.1 49.9004 -181 0s-49.9004 -131.1 0 -181s131.1 -49.9004 181 0z" /> +c0 5.72656 4.02734 10.5205 9.39746 11.7139l54.6025 12.1338v30.4395l-49.3975 -10.9775c-7.49316 -1.66602 -14.6025 4.03711 -14.6025 11.7139v40.9766c0 5.72656 4.02734 10.5205 9.39746 11.7139l54.6025 12.1338v68.9971c0 6.62695 5.37305 12 12 12h56 +c6.62695 0 12 -5.37305 12 -12v-51.2188l129.397 28.7539c7.49316 1.66602 14.6025 -4.03711 14.6025 -11.7139v-40.9756c0 -5.72656 -4.02734 -10.5205 -9.39746 -11.7139l-134.603 -29.9121v-30.4385l129.397 28.7539c7.49316 1.66602 14.6025 -4.03711 14.6025 -11.7139 +v-40.9766c0 -5.72656 -4.02734 -10.5205 -9.39746 -11.7139l-134.603 -29.9121v-159.219c86.1787 0 168 48 168 148.754c0 6.33398 5.63965 11.2461 11.9746 11.2461h48.0195z" /> +c-4.41504 0 -8 -3.58496 -8 -8v-64c0 -4.41504 3.58496 -8 8 -8z" /> +d="M496 320v-16c0 -4.41504 -3.58496 -8 -8 -8h-24v-12c0 -6.62695 -5.37305 -12 -12 -12h-392c-6.62695 0 -12 5.37305 -12 12v12h-24c-4.41504 0 -8 3.58496 -8 8v16c0 3.33398 2.03906 6.19141 4.94141 7.3916l232 88 +c0.94043 0.389648 1.97168 0.605469 3.05371 0.605469c1.08105 0 2.12305 -0.21582 3.06348 -0.605469l232 -88c2.90234 -1.2002 4.94141 -4.05762 4.94141 -7.3916zM472 16c13.2549 0 24 -10.7451 24 -24v-16c0 -4.41504 -3.58496 -8 -8 -8h-464 +c-4.41504 0 -8 3.58496 -8 8v16c0 13.2549 10.7451 24 24 24h432zM96 256h64v-192h64v192h64v-192h64v192h64v-192h36c6.62695 0 12 -5.37305 12 -12v-20h-416v20c0 6.62695 5.37305 12 12 12h36v192z" /> +l9.40039 -31.9004c1.4668 -4.96582 6.06152 -8.5957 11.5 -8.59961h22.8994c8.2998 0 14 8.09961 11.4004 15.9004l-57.5 169.1c-1.7002 4.7998 -6.2998 8.09961 -11.4004 8.09961h-32.5c-5.2002 0 -9.7002 -3.19922 -11.3994 -8.09961z" /> +d="M480 288c17.6611 0 32 -14.3389 32 -32v-288c0 -17.6611 -14.3389 -32 -32 -32h-320c-17.6611 0 -32 14.3389 -32 32v448c0 17.6611 14.3389 32 32 32h242.75c8.82715 -0.000976562 16.8291 -3.58008 22.6201 -9.37012l45.25 -45.25 +c5.7959 -5.79199 9.37891 -13.7979 9.37988 -22.6299v-82.75zM288 16v32c0 8.83105 -7.16895 16 -16 16h-32c-8.83105 0 -16 -7.16895 -16 -16v-32c0 -8.83105 7.16895 -16 16 -16h32c8.83105 0 16 7.16895 16 16zM288 144v32c0 8.83105 -7.16895 16 -16 16h-32 +c-8.83105 0 -16 -7.16895 -16 -16v-32c0 -8.83105 7.16895 -16 16 -16h32c8.83105 0 16 7.16895 16 16zM416 16v32c0 8.83105 -7.16895 16 -16 16h-32c-8.83105 0 -16 -7.16895 -16 -16v-32c0 -8.83105 7.16895 -16 16 -16h32c8.83105 0 16 7.16895 16 16zM416 144v32 +c0 8.83105 -7.16895 16 -16 16h-32c-8.83105 0 -16 -7.16895 -16 -16v-32c0 -8.83105 7.16895 -16 16 -16h32c8.83105 0 16 7.16895 16 16zM416 256v64h-48c-8.83105 0 -16 7.16895 -16 16v48h-160v-128h224zM64 320c17.6611 0 32 -14.3389 32 -32v-320 +c0 -17.6611 -14.3389 -32 -32 -32h-32c-17.6611 0 -32 14.3389 -32 32v320c0 17.6611 14.3389 32 32 32h32z" /> +d="M384 326.059v-6.05859h-128v128h6.05859c6.36523 0 12.4707 -2.5293 16.9717 -7.0293l97.9404 -97.9404c4.34375 -4.34473 7.0293 -10.3486 7.0293 -16.9717zM248 288h136v-328c0 -13.2549 -10.7451 -24 -24 -24h-336c-13.2549 0 -24 10.7451 -24 24v464 +c0 13.2549 10.7451 24 24 24h200v-136c0 -13.2002 10.7998 -24 24 -24zM123.206 47.4951l19.5791 20.8838c0.905273 0.96582 1.46289 2.26562 1.46289 3.69238c0 1.61426 -0.709961 3.06445 -1.83496 4.05469l-40.7627 35.874l40.7627 35.874 +c1.125 0.990234 1.83203 2.44043 1.83203 4.05566c0 1.42676 -0.554688 2.72559 -1.45996 3.69141l-19.5791 20.8848c-0.985352 1.05176 -2.3877 1.70703 -3.94141 1.70703c-1.42676 0 -2.72559 -0.555664 -3.69141 -1.46094l-64.8662 -60.8115 +c-1.05078 -0.986328 -1.70801 -2.38672 -1.70801 -3.93945c0 -1.55371 0.657227 -2.9541 1.70801 -3.94043l64.8662 -60.8115c0.96582 -0.905273 2.26562 -1.46289 3.69336 -1.46289c1.55273 0 2.9541 0.657227 3.93945 1.70898zM174.501 -2.98438 +c0.478516 -0.138672 0.982422 -0.212891 1.50488 -0.212891c2.45801 0 4.53418 1.64551 5.18555 3.89453l61.4395 211.626c0.138672 0.478516 0.213867 0.982422 0.213867 1.50488c0 2.45801 -1.64551 4.53418 -3.89355 5.18652l-27.4521 7.9707 +c-0.477539 0.138672 -0.981445 0.212891 -1.50391 0.212891c-2.45801 0 -4.53516 -1.64551 -5.18848 -3.89453l-61.4395 -211.626c-0.138672 -0.477539 -0.212891 -0.981445 -0.212891 -1.50293c0 -2.45898 1.64551 -4.53516 3.89355 -5.18848zM335.293 108.061 +c1.05176 0.986328 1.70898 2.38672 1.70898 3.94043c0 1.55273 -0.657227 2.95312 -1.70801 3.93945l-64.8662 60.8115c-0.96582 0.905273 -2.26562 1.46289 -3.69336 1.46289c-1.55273 0 -2.9541 -0.657227 -3.93945 -1.70898l-19.5801 -20.8848 +c-0.905273 -0.96582 -1.46289 -2.26562 -1.46289 -3.69238c0 -1.61426 0.709961 -3.06445 1.83496 -4.05469l40.7627 -35.874l-40.7637 -35.873c-1.125 -0.990234 -1.83203 -2.44043 -1.83203 -4.05566c0 -1.42676 0.554688 -2.72559 1.45996 -3.69141l19.5801 -20.8848 +c0.985352 -1.05176 2.3877 -1.70703 3.94141 -1.70703c1.42676 0 2.72559 0.555664 3.69141 1.46094z" /> +d="M448 352v-320h32c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-160c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h32v128h-192v-128h32c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-160 +c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h32v320h-32c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h160c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-32v-128h192v128h-32c-8.83105 0 -16 7.16895 -16 16v32 +c0 8.83105 7.16895 16 16 16h160c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-32z" /> +d="M448 400v-32c0 -8.83105 -7.16895 -16 -16 -16h-48v-368c0 -8.83105 -7.16895 -16 -16 -16h-32c-8.83105 0 -16 7.16895 -16 16v368h-32v-368c0 -8.83105 -7.16895 -16 -16 -16h-32c-8.83105 0 -16 7.16895 -16 16v112h-32c-88.3066 0 -160 71.6934 -160 160 +s71.6934 160 160 160h240c8.83105 0 16 -7.16895 16 -16z" /> +d="M352 128c53.0186 0 96 -42.9814 96 -96s-42.9814 -96 -96 -96s-96 42.9814 -96 96c0 0.00976562 0.00292969 -0.0429688 0.00292969 -0.0332031c0 7.16699 0.785156 14.1523 2.27344 20.874l-102.486 64.0537c-16.4033 -13.0752 -37.1816 -20.8945 -59.79 -20.8945 +c-53.0186 0 -96 42.9814 -96 96s42.9814 96 96 96c22.6084 0 43.3867 -7.81934 59.79 -20.8945l102.486 64.0537c-1.48633 6.71094 -2.27637 13.6826 -2.27637 20.8408c0 53.0186 42.9814 96 96 96s96 -42.9814 96 -96s-42.9814 -96 -96 -96 +c-22.6084 0 -43.3867 7.81934 -59.79 20.8965l-102.486 -64.0547c1.48828 -6.73145 2.27344 -13.6025 2.27344 -20.7793s-0.785156 -14.1719 -2.27344 -20.9033l102.486 -64.0537c16.4033 13.0752 37.1816 20.8945 59.79 20.8945z" /> +c-1.13281 -4.44141 -1.73535 -9.09375 -1.73535 -13.8857c0 -0.0117188 -0.00488281 0 -0.00488281 -0.0117188c0 -30.9277 25.0723 -56 56 -56s56 25.0723 56 56c-0.000976562 30.9287 -25.0732 56.001 -56.001 56.001z" /> +d="M320 416v-96h-64v96c0 17.6611 14.3389 32 32 32s32 -14.3389 32 -32zM368 288c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-16v-32c-0.0117188 -77.3096 -55.0684 -141.886 -128 -156.8v-99.2002h-64v99.2002 +c-72.9316 14.9141 -127.988 79.4902 -128 156.8v32h-16c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h352zM128 416v-96h-64v96c0 17.6611 14.3389 32 32 32s32 -14.3389 32 -32z" /> @@ -1358,16 +1658,17 @@ c5.41992 6.97949 15.4805 8.22949 22.46 2.80957l144.96 -112.04c22.9307 31.5 57.26 c0 -102.3 36.1504 -133.529 55.4697 -154.29c6 -6.43945 8.66016 -14.1602 8.61035 -21.71c0 -1.39941 -0.610352 -2.67969 -0.799805 -4.05957zM157.23 196.46l212.789 -164.46h-241.92c-19.1191 0 -31.9893 15.5996 -32.0996 32 c-0.0498047 7.5498 2.61035 15.2598 8.61035 21.71c16.21 17.4199 44.0098 42.79 52.6201 110.75zM320 -64c-35.3203 0 -63.9697 28.6504 -63.9697 64h127.939c0 -35.3496 -28.6494 -64 -63.9697 -64z" /> +d="M432 416c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-416c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h120l9.40039 18.7002c3.85547 7.88574 11.9434 13.2998 21.3066 13.2998h0.0927734h114.3 +c0.00585938 0 -0.00195312 0.0234375 0.00390625 0.0234375c9.41113 0 17.5645 -5.42871 21.4961 -13.3232l9.40039 -18.7002h120zM53.2002 -19l-21.2002 339h384l-21.2002 -339c-1.57031 -25.0762 -22.4316 -44.9971 -47.8994 -45h-245.801 +c-25.4678 0.00292969 -46.3291 19.9238 -47.8994 45z" /> +c5.45996 -5.05566 14.1846 -3.97168 18.2334 2.29492l22.3799 34.6553c1.20996 1.87305 1.91895 4.12109 1.91895 6.51465c0 3.125 -1.19727 5.97168 -3.15625 8.1084c-1.45703 1.58887 -36.4658 38.9043 -103.423 38.9043c-81.7578 0 -143.762 -62.0986 -143.762 -143.401 +c0 -82.3066 59.792 -145.567 144.484 -145.567c70.0752 0 108.259 43.8643 109.851 45.7314z" /> @@ -1402,13 +1703,13 @@ c-70.751 0 -128 -57.2588 -128 -128zM384 64c70.751 0 128 57.2598 128 128c0 70.751 d="M384 384c106 0 192 -86 192 -192s-86 -192 -192 -192h-192c-106 0 -192 86 -192 192s86 192 192 192h192zM384 64c70.7002 0 128 57.2002 128 128c0 70.7002 -57.2002 128 -128 128c-70.7002 0 -128 -57.2002 -128 -128c0 -70.7002 57.2002 -128 128 -128z" /> +s35.8877 -80 80 -80zM290.632 144l74.2861 120h-127.547l-24.7461 -39.9736c22.8271 -20.1328 38.4229 -48.2705 42.3828 -80.0264h35.624zM507.689 48.1143c46.0605 -2.43164 84.3115 34.3447 84.3125 79.8848c0 44.1123 -35.8877 80 -80 80 +c-0.0136719 0 0.00585938 -0.0078125 -0.00683594 -0.0078125c-6.85156 0 -13.5029 -0.864258 -19.8516 -2.48926l44.4688 -71.6426c4.66113 -7.50879 2.35156 -17.3721 -5.15625 -22.0322l-13.5938 -8.4375c-7.50879 -4.65918 -17.3721 -2.35156 -22.0322 5.15625 +l-44.4326 71.5859c-12.7021 -14.7451 -20.1475 -34.1416 -19.3359 -55.2627c1.57812 -41.0635 34.5918 -74.5898 75.6279 -76.7549z" /> +c22.7783 -7.32129 29.7354 -36.1914 12.8359 -53.0918zM192 320v-87.5312l118.208 37.9951c3.08594 0.992188 6.38086 1.52832 9.79492 1.52832c3.41309 0 6.70312 -0.536133 9.78906 -1.52832l118.208 -37.9951v87.5312h-256z" /> +c9.69238 24.6738 37.5537 36.8174 62.2275 27.124l190.342 -74.7646l24.8721 31.0898c12.3066 15.3809 33.9785 19.5146 51.0811 9.74121l112 -64c12.0605 -6.89355 20.1533 -19.8564 20.1533 -34.7305v-240c0 -18.5615 -12.7695 -34.6855 -30.8379 -38.9365l-136 -32 +c-2.94824 -0.694336 -6.00391 -1.06348 -9.16211 -1.06348h-80c-22.0908 0 -40 17.9082 -40 40z" /> +d="M384 -32v61.4609c0 8.5332 -4.4375 16.0166 -11.1543 20.2734l-111.748 70.8105c-7.41895 4.70215 -16.2656 7.45508 -25.6914 7.45508h-147.406c-13.2549 0 -24 10.7451 -24 24v8c0 35.3457 28.6543 64 64 64h123.648c13.3086 0 24.7158 8.12109 29.5371 19.6924 +l21.4102 51.3848c4.94141 11.8555 -3.77051 24.9229 -16.6143 24.9229h-229.981c-30.9277 0 -56 25.0723 -56 56v16c0 13.2549 10.7451 24 24 24h333.544c17.0908 0 32.0781 -8.90137 40.583 -22.3682l163.04 -258.146c9.35645 -14.8145 14.833 -32.4619 14.833 -51.2637 +v-116.222h-192z" /> +d="M510.9 302.729l-68.2969 -286.823c-10.8975 -45.7705 -52.0801 -79.9062 -101.166 -79.9062h-127.363c-36.0293 0 -68.8447 14.0459 -93.1855 36.9531l-108.298 101.92c-7.72754 7.29297 -12.5537 17.6299 -12.5537 29.084c0 22.0723 17.9199 39.9922 39.9922 39.9922 +c10.5742 0 20.2188 -4.11426 27.374 -10.8262l60.5928 -57.0254v0c0 27.958 -4.1084 54.9473 -11.6699 80.4668l-42.6885 144.075c-1.06738 3.60254 -1.63965 7.41699 -1.63965 11.3633c0 22.0801 17.9258 40.0059 40.0049 40.0059 +c18.1338 0 33.4512 -12.0977 38.3525 -28.6504l37.1543 -125.395c1.02148 -3.44629 4.21387 -5.96387 7.99023 -5.96387c4.59766 0 8.33105 3.7334 8.33105 8.33105c0 0.717773 -0.09375 1.41016 -0.264648 2.07422l-50.3047 195.641 +c-0.821289 3.19238 -1.25879 6.53711 -1.25879 9.98438c0 22.0742 17.9219 39.9961 39.9971 39.9961c18.6279 0 34.291 -12.793 38.7305 -30.043l56.0947 -218.158c1.15527 -4.49512 5.23926 -7.82129 10.0928 -7.82129c5.03125 0 9.23438 3.57715 10.207 8.32227 +l37.6826 183.704c3.76074 18.2139 19.9043 31.9248 39.2256 31.9248c4.20703 0 8.26562 -0.629883 12.0771 -1.83496c19.8604 -6.2998 30.8623 -27.6738 26.6758 -48.085l-33.8389 -164.967c-0.101562 -0.492188 -0.154297 -1.00098 -0.154297 -1.52344 +c0 -4.16797 3.38379 -7.55176 7.55176 -7.55176c3.56445 0 6.55566 2.48535 7.34668 5.80859l29.3975 123.459c4.19141 17.6016 20.0312 30.708 38.9082 30.708c22.0732 0 39.9941 -17.9209 39.9941 -39.9941c0 -3.19727 -0.380859 -6.26465 -1.09082 -9.24512v0z" /> +c13.2549 0 24 10.7451 24 24v71.6631h25.5566l44.1289 -82.9375c4.03516 -7.58301 12.0049 -12.7266 21.1875 -12.7266h24.4639c18.2617 0.000976562 29.8291 19.5908 21.0186 35.5869z" /> +d="M592 448c26.4922 0 48 -21.5078 48 -48v-320c0 -26.4922 -21.5078 -48 -48 -48h-240v-32h176c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-416c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h176v32h-240 +c-26.4922 0 -48 21.5078 -48 48v320c0 26.4922 21.5078 48 48 48h544zM576 96v288h-512v-288h512z" /> +d="M0 330.34c0.00292969 13.4697 8.32617 24.9932 20.1201 29.71l139.88 55.9502v-384l-138.06 -62.8398c-10.5107 -4.2002 -21.9404 3.54004 -21.9404 14.8594v346.32zM192 32v384l192 -64v-384zM554.06 414.84c10.5107 4.2002 21.9404 -3.54004 21.9404 -14.8594v-346.32 +c0 -13.4707 -8.32422 -24.9951 -20.1201 -29.71l-139.88 -55.9502v384z" /> +d="M440.667 265.891c-1.00195 -5.61328 -5.91309 -9.89062 -11.8135 -9.89062h-79.0957l-22.8564 -128h74.8096c7.4707 0 13.126 -6.75391 11.8135 -14.1094l-7.14355 -40c-1.00195 -5.61328 -5.91309 -9.89062 -11.8125 -9.89062h-79.0967l-15.377 -86.1094 +c-1.00195 -5.61328 -5.91309 -9.89062 -11.8125 -9.89062h-40.6318c-7.47266 0 -13.127 6.75391 -11.8135 14.1094l14.623 81.8906h-98.6338l-15.3779 -86.1094c-1.00195 -5.61328 -5.91309 -9.89062 -11.8135 -9.89062h-40.6318 +c-7.4707 0 -13.126 6.75391 -11.8125 14.1094l14.623 81.8906h-74.8105c-7.4707 0 -13.126 6.75391 -11.8125 14.1094l7.14258 40c1.00195 5.61328 5.91309 9.89062 11.8135 9.89062h79.0957l22.8564 128h-74.8096c-7.4707 0 -13.126 6.75391 -11.8135 14.1094l7.14355 40 +c1.00195 5.61328 5.91309 9.89062 11.8125 9.89062h79.0967l15.377 86.1094c1.00195 5.61328 5.91309 9.89062 11.8125 9.89062h40.6318c7.47266 0 13.127 -6.75391 11.8135 -14.1094l-14.623 -81.8906h98.6348l15.377 86.1094 +c1.00195 5.61328 5.91309 9.89062 11.8135 9.89062h40.6318c7.4707 0 13.126 -6.75391 11.8125 -14.1094l-14.623 -81.8906h74.8105c7.4707 0 13.126 -6.75391 11.8125 -14.1094zM261.889 128l22.8574 128h-98.6338l-22.8574 -128h98.6338z" /> +c-4.33203 -6.17773 -11.4912 -10.1973 -19.6006 -10.2002l-33.3994 -0.100586c-19.5 0 -30.9004 21.9004 -19.7002 37.8008l368 463.699c4.5 6.40039 11.7998 10.2002 19.5996 10.2002z" /> @@ -1756,14 +2057,14 @@ d="M290.547 258.961c-20.2949 10.1494 -44.1465 11.1992 -64.7393 3.88965c42.6064 0 c-14.7246 -30.8457 -46.123 -50.8535 -80.2979 -50.8535c-0.556641 0 -94.4707 8.61426 -94.4707 8.61426l-66.4062 -33.3467c-9.38379 -4.69336 -19.8145 -0.378906 -23.8945 7.78125l-44.4561 88.9248c-4.16699 8.61523 -1.11133 18.8975 6.94531 23.6211l58.0723 33.0693 l41.1221 74.1953c6.38965 57.2451 34.7314 109.768 79.7432 146.727c11.3906 9.44824 28.3408 7.78125 37.5098 -3.61328c9.44629 -11.3936 7.78027 -28.0674 -3.6123 -37.5156c-12.5029 -10.5596 -23.6172 -22.5098 -32.5088 -35.5703 c21.6719 14.7285 46.6787 24.7324 74.1865 28.0674c14.7246 1.94434 28.0625 -8.33594 29.7295 -23.0654c1.94531 -14.7275 -8.33594 -28.0674 -23.0615 -29.7344c-16.1162 -1.94434 -31.1201 -7.50293 -44.1787 -15.2832c26.1143 5.71289 58.7119 3.1377 88.0791 -11.1152 -c13.3359 -6.66895 18.8936 -22.5088 12.2246 -35.8486c-6.38965 -13.0596 -22.5039 -18.6162 -35.5645 -12.2256zM263.318 189.489c-6.1123 12.5049 -18.3379 20.2861 -32.2314 20.2861h-0.105469c-19.5732 0 -35.46 -15.8867 -35.46 -35.46 -c0 -0.0302734 0 -0.0800781 0.000976562 -0.110352c0 -21.4277 17.8076 -35.5703 35.5645 -35.5703c13.8936 0 26.1191 7.78125 32.2314 20.2861c4.44531 9.44922 13.6133 15.0059 23.3389 15.2842c-9.72559 0.277344 -18.8936 5.83496 -23.3389 15.2842zM638.139 226.726 -c4.16797 -8.61426 1.11133 -18.8965 -6.94531 -23.6201l-58.0713 -33.0693l-41.1221 -74.1963c-6.38965 -57.2451 -34.7314 -109.767 -79.7432 -146.726c-10.9316 -9.1123 -27.7988 -8.14453 -37.5098 3.6123c-9.44629 11.3945 -7.78027 28.0674 3.61328 37.5166 -c12.5029 10.5586 23.6162 22.5088 32.5078 35.5703c-21.6719 -14.7295 -46.6787 -24.7324 -74.1865 -28.0674c-10.0205 -2.50586 -27.5518 5.64258 -29.7295 23.0645c-1.94531 14.7285 8.33594 28.0674 23.0615 29.7344c16.1162 1.94629 31.1201 7.50293 44.1787 15.2842 -c-26.1143 -5.71289 -58.7119 -3.1377 -88.0791 11.1152c-13.3359 6.66895 -18.8936 22.5088 -12.2246 35.8477c6.38965 13.0605 22.5049 18.6191 35.5654 12.2266c20.2949 -10.1484 44.1465 -11.1982 64.7393 -3.88965c-42.6064 0 -71.208 20.4746 -85.5781 50.5762 -c-8.57617 17.8984 5.14746 38.0713 23.6172 38.0713c-18.4297 0 -32.2109 20.1357 -23.6172 38.0703c14.0332 29.3965 44.0391 50.8877 81.9658 50.8545l92.8027 -8.61523l66.4062 33.3467c9.4082 4.7041 19.8281 0.354492 23.8936 -7.78027zM408.912 245.344 -c-13.8936 0 -26.1191 -7.78027 -32.2314 -20.2861c-4.44531 -9.44824 -13.6133 -15.0059 -23.3389 -15.2832c9.72559 -0.27832 18.8936 -5.83594 23.3389 -15.2842c6.1123 -12.5049 18.3379 -20.2861 32.2314 -20.2861h0.105469c19.5732 0 35.46 15.8857 35.46 35.46 -c0 0.0302734 0 0.0791016 -0.000976562 0.110352c0 21.4287 -17.8076 35.5693 -35.5645 35.5693z" /> +c13.3359 -6.66895 18.8936 -22.5088 12.2246 -35.8486c-6.38965 -13.0596 -22.5039 -18.6162 -35.5645 -12.2256zM263.318 189.489c-6.1123 12.5049 -18.3379 20.2861 -32.2314 20.2861h-0.107422c-19.5703 0 -35.46 -15.8896 -35.46 -35.46 +c0 -0.0380859 0.00195312 -0.0732422 0.00292969 -0.110352c0 -21.4277 17.8076 -35.5703 35.5645 -35.5703c13.8936 0 26.1191 7.78125 32.2314 20.2861c4.44531 9.44922 13.6133 15.0059 23.3389 15.2842c-9.72559 0.277344 -18.8936 5.83496 -23.3389 15.2842z +M638.139 226.726c4.16797 -8.61426 1.11133 -18.8965 -6.94531 -23.6201l-58.0713 -33.0693l-41.1221 -74.1963c-6.38965 -57.2451 -34.7314 -109.767 -79.7432 -146.726c-10.9316 -9.1123 -27.7988 -8.14453 -37.5098 3.6123 +c-9.44629 11.3945 -7.78027 28.0674 3.61328 37.5166c12.5029 10.5586 23.6162 22.5088 32.5078 35.5703c-21.6719 -14.7295 -46.6787 -24.7324 -74.1865 -28.0674c-10.0205 -2.50586 -27.5518 5.64258 -29.7295 23.0645c-1.94531 14.7285 8.33594 28.0674 23.0615 29.7344 +c16.1162 1.94629 31.1201 7.50293 44.1787 15.2842c-26.1143 -5.71289 -58.7119 -3.1377 -88.0791 11.1152c-13.3359 6.66895 -18.8936 22.5088 -12.2246 35.8477c6.38965 13.0605 22.5049 18.6191 35.5654 12.2266c20.2949 -10.1484 44.1465 -11.1982 64.7393 -3.88965 +c-42.6064 0 -71.208 20.4746 -85.5781 50.5762c-8.57617 17.8984 5.14746 38.0713 23.6172 38.0713c-18.4297 0 -32.2109 20.1357 -23.6172 38.0703c14.0332 29.3965 44.0391 50.8877 81.9658 50.8545l92.8027 -8.61523l66.4062 33.3467 +c9.4082 4.7041 19.8281 0.354492 23.8936 -7.78027zM408.912 245.344c-13.8936 0 -26.1191 -7.78027 -32.2314 -20.2861c-4.44531 -9.44824 -13.6133 -15.0059 -23.3389 -15.2832c9.72559 -0.27832 18.8936 -5.83594 23.3389 -15.2842 +c6.1123 -12.5049 18.3379 -20.2861 32.2314 -20.2861h0.107422c19.5703 0 35.46 15.8887 35.46 35.46c0 0.0371094 -0.00195312 0.0722656 -0.00292969 0.110352c0 21.4287 -17.8076 35.5693 -35.5645 35.5693z" /> +d="M569.344 216.369c4.20996 -7.13086 6.62598 -15.5469 6.62598 -24.4199c0 -8.87402 -2.41699 -17.1875 -6.62695 -24.3193c-31.9746 -54.2607 -79.6484 -98.3232 -136.81 -126.301l0.00683594 -0.00878906l43.1201 -58.377 +c7.60156 -10.8594 4.95996 -25.8252 -5.90039 -33.4268l-13.1133 -9.17773c-10.8594 -7.59863 -25.8223 -4.95801 -33.4238 5.90039l-251.836 356.544c-13.5234 -6.16211 -26.5166 -13.3994 -38.7764 -21.5635l189.979 -271.399 +c-11.4863 -1.21191 -22.4707 -1.83301 -34.2754 -1.83301c-15.1465 0 -30.0566 1.02344 -44.6641 3.00293l-40.6309 58.04h-0.00976562l-119.399 170.58c-10.457 -11.1943 -19.8271 -23.0791 -28.2939 -35.9121l124.19 -177.417 +c-73.1172 25.4863 -134.358 76.0166 -172.858 141.349c-8.96484 15.2109 -8.76562 33.8643 0 48.7393c0.0107422 0.0166016 0.0234375 0.0332031 0.0332031 0.0498047c33.5459 56.8984 82.7676 99.8506 136.79 126.242l-43.1309 58.3945 +c-7.60156 10.8604 -4.95996 25.8252 5.90039 33.4268l13.1143 9.17773c10.8584 7.59961 25.8213 4.95801 33.4229 -5.90039l52.7705 -72.1689c26.3496 6.79004 53.9834 10.4092 82.4512 10.4092c119.81 0 224.96 -63.9492 281.344 -159.631zM390.026 102.06 +c21.1406 23.9658 33.9736 55.4365 33.9736 89.9404c0 75.1738 -60.8379 136 -136 136c-17.5117 0 -34.2422 -3.30566 -49.6084 -9.32324l19.0684 -27.2363c25.9883 7.96289 54.7598 5.56836 79.5098 -7.68066h-0.0292969c-23.6504 0 -42.8203 -19.1699 -42.8203 -42.8193 +c0 -23.4717 18.9922 -42.8203 42.8203 -42.8203c23.6494 0 42.8193 19.1699 42.8193 42.8203v0.0292969c18.9111 -35.3271 15.8818 -79.1123 -8.7998 -111.68z" /> +c-3.63867 2.68848 -8.77637 1.82129 -11.3389 -1.90625l-9.07227 -13.1963c-0.884766 -1.28711 -1.40332 -2.8457 -1.40332 -4.52539c0 -2.63867 1.26953 -4.98438 3.24219 -6.44141c22.8877 -16.8994 55.4541 -40.6904 105.304 -76.8682 +c20.2734 -14.7812 56.5234 -47.8135 92.2637 -47.5732c35.7236 -0.242188 71.9609 32.7715 92.2627 47.5732c49.8506 36.1787 82.418 59.9697 105.304 76.8682c1.97266 1.45703 3.25391 3.79883 3.25391 6.4375c0 1.67969 -0.530273 3.24219 -1.41504 4.5293z" /> +d="M304 128c8.83105 0 16 -7.16895 16 -16s-7.16895 -16 -16 -16s-16 7.16895 -16 16s7.16895 16 16 16zM336 224c8.83105 0 16 -7.16895 16 -16s-7.16895 -16 -16 -16s-16 7.16895 -16 16s7.16895 16 16 16zM368 160c-8.83105 0 -16 7.16895 -16 16s7.16895 16 16 16 +s16 -7.16895 16 -16s-7.16895 -16 -16 -16zM336 128c-8.83105 0 -16 7.16895 -16 16s7.16895 16 16 16s16 -7.16895 16 -16s-7.16895 -16 -16 -16zM304 192c8.83105 0 16 -7.16895 16 -16s-7.16895 -16 -16 -16s-16 7.16895 -16 16s7.16895 16 16 16zM432 224 +c-8.83105 0 -16 7.16895 -16 16s7.16895 16 16 16s16 -7.16895 16 -16s-7.16895 -16 -16 -16zM384 208c0 8.83105 7.16895 16 16 16s16 -7.16895 16 -16s-7.16895 -16 -16 -16s-16 7.16895 -16 16zM368 256c8.83105 0 16 -7.16895 16 -16s-7.16895 -16 -16 -16 +s-16 7.16895 -16 16s7.16895 16 16 16zM464 224c8.83105 0 16 -7.16895 16 -16s-7.16895 -16 -16 -16s-16 7.16895 -16 16s7.16895 16 16 16zM496 256c8.83105 0 16 -7.16895 16 -16s-7.16895 -16 -16 -16s-16 7.16895 -16 16s7.16895 16 16 16zM432 192 +c8.83105 0 16 -7.16895 16 -16s-7.16895 -16 -16 -16s-16 7.16895 -16 16s7.16895 16 16 16zM400 160c8.83105 0 16 -7.16895 16 -16s-7.16895 -16 -16 -16s-16 7.16895 -16 16s7.16895 16 16 16zM336 96c8.83105 0 16 -7.16895 16 -16s-7.16895 -16 -16 -16 +s-16 7.16895 -16 16s7.16895 16 16 16zM304 64c8.83105 0 16 -7.16895 16 -16s-7.16895 -16 -16 -16s-16 7.16895 -16 16s7.16895 16 16 16zM368 128c8.83105 0 16 -7.16895 16 -16s-7.16895 -16 -16 -16s-16 7.16895 -16 16s7.16895 16 16 16zM389.65 346.35 +c2.89648 -2.89551 4.68945 -6.90039 4.68945 -11.3164s-1.79297 -8.41699 -4.68945 -11.3135l-169.381 -169.37c-2.89551 -2.89648 -6.90039 -4.68945 -11.3164 -4.68945s-8.41699 1.79297 -11.3135 4.68945l-11.2998 11.3105 +c-2.89355 2.89551 -4.68457 6.89844 -4.68457 11.3125c0 4.41309 1.79102 8.41113 4.68457 11.3076l5.66016 5.66992c-19.7871 20.0811 -31.9951 47.6602 -32 78.0498c0 19.2402 5.2998 37.0801 13.9297 52.8604l-10 10c-10.5723 10.6055 -25.1416 17.167 -41.2861 17.167 +c-2.58984 0 -5.1416 -0.169922 -7.64355 -0.49707c-30 -3.73047 -51 -31.7803 -51 -61.9307v-305.6c0 -8.83105 -7.16895 -16 -16 -16h-32c-8.83105 0 -16 7.16895 -16 16v303.15c0 67.9395 55.4902 129.35 123.44 128.85 +c33.4453 -0.166992 63.7471 -13.835 85.6592 -35.8496l10 -10c15.8203 8.5498 33.6602 13.8496 52.9004 13.8496c30.3916 -0.000976562 57.9707 -12.21 78.0498 -32l5.66992 5.66016c2.89648 2.89648 6.90137 4.68945 11.3174 4.68945s8.41699 -1.79297 11.3125 -4.68945z +" /> +d="M32 64v48h448v-48c-0.0576172 -28.2656 -12.3916 -53.6514 -32 -71.0898v-40.9102c0 -8.83105 -7.16895 -16 -16 -16h-32c-8.83105 0 -16 7.16895 -16 16v16h-256v-16c0 -8.83105 -7.16895 -16 -16 -16h-32c-8.83105 0 -16 7.16895 -16 16v40.9102 +c-19.6084 17.4385 -31.9424 42.8242 -32 71.0898zM496 192c8.83105 0 16 -7.16895 16 -16v-16c0 -8.83105 -7.16895 -16 -16 -16h-480c-8.83105 0 -16 7.16895 -16 16v16c0 8.83105 7.16895 16 16 16h16v186.75c0 38.2197 31.0391 69.2656 69.2598 69.2656 +c19.1113 0 36.4248 -7.75879 48.96 -20.2959l19.2607 -19.2695c29.8994 13.1299 59.1094 7.60938 79.7295 -8.62012l0.169922 0.169922c2.89551 2.89355 6.89941 4.68457 11.3125 4.68457s8.41211 -1.79102 11.3076 -4.68457l11.3096 -11.3096 +c2.89746 -2.89648 4.69043 -6.90137 4.69043 -11.3174s-1.79297 -8.41699 -4.69043 -11.3135l-105.369 -105.369c-2.89648 -2.89746 -6.90137 -4.69043 -11.3174 -4.69043s-8.41699 1.79297 -11.3135 4.69043l-11.3096 11.3096 +c-2.88477 2.89453 -4.66992 6.8916 -4.66992 11.2969c0 4.40625 1.78516 8.39844 4.66992 11.293l0.169922 0.169922c-16.2295 20.6201 -21.75 49.8506 -8.62012 79.7305l-19.2695 19.2598c-3.84766 3.84082 -9.16016 6.21289 -15.0205 6.21289 +c-11.7178 0 -21.2344 -9.50098 -21.2598 -21.2129v-186.75h416z" /> +d="M32 -16v336h384v-336c0 -26.4922 -21.5078 -48 -48 -48h-288c-26.4922 0 -48 21.5078 -48 48zM304 240v-224c0 -8.83105 7.16895 -16 16 -16s16 7.16895 16 16v224c0 8.83105 -7.16895 16 -16 16s-16 -7.16895 -16 -16zM208 240v-224c0 -8.83105 7.16895 -16 16 -16 +s16 7.16895 16 16v224c0 8.83105 -7.16895 16 -16 16s-16 -7.16895 -16 -16zM112 240v-224c0 -8.83105 7.16895 -16 16 -16s16 7.16895 16 16v224c0 8.83105 -7.16895 16 -16 16s-16 -7.16895 -16 -16zM432 416c8.83105 0 16 -7.16895 16 -16v-32 +c0 -8.83105 -7.16895 -16 -16 -16h-416c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h120l9.40039 18.7002c3.85547 7.88574 11.9434 13.2998 21.3066 13.2998h0.0927734h114.3c0.00585938 0 -0.00195312 0.0234375 0.00390625 0.0234375 +c9.41113 0 17.5645 -5.42871 21.4961 -13.3232l9.40039 -18.7002h120z" /> d="M88 281.941h-46.0576c-21.3828 0 -32.0908 25.8516 -16.9717 40.9707l86.0596 86.0586c9.37207 9.37305 24.5674 9.37305 33.9404 0l86.0596 -86.0586c15.1191 -15.1201 4.41113 -40.9707 -16.9717 -40.9707h-46.0586v-301.941c0 -6.62695 -5.37305 -12 -12 -12h-56 c-6.62695 0 -12 5.37305 -12 12v301.941z" /> +d="M448 104v-112v-0.0615234c0 -13.2129 -10.7275 -23.9395 -23.9395 -23.9395c-0.0205078 0 -0.0400391 0.000976562 -0.0605469 0.000976562h-112c-21.3896 0 -32.0898 25.9004 -17 41l36.2002 36.2002l-107.2 107.2l-107.23 -107.301l36.2305 -36.0996 +c15.0898 -15.0996 4.38965 -41 -17 -41h-112h-0.0615234c-13.2129 0 -23.9395 10.7275 -23.9395 23.9395c0 0.0205078 0.000976562 0.0400391 0.000976562 0.0605469v112c0 21.4004 25.8896 32.0996 41 17l36.1904 -36.2002l107.27 107.2l-107.28 107.3l-36.1797 -36.2998 +c-15.0996 -15.0996 -41 -4.40039 -41 17v112v0.0615234c0 13.2129 10.7275 23.9395 23.9395 23.9395c0.0205078 0 0.0400391 -0.000976562 0.0605469 -0.000976562h112c21.3896 0 32.0898 -25.9004 17 -41l-36.2002 -36.2002l107.2 -107.2l107.23 107.301l-36.2305 36.0996 +c-15.0898 15.0996 -4.38965 41 17 41h112h0.0615234c13.2129 0 23.9395 -10.7275 23.9395 -23.9395c0 -0.0205078 -0.000976562 -0.0400391 -0.000976562 -0.0605469v-112c0 -21.4004 -25.8896 -32.0996 -41 -17l-36.1904 36.2002l-107.27 -107.2l107.28 -107.3 +l36.1797 36.2002c15.0996 15.1992 41 4.5 41 -16.9004z" /> @@ -1994,9 +2297,9 @@ v-70.9004h-116c-6.59961 0 -12 -5.40039 -12 -12v-64c0 -6.59961 5.40039 -12 12 -12 d="M8 192c0 137 111 248 248 248s248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248zM300 76v116h70.9004c10.6992 0 16.0996 13 8.5 20.5l-114.9 114.3c-4.7002 4.7002 -12.2002 4.7002 -16.9004 0l-115 -114.3c-7.59961 -7.59961 -2.19922 -20.5 8.5 -20.5 h70.9004v-116c0 -6.59961 5.40039 -12 12 -12h64c6.59961 0 12 5.40039 12 12z" /> +d="M432 128c8.83105 0 16 -7.16895 16 -16v-128c0 -26.4922 -21.5078 -48 -48 -48h-352c-26.4922 0 -48 21.5078 -48 48v352c0 26.4922 21.5078 48 48 48h160c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-144v-320h320v112 +c0 8.83105 7.16895 16 16 16h32zM488 448c13.2461 0 24 -10.7539 24 -24v-128c0 -21.5 -26 -32 -41 -17l-35.7197 35.6797l-243.61 -243.68c-4.34668 -4.36133 -10.3652 -7.0625 -17.0029 -7.0625s-12.6504 2.70117 -16.9971 7.0625l-22.6699 22.6299 +c-4.36133 4.34668 -7.0625 10.3652 -7.0625 17.0029c0 6.63867 2.70117 12.6504 7.0625 16.9971l243.73 243.64l-35.7305 35.7305c-15.0498 15.0898 -4.37012 41 17 41h128z" /> @@ -2015,11 +2318,11 @@ c-6.2002 6.2002 -16.3994 6.2002 -22.5996 0l-105.4 -105.4c-10.0996 -10.0996 -3 -2 d="M485.5 448l90.5 -160h-101.1l-69.2002 160h79.7998zM357.5 448l69.2002 -160h-277.4l69.2002 160h139zM90.5 448h79.7998l-69.2002 -160h-101.1zM0 256h100.7l123 -251.7c1.5 -3.09961 -2.7002 -5.89941 -5 -3.2998zM148.2 256h279.6l-137 -318.2 c-1 -2.39941 -4.5 -2.39941 -5.5 0zM352.3 4.2998l123 251.7h100.7l-218.7 -254.9c-2.2998 -2.69922 -6.5 0.100586 -5 3.2002z" /> +d="M313.553 328.331c14.2646 -15.3623 3.29102 -40.3311 -17.5869 -40.3311h-63.9658v-328c0 -13.2549 -10.7451 -24 -24 -24h-195.976c-10.6914 0 -16.0459 12.9258 -8.48535 20.4854l56 56c2.17188 2.17188 5.17383 3.51465 8.48535 3.51465h83.9756v272h-63.9746 +c-20.9639 0 -31.793 25.0312 -17.5869 40.3311l103.975 112.003c9.49805 10.2295 25.6885 10.2139 35.1738 0z" /> @@ -2035,8 +2338,8 @@ c0 -4.41992 4.78027 -8 10.6699 -8h85.3301v-32h-85.3301c-5.88965 0 -10.6699 -3.58 d="M272 448c26.5 0 48 -21.5 48 -48v-416c0 -26.5 -21.5 -48 -48 -48h-224c-26.5 0 -48 21.5 -48 48v416c0 26.5 21.5 48 48 48h224zM160 -32c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32zM272 76v312 c0 6.59961 -5.40039 12 -12 12h-200c-6.59961 0 -12 -5.40039 -12 -12v-312c0 -6.59961 5.40039 -12 12 -12h200c6.59961 0 12 5.40039 12 12z" /> +c5.67578 2.35449 11.96 3.6543 18.4824 3.6543c6.52148 0 12.7432 -1.2998 18.418 -3.6543zM256.1 1.7002c93.7002 46.5996 172.5 156.3 175.801 307.7l-175.9 73.2998z" /> @@ -2096,47 +2399,48 @@ l46.2998 -46.2998l-157.9 -157.9c-35 42.4004 -53.5 93.6006 -56.0996 145.5c63.9004 d="M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM120 256c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32zM184 352c0 -17.7002 14.2998 -32 32 -32s32 14.2998 32 32 s-14.2998 32 -32 32s-32 -14.2998 -32 -32zM232 208c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32z" /> +d="M74 240l-33.9102 90.3799c-0.655273 1.74707 -1.01953 3.64551 -1.01953 5.62012c0 8.83105 7.16895 16 16 16h0.0195312h56.9102v32h-24c-4.41504 0 -8 3.58496 -8 8v16c0 4.41504 3.58496 8 8 8h24v24c0 4.41504 3.58496 8 8 8h16c4.41504 0 8 -3.58496 8 -8v-24h24 +c4.41504 0 8 -3.58496 8 -8v-16c0 -4.41504 -3.58496 -8 -8 -8h-24v-32h56.8896c0.00683594 0 0.0078125 -0.00683594 0.0146484 -0.00683594c8.83008 0 16 -7.16992 16 -16c0 -1.97461 -0.359375 -3.86621 -1.01465 -5.61328l-33.8896 -90.3799h10 +c8.83105 0 16 -7.16895 16 -16v-16c0 -8.83105 -7.16895 -16 -16 -16h-15.9404c0.142578 -44.1934 5.69141 -86.9287 15.9404 -128h-128c10.249 41.0713 15.7979 83.8066 15.9404 128h-15.9404c-8.83105 0 -16 7.16895 -16 16v16c0 8.83105 7.16895 16 16 16h10z +M247.16 -11.5801c5.24805 -2.62598 8.83984 -8.0459 8.83984 -14.3096v-22.1104c0 -8.83105 -7.16895 -16 -16 -16h-224c-8.83105 0 -16 7.16895 -16 16v22.1104c0.000976562 6.26562 3.59668 11.6855 8.84961 14.3096l23.1504 11.5801v16c0 8.83105 7.16895 16 16 16h160 +c8.83105 0 16 -7.16895 16 -16v-16zM339.93 146.2l-24.5693 20.7998c-6.94434 5.86133 -11.3438 14.6143 -11.3604 24.4004v58.5996c0 3.31152 2.68848 6 6 6h26.3896c3.31152 0 6 -2.68848 6 -6v-26h24.71v26c0 3.31152 2.68848 6 6 6h53.8105c3.31152 0 6 -2.68848 6 -6 +v-26h24.71v26c0 3.31152 2.68848 6 6 6h26.3799c3.31152 0 6 -2.68848 6 -6v-58.54c0 -0.0107422 0.0185547 -0.0126953 0.0185547 -0.0234375c0 -9.79297 -4.40918 -18.5645 -11.3486 -24.4365l-24.5996 -20.79l3.29004 -82.21h-126.721zM384 144v-32h32v32 +c0 8.83105 -7.16895 16 -16 16s-16 -7.16895 -16 -16zM503.16 -11.5801c5.24805 -2.62598 8.83984 -8.0459 8.83984 -14.3096v-22.1104c0 -8.83105 -7.16895 -16 -16 -16h-192c-8.83105 0 -16 7.16895 -16 16v22.1104c0.000976562 6.26562 3.59668 11.6855 8.84961 14.3096 +l23.1504 11.5801v16c0 8.83105 7.16895 16 16 16h128c8.83105 0 16 -7.16895 16 -16v-16z" /> +d="M8 160.12c0 73.3799 59.8096 181.08 112.6 225.37c-14 3.41992 -24.5996 15.5098 -24.5996 30.5098c0 17.6611 14.3389 32 32 32h64c17.6611 0 32 -14.3389 32 -32c0 -15.0498 -10.5996 -27.0898 -24.5996 -30.5098c24.3994 -20.4902 50.0693 -54.6807 70.8691 -92.5898 +l-107.89 -107.931c-1.44727 -1.44727 -2.3418 -3.44922 -2.3418 -5.65625c0 -2.20605 0.894531 -4.20508 2.3418 -5.65332l11.3105 -11.3105c1.44727 -1.44629 3.44922 -2.3418 5.65527 -2.3418c2.20703 0 4.20605 0.895508 5.6543 2.3418l100.31 100.33 +c15.96 -35.46 26.6904 -71.9492 26.6904 -102.56c0 -51.6006 -22.1396 -73.8301 -56 -84.6006v-43.5195h-192v43.5195c-33.8604 10.7705 -56 32.9609 -56 84.6006zM304 0c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-288 +c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h288z" /> +d="M400 0c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-352c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h352zM416 288c17.6494 -0.0136719 31.9688 -14.3477 31.9688 -32.001c0 -3.32129 -0.507812 -6.52539 -1.44922 -9.53906 +l-73.0791 -214.46h-298.881l-73.0791 214.46c-0.941406 3.01367 -1.45508 6.21875 -1.45508 9.54004c0 17.6533 14.3252 31.9863 31.9746 32h160v48h-40c-4.41504 0 -8 3.58496 -8 8v48c0 4.41504 3.58496 8 8 8h40v40c0 4.41504 3.58496 8 8 8h48 +c4.41504 0 8 -3.58496 8 -8v-40h40c4.41504 0 8 -3.58496 8 -8v-48c0 -4.41504 -3.58496 -8 -8 -8h-40v-48h160z" /> +d="M19 175.53c-11.2041 4.98145 -19 16.1963 -19 29.2393v0.0205078v137.21c0 0.0195312 -0.00292969 0.0419922 -0.00292969 0.0625c0 6.60742 2.67578 12.5957 7.00293 16.9375l9 9l-14.21 28.4199c-1.13867 2.27344 -1.79004 4.85547 -1.79004 7.56934v0.0107422 +c0 6.62305 5.37695 12 12 12h147.94c106 0 191.92 -86 191.92 -192v-192h-319.86v14.5195c0 0.0078125 -0.078125 -0.03125 -0.078125 -0.0244141c0 31.3145 18.0312 58.4512 44.2686 71.585l57.2197 28.6504c15.751 7.87695 26.5303 24.1348 26.5303 42.9297v0.00976562 +v50.3301l-22.1201 -11.0801c-6.19238 -3.09668 -10.8369 -8.78906 -12.5508 -15.6504l-9.21973 -30.6494c-2.81152 -9.35645 -9.77051 -16.9043 -18.7598 -20.5l-12.7803 -5.12012c-3.66895 -1.46777 -7.7168 -2.27246 -11.9082 -2.27246 +c-4.61621 0 -9.00586 0.979492 -12.9717 2.74219zM52 320c-11.0381 0 -20 -8.96191 -20 -20s8.96191 -20 20 -20s20 8.96191 20 20s-8.96191 20 -20 20zM368 0c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-352c-8.83105 0 -16 7.16895 -16 16v32 +c0 8.83105 7.16895 16 16 16h352z" /> +d="M105.1 224c-29.3896 18.3799 -49.0996 50.7803 -49.0996 88c0 57.3994 46.6006 104 104 104s104 -46.6006 104 -104c0 -37.2197 -19.71 -69.6201 -49.0996 -88h25.0996c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-16v-5.49023 +c0 -44 4.11035 -86.5996 24 -122.51h-176c19.8604 35.9102 24 78.5098 24 122.51v5.49023h-16c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h25.0996zM304 0c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-288 +c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h288z" /> +d="M256 336c-30.9072 0 -56 25.0928 -56 56s25.0928 56 56 56s56 -25.0928 56 -56s-25.0928 -56 -56 -56zM432 0c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-352c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h352zM504.87 263.84 +c4.30566 -2.86816 7.11914 -7.77344 7.11914 -13.3311c0 -2.56445 -0.604492 -4.98926 -1.67969 -7.13867l-102.55 -211.37h-303.52l-102.55 211.33c-1.0752 2.14941 -1.70508 4.58008 -1.70508 7.14453c0 5.55762 2.83887 10.457 7.14453 13.3252l28.5703 16 +c7.35938 4.91016 16.8096 2.5498 22.0898 -4.54004c8.6543 -11.709 22.4922 -19.2686 38.1572 -19.2686c1.13672 0 2.26562 0.0400391 3.38281 0.119141c25.6699 1.73926 44.6699 24.7998 44.6699 50.4893c0 7.39648 6.00391 13.4004 13.4004 13.4004h38.7695 +c6.04004 0 11.6104 -3.99023 12.8604 -9.91016c4.57715 -21.7363 23.8789 -38.0752 46.9688 -38.0752s42.3936 16.3389 46.9707 38.0752c1.25 5.91016 6.86035 9.91016 12.8604 9.91016h38.7695c7.39648 0 13.4004 -6.00391 13.4004 -13.4004 +c0 -23.5293 15.7002 -45.46 38.8398 -49.75c2.95898 -0.576172 5.9541 -0.918945 9.08105 -0.918945c15.6064 0 29.4688 7.5293 38.1494 19.1494c5.37988 7.13965 14.8496 9.67969 22.29 4.67969z" /> +d="M368 416c8.83105 0 16 -7.16895 16 -16v-176l-64 -32c0 -47.7197 1.54004 -95 13.21 -160h-282.42c11.6699 65 13.21 111.67 13.21 160l-64 32v176c0 8.83105 7.16895 16 16 16h56.0996c8.83105 0 16 -7.16895 16 -16v-48h47.9004v48c0 8.83105 7.16895 16 16 16h80 +c8.83105 0 16 -7.16895 16 -16v-48h48v48c0 8.83105 7.16895 16 16 16h56zM224 128v64c0 17.6611 -14.3389 32 -32 32s-32 -14.3389 -32 -32v-64h64zM368 0c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-352c-8.83105 0 -16 7.16895 -16 16v32 +c0 8.83105 7.16895 16 16 16h352z" /> +l272 113.3c5.6748 2.35449 11.959 3.6543 18.4814 3.6543s12.7432 -1.2998 18.4189 -3.6543z" /> +d="M271.06 303.7c-24.0596 6.39941 -43.4297 24.7002 -46.5693 47.7002c-4.33984 32 20.6201 59.3994 53.5098 63v17.5996c0 8.7998 7.82031 16 17.3701 16h17.3701c9.5498 0 17.3701 -7.2002 17.3701 -16v-17.7197c12.457 -1.28516 24.2842 -5.35938 34.5195 -11.5 +c3.32227 -2.00098 5.52734 -5.64746 5.52734 -9.80469c0 -2.18945 -0.617188 -4.23633 -1.6875 -5.97559c-0.592773 -0.978516 -1.31836 -1.8457 -2.16992 -2.59961l-19 -17.5c-4.01953 -3.7002 -10.0693 -4.2002 -15.2998 -2 +c-3.46289 1.4043 -7.2666 2.19336 -11.2305 2.19922h-35.5996c-5.03027 0 -9.12012 -3.7998 -9.12012 -8.39941c0.12207 -3.94727 2.91699 -7.23145 6.62988 -8.10059l54.2705 -14.2998c24.0996 -6.39941 43.4102 -24.7002 46.5596 -47.7002 +c4.33984 -32 -20.5693 -59.3994 -53.5 -63v-17.5996c0 -8.7998 -7.83008 -16 -17.3799 -16h-17.3701c-9.54004 0 -17.3701 7.2002 -17.3701 16v17.7002c-12.4541 1.28516 -24.2773 5.35938 -34.5098 11.5c-3.33008 1.99609 -5.54199 5.64551 -5.54199 9.80762 +c0 2.17188 0.607422 4.20312 1.66211 5.93262c0.617188 1.00098 1.36914 1.88867 2.25 2.65918l19 17.5c4.01953 3.7002 10.0596 4.2002 15.2998 2c3.45117 -1.39941 7.24121 -2.18848 11.1904 -2.19922h35.5996c5.03027 0 9.12012 3.7998 9.12012 8.39941 +c-0.121094 3.94727 -2.91602 7.23145 -6.62988 8.10059zM565.27 119.9c6.5918 -5.86328 10.7656 -14.3916 10.7656 -23.8984c0 -10.1123 -4.70117 -19.1357 -12.0352 -25.002l-151.23 -121c-10.9443 -8.74512 -24.8633 -14 -39.9482 -14h-0.0517578h-356.77 +c-8.83105 0 -16 7.16895 -16 16v96c0 8.83105 7.16895 16 16 16h55.4004l46.5 37.71c20.2197 16.4053 46.0596 26.2822 74.0996 26.29h160c17.6406 0 31.9668 -14.3066 32 -31.9404c0 -0.0410156 0.000976562 -0.0507812 0.000976562 -0.0917969 +c0 -1.83008 -0.158203 -3.62402 -0.460938 -5.36816c-2.54004 -15.6992 -17.3496 -26.5996 -33.25 -26.5996h-78.29c-8.83105 0 -16 -7.16895 -16 -16s7.16895 -16 16 -16h118.27c0.0605469 0 0.161133 0.0234375 0.22168 0.0234375 +c15.0459 0 28.8799 5.23242 39.7783 13.9766l92.4004 73.9004c12.4004 10 30.7998 10.6992 42.5996 0z" /> +d="M224 192c-70.6455 0 -128 57.3545 -128 128s57.3545 128 128 128s128 -57.3545 128 -128s-57.3545 -128 -128 -128zM320 128v-160c0.0791016 -11.6504 3.3418 -22.6367 8.90039 -32h-280.9c-26.4922 0 -48 21.5078 -48 48v41.5996 +c0.0166016 74.1699 60.2305 134.384 134.4 134.4h16.6992c22.1426 -10.2109 47.085 -15.9072 73.0498 -15.9072c25.9639 0 50.6084 5.69629 72.751 15.9072h16.6992c5 0 9.7002 -1 14.5 -1.5c-5.06641 -9.00684 -8.02539 -19.4561 -8.09961 -30.5zM608 160 +c17.6611 0 32 -14.3389 32 -32v-160c0 -17.6611 -14.3389 -32 -32 -32h-224c-17.6611 0 -32 14.3389 -32 32v160c0 17.6611 14.3389 32 32 32h32v80c0 44.1533 35.8467 80 80 80s80 -35.8467 80 -80v-80h32zM496 16c17.6611 0 32 14.3389 32 32s-14.3389 32 -32 32 +s-32 -14.3389 -32 -32s14.3389 -32 32 -32zM528 160v80c0 17.6611 -14.3389 32 -32 32s-32 -14.3389 -32 -32v-80h64z" /> @@ -2571,8 +2876,8 @@ c12.9697 -4.20996 26.6006 -6.91016 40.9502 -6.91016s27.9805 2.7002 40.9404 6.910 c26.4697 0 48 -22.25 48 -49.5898v-316.82c0 -27.3398 -21.5303 -49.5898 -48 -49.5898h-244.55c-6.57031 25.2695 -20.5898 47.3096 -39.6904 64h76.2402v64h128v-64h64v288h-352v-49.7998c-18.9004 11.0195 -40.5801 17.7998 -64 17.7998v46.4102 c0 27.3398 21.5303 49.5898 48 49.5898h384z" /> +d="M446.53 350.57c0 0 58.4297 -19.0605 98.9893 -41.2803c18.7607 -10.2803 30.4805 -29.8301 30.4805 -51.2305c0 -21.793 -11.9512 -40.7695 -29.71 -50.7295l-154.44 -86.6504l98.5205 -104.68h53.6299c17.6699 0 32 -14.3301 32 -32c0 -8.83984 -7.16016 -16 -16 -16 +h-90.3799l-118.53 125.94c5.07031 54.1494 -29.9297 85.0596 -40.7998 93.21c-36.8496 27.6191 -88.29 27.6592 -125.13 0l-34.7803 -26.0908c-7.07031 -5.2998 -8.49023 -15.3291 -3.18945 -22.4092c5.31934 -7.10059 15.3496 -8.5 22.4092 -3.19043l32.7607 24.5898 +c20.6895 15.5303 48.3496 20.8105 72.2393 10.8799c44.0605 -18.3193 57.8506 -70.3701 33.71 -106.6l-35.7998 -48.3301h79.4902c17.6699 0 32 -14.3301 32 -32c0 -8.83984 -7.16016 -16 -16 -16h-304c-34.9199 0 -63.8896 28.0996 -64 63.0195 +c-0.5 166.86 126.75 304.021 289.46 319.44c6.82031 37.25 39.3096 65.54 78.54 65.54c39.1904 0 71.6699 -28.2305 78.5303 -65.4297zM368 312c13.25 0 24 10.75 24 24c0 13.2598 -10.75 24 -24 24c-13.2598 0 -24 -10.7402 -24 -24c0 -13.25 10.7402 -24 24 -24z" /> @@ -2675,7 +2979,7 @@ c-5.32031 -0.449219 -10.5605 -1.17969 -16 -1.17969c-16.6006 0 -32.6406 2.2998 -4 c-0.0800781 145.76 129.3 182.88 147.31 186.94c57.1709 12.9199 111.221 0.259766 153.21 -28.7002c43.4902 -29.9902 94.9209 -46.2402 147.74 -46.2402h9.37012c60.6504 0 115.01 -45.4102 118.18 -105.98zM463.97 200c13.25 0 24 10.75 24 24 c0 13.2598 -10.75 24 -24 24s-24 -10.7402 -24 -24c0 -13.25 10.75 -24 24 -24zM543.97 46.75v99.0596c-11.1299 -11.3799 -24.7393 -20.1494 -39.8594 -25.9795z" /> +d="M358.4 444.8c10.5996 7.90039 25.5996 0.400391 25.5996 -12.7998v-480c0 -13.2002 -15.0996 -20.7002 -25.5996 -12.7998l-38.4004 44.7998l-54.4004 -44.7998c-2.66602 -2.01953 -6.01367 -3.21777 -9.6123 -3.21777c-3.59961 0 -6.9209 1.19824 -9.58691 3.21777 +l-54.4004 44.7998l-54.4004 -44.7998c-2.66602 -2.01953 -6.01367 -3.21777 -9.6123 -3.21777c-3.59961 0 -6.9209 1.19824 -9.58691 3.21777l-54.4004 44.7998l-38.4004 -44.7998c-10.5996 -7.90039 -25.5996 -0.400391 -25.5996 12.7998v480 +c0 13.2002 15 20.7002 25.5996 12.7998l38.4004 -44.7998l54.4004 44.7998c2.66602 2.01953 6.01367 3.21777 9.6123 3.21777c3.59961 0 6.9209 -1.19824 9.58691 -3.21777l54.4004 -44.7998l54.4004 44.7998c2.66602 2.01953 6.01367 3.21777 9.6123 3.21777 +c3.59961 0 6.9209 -1.19824 9.58691 -3.21777l54.4004 -44.7998zM320 88v16c0 4.40039 -3.59961 8 -8 8h-240c-4.40039 0 -8 -3.59961 -8 -8v-16c0 -4.40039 3.59961 -8 8 -8h240c4.40039 0 8 3.59961 8 8zM320 184v16c0 4.40039 -3.59961 8 -8 8h-240 +c-4.40039 0 -8 -3.59961 -8 -8v-16c0 -4.40039 3.59961 -8 8 -8h240c4.40039 0 8 3.59961 8 8zM320 280v16c0 4.40039 -3.59961 8 -8 8h-240c-4.40039 0 -8 -3.59961 -8 -8v-16c0 -4.40039 3.59961 -8 8 -8h240c4.40039 0 8 3.59961 8 8z" /> +d="M32 224h32v-192h-32h-0.0390625c-17.6406 0 -31.9619 14.3213 -31.9619 31.9619c0 0.0126953 0.000976562 0.0253906 0.000976562 0.0380859v128v0.0390625c0 17.6406 14.3213 31.9619 31.9619 31.9619c0.0126953 0 0.0253906 -0.000976562 0.0380859 -0.000976562z +M544 272v-272c-0.0351562 -35.3066 -28.6934 -63.9648 -64 -64h-320c-35.3066 0.0351562 -63.9648 28.6934 -64 64v272v0.0263672c0 44.1387 35.835 79.9746 79.9736 79.9746c0.00878906 0 0.0175781 -0.000976562 0.0263672 -0.000976562h112v64 +c0 17.6611 14.3389 32 32 32s32 -14.3389 32 -32v-64h112h0.0263672c44.1387 0 79.9746 -35.835 79.9746 -79.9736c0 -0.00878906 -0.000976562 -0.0175781 -0.000976562 -0.0263672zM264 192c0 22.0762 -17.9238 40 -40 40s-40 -17.9238 -40 -40s17.9238 -40 40 -40 +c22.0752 0 40 17.9248 40 40zM256 64h-64v-32h64v32zM352 64h-64v-32h64v32zM456 192c0 22.0762 -17.9238 40 -40 40s-40 -17.9238 -40 -40s17.9238 -40 40 -40c22.0752 0 40 17.9248 40 40zM448 64h-64v-32h64v32zM640 192v-128v-0.0390625 +c0 -17.6406 -14.3213 -31.9619 -31.9619 -31.9619c-0.0126953 0 -0.0253906 0.000976562 -0.0380859 0.000976562h-32v192h32h0.0390625c17.6406 0 31.9619 -14.3213 31.9619 -31.9619c0 -0.0126953 -0.000976562 -0.0253906 -0.000976562 -0.0380859z" /> +c9.50977 2.5498 17.8701 7.44043 25.4297 13.3203zM263 108c-13.2305 -13.4697 -33.8398 -15.8799 -49.7305 -5.82031c-6.13867 3.89746 -13.5029 6.15527 -21.3066 6.15527s-15.084 -2.25781 -21.2227 -6.15527c-15.9004 -10.0596 -36.5098 -7.64941 -49.7402 5.82031 +c-14.7305 15 -16.4004 14.04 -38.7803 20.1396c-13.8896 3.79004 -24.75 14.8408 -28.4697 28.9805c-7.48047 28.3994 -5.54004 24.9697 -25.9502 45.75c-10.1699 10.3604 -14.1396 25.4502 -10.4199 39.5898c7.48047 28.4199 7.46973 24.46 0 52.8203 +c-3.72949 14.1396 0.25 29.2295 10.4199 39.5801c20.4102 20.7793 18.4805 17.3594 25.9502 45.75c3.71973 14.1396 14.5801 25.1895 28.4697 28.9795c27.8906 7.61035 24.5303 5.62988 44.9404 26.4102c10.1699 10.3604 25 14.4004 38.8896 10.6104 +c27.9199 -7.61035 24.0303 -7.60059 51.9004 0c13.8896 3.79004 28.7197 -0.260742 38.8896 -10.6104c20.4297 -20.79 17.0703 -18.7998 44.9502 -26.4102c13.8896 -3.79004 24.75 -14.8398 28.4697 -28.9795c7.48047 -28.3906 5.54004 -24.9707 25.9502 -45.75 +c10.1699 -10.3506 14.1396 -25.4404 10.4199 -39.5801c-7.47949 -28.4102 -7.46973 -24.4502 0 -52.8301c3.71973 -14.1406 -0.25 -29.2305 -10.4199 -39.5801c-20.4102 -20.7803 -18.4697 -17.3506 -25.9502 -45.75c-3.71973 -14.1396 -14.5801 -25.1904 -28.4697 -28.9805 +c-21.7598 -5.92969 -23.5098 -4.58984 -38.79 -20.1396zM97.6602 272.04c0 -53.0303 42.2402 -96.0205 94.3398 -96.0205s94.3398 42.9902 94.3398 96.0205s-42.2402 96.0195 -94.3398 96.0195s-94.3398 -42.9893 -94.3398 -96.0195z" /> @@ -2884,12 +3187,12 @@ v16c0 4.41992 -3.58008 8 -8 8h-176c-4.41992 0 -8 -3.58008 -8 -8zM112 48c17.6699 h112c17.6699 0 32 14.3301 32 32v96c0 17.6699 -14.3301 32 -32 32h-112v-160zM400 48c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32z" /> +d="M431.34 325.95c44.9004 -16.3398 80.6602 -42.7803 80.6602 -86.1006v-160.229c0 -30.2705 -27.5 -57.6797 -72 -77.8604v101.9c0 13.2461 -10.7539 24 -24 24s-24 -10.7539 -24 -24v-118.93c-33.0498 -9.11035 -71.0703 -15.0605 -112 -16.7305v103.61 +c0 13.2461 -10.7539 24 -24 24s-24 -10.7539 -24 -24v-103.61c-40.9297 1.66992 -78.9502 7.62012 -112 16.7305v118.93c0 13.2461 -10.7539 24 -24 24s-24 -10.7539 -24 -24v-101.9c-44.5 20.1807 -72 47.5898 -72 77.8604v160.229c0 107.601 219.55 112.15 256 112.15 +c15.2197 0 62.4297 -0.910156 112.19 -9.69043l110.06 71c2.53711 1.69238 5.59082 2.7041 8.86621 2.7041c5.55664 0 10.4551 -2.83887 13.3242 -7.14355l8.86914 -13.3105c1.69238 -2.53711 2.7041 -5.58984 2.7041 -8.86523 +c0 -5.55664 -2.83887 -10.4561 -7.14355 -13.3242zM256 175.76c114.87 0 208 28.6904 208 64.0898c0 21.3105 -33.9102 40.1504 -85.8604 51.75l-118.64 -76.5195c-2.53711 -1.69141 -5.59082 -2.7041 -8.86621 -2.7041c-5.55664 0 -10.4551 2.83887 -13.3242 7.14355 +l-8.86914 13.3105c-1.69434 2.53809 -2.70703 5.59277 -2.70703 8.87012c0 5.55371 2.83594 10.4502 7.13672 13.3193l72.8096 47c-15.9492 1.2002 -32.5293 1.91016 -49.6797 1.91016c-114.88 0 -208 -28.6797 -208 -64.0801c0 -35.3994 93.1201 -64.0898 208 -64.0898z +" /> +c-8.83984 0 -16 -7.16016 -16 -16s7.16016 -16 16 -16h12.3896c18.6201 0 35.1104 11.8701 41 29.5303l10.6104 31.8799l16.8301 -50.46c2.03027 -6.14062 7.58008 -10.4404 14.0303 -10.8906c0.389648 -0.0292969 0.759766 -0.0498047 1.13965 -0.0498047 +c0.00390625 0 -0.00292969 -0.015625 0.000976562 -0.015625c6.26074 0 11.6865 3.60742 14.3086 8.85547l7.6709 15.3408c2.7998 5.59961 7.93945 6.18945 10.0195 6.18945s7.21973 -0.599609 10.1699 -6.51953c7.37012 -14.7207 22.1904 -23.8604 38.6396 -23.8604 +h47.1904c8.83984 0 16 7.16016 16 16s-7.16016 16 -16 16h-47.1904zM377 343c4.5 -4.5 7 -10.5996 7 -16.9004v-6.09961h-128v128h6.09961c6.40039 0 12.5 -2.5 17 -7z" /> +l0.00488281 0.00195312c4.27637 0 8.15039 -1.73633 10.9551 -4.54199l6.91992 -6.91992c2.91016 -2.91016 6.85059 -4.54004 10.96 -4.54004h10.0908c8.55957 0 15.5 -6.93945 15.5 -15.5c0 -6.66992 -4.27051 -12.5898 -10.6006 -14.7002l-47.3096 -15.7695 +c-3.90039 -1.2998 -8.15039 -1 -11.8301 0.839844l-14.7207 7.36035c-7.5791 3.7998 -15.9492 5.76953 -24.4297 5.76953h-0.889648c-12.2734 -0.00292969 -23.6533 -4.08594 -32.7803 -10.9297l-27.5801 -20.6904c-13.75 -10.3193 -21.8496 -26.5098 -21.8496 -43.6992 +v-14.0605c0.00292969 -15.0742 6.11328 -28.7393 16 -38.6299c10.25 -10.2402 24.1396 -16 38.6299 -16h25.8799c8.55957 0 15.5 -6.94043 15.5 -15.5v-29.8896c0 -12.6504 3.0293 -24.6885 8.33008 -35.29c4.7002 -9.40039 14.3096 -15.3398 24.8203 -15.3398 +c9.63477 0.000976562 18.1133 4.89551 23.0898 12.3594l13.0293 19.5498c7.18359 10.7715 15.4854 20.4473 25 29.1602c2.4707 2.27051 4.14062 5.27051 4.76074 8.56055l4.2998 22.8301c0.439453 2.3291 1.41016 4.5293 2.83008 6.42969l18.7402 24.9795 +c2.00977 2.68066 3.09961 5.9502 3.09961 9.30078v11.3398c0 8.55957 -6.94043 15.5 -15.5 15.5h-8.20996c-5.17969 0 -10.0205 2.58984 -12.8896 6.89941l-13.2402 19.8604c-5.66992 8.50977 -1.70996 20.0703 7.99023 23.2998l2.64941 0.879883 +c1.53906 0.511719 3.20312 0.78418 4.91309 0.78418c3.17383 0 6.12695 -0.955078 8.58691 -2.59375l18.21 -12.1396c2.45801 -1.6416 5.44043 -2.59863 8.61523 -2.59863c2.48438 0 4.83301 0.585938 6.91504 1.62793l15.3896 7.7002 +c5.25 2.62012 8.57031 7.99023 8.57031 13.8604v6.92969z" /> +c1.08008 8.37988 1.82031 16.8701 1.82031 25.54c0 32.1299 -7.7998 62.4102 -21.3203 89.3301l-12.9795 -6.49023c-3.74023 -1.85938 -6.91992 -4.67969 -9.24023 -8.14941l-19.5898 -29.3809c-2.54004 -3.80371 -4.02051 -8.4209 -4.02051 -13.334 +c0 -4.91211 1.48047 -9.48145 4.02051 -13.2852l17.9795 -26.9707c3.31055 -4.96973 8.36035 -8.51953 14.1504 -9.96973z" /> +c-0.490234 -1.7002 -2.06055 -2.87988 -3.83984 -2.87988h-3.80078c-1.66211 0.000976562 -3.08691 1.01465 -3.68945 2.45996l-5.35059 12.8496c-1.23926 2.99023 -4.15918 4.93066 -7.38965 4.93066h-12.0898 +c-0.00390625 0 -0.0146484 -0.00488281 -0.0185547 -0.00488281c-1.72168 0 -3.31738 -0.545898 -4.62109 -1.47559l-23.71 -16.8896c-1.73047 -1.23047 -3.61035 -2.25977 -5.59082 -3.0498l-39.3398 -15.7402c-3.04004 -1.21973 -5.0293 -4.16016 -5.0293 -7.42969 +v-10.2002l-0.00195312 -0.00390625c0 -2.20703 0.895508 -4.20703 2.3418 -5.65625l11.9102 -11.9102c3 -3 7.06934 -4.68945 11.3096 -4.68945h10.3398c1.31055 0 2.61035 0.15918 3.87988 0.479492l21.2705 5.32031c2.08203 0.520508 4.25391 0.802734 6.49707 0.802734 +c7.38574 0 14.0771 -2.99805 18.9229 -7.84277l13.0098 -13.0098c3 -3 7.07031 -4.69043 11.3096 -4.69043h15.1602c4.24023 0 8.31055 1.69043 11.3105 4.69043l9.56934 9.56934c3 3 4.69043 7.07031 4.69043 11.3105z" /> +c-18.4697 11.9805 -28.6396 33.3701 -28.6396 55.3906v62.3096c0 4.41992 3.58008 8 8 8h48c4.41992 0 8 -3.58008 8 -8v-62.3096c0 -6.82031 3.61035 -12.9805 9.28027 -16.7803zM360.89 95.9502c0.0371094 0 0.0556641 0.0351562 0.0927734 0.0351562 +c19.4336 0 36.8535 -8.68652 48.5879 -22.3857l117.949 -137.6h-88.4492c-19.4385 0 -36.8506 8.65137 -48.5898 22.3496l-117.801 137.431c1.40039 0.0195312 53.8105 0.109375 88.21 0.169922zM616 96c13.25 0 24 -10.7402 24 -24v-112c0 -13.25 -10.75 -24 -24 -24 +h-17.4199c-19.4375 0 -36.8506 8.65137 -48.5898 22.3496l-117.99 137.65h184z" /> +c0 -13.4707 -8.32422 -24.9951 -20.1201 -29.71l-139.88 -55.9502v288z" /> +c0.00292969 13.4697 8.32617 24.9932 20.1201 29.71zM288 88.3301c14.0703 0 27.3799 6.17969 36.5098 16.9502c19.6699 23.2002 40.5703 49.6299 59.4902 76.7197v-245.99l-192 64v182c18.9199 -27.0996 39.8301 -53.5195 59.4902 -76.7197 +c9.12988 -10.7803 22.4395 -16.96 36.5098 -16.96zM554.06 286.84c10.5107 4.2002 21.9404 -3.54004 21.9404 -14.8594v-250.32c0 -13.4707 -8.32422 -24.9951 -20.1201 -29.71l-139.88 -55.9502v288z" /> @@ -3263,11 +3567,11 @@ c0 -17.7002 -14.2998 -32 -32 -32s-32 14.2998 -32 32c0 2.7998 0.900391 5.40039 1. c0 24.2998 -13.7002 45.2002 -33.5996 56c0.699219 -2.59961 1.59961 -5.2002 1.59961 -8c0 -17.7002 -14.2998 -32 -32 -32s-32 14.2998 -32 32c0 2.7998 0.900391 5.40039 1.59961 8c-19.8994 -10.7998 -33.5996 -31.7002 -33.5996 -56c0 -35.2998 28.7002 -64 64 -64z " /> +c-26.4404 -7.36035 -54.5205 -5.85059 -81 1.35938l-287.601 78.3506c-9.58496 2.61621 -18.2998 7.45605 -25.4697 13.9297z" /> +c2.41504 1.22461 5.18066 1.91504 8.07227 1.91504c2.875 0 5.59277 -0.682617 7.99805 -1.89551l72.3496 -36.4697l103.21 52.3799l-156.22 98.0996c-8.08008 8.87988 -5.5 23.1201 5.16992 28.5303l65.75 33.3701c2.41504 1.22559 5.18164 1.91699 8.07324 1.91699 +c3.67383 0 7.08984 -1.11621 9.92676 -3.02734l218.7 -82.0596l98.5098 49.9902c26.7402 13.5596 56.4297 21.4199 86.2803 19.4795c33.5098 -2.17969 51.04 -12.8799 58.25 -27.4502c7.22949 -14.5596 5.23926 -35.1699 -13.0703 -63.6494 +c-16.3096 -25.3701 -40.2803 -44.7402 -67.0205 -58.3105l-290.96 -147.649c-8.88574 -4.51562 -19.001 -7.10645 -29.6396 -7.12012l-130.54 -0.180664c-9.22949 -0.00976562 -18.0498 3.87012 -24.3301 10.7109z" /> +d="M434.66 280.29c5.77344 -5.79004 9.34473 -13.7861 9.34473 -22.5996c0 -8.81445 -3.57129 -16.8008 -9.34473 -22.5908l-210.66 -211.1v271.12l75.4297 75.5195l0.0703125 0.0703125v0c5.75781 5.73633 13.707 9.28516 22.4688 9.28516 +c8.79883 0 16.7676 -3.57715 22.5312 -9.35547l90.1602 -90.3496v0zM480 128c17.6611 0 32 -14.3389 32 -32v-128c0 -17.6611 -14.3389 -32 -32 -32h-300c2.17969 1.91016 4.62012 3.41992 6.67969 5.49023l186.41 186.51h106.91zM192 416v-384 +c0 -52.9834 -43.0166 -96 -96 -96s-96 43.0166 -96 96v384c0 17.6611 14.3389 32 32 32h128c17.6611 0 32 -14.3389 32 -32zM96 8c13.2461 0 24 10.7539 24 24s-10.7539 24 -24 24s-24 -10.7539 -24 -24s10.7539 -24 24 -24zM128 192v64h-64v-64h64zM128 320v64h-64v-64h64z +" /> +c38.6895 0 70.0498 -29.4199 70.0498 -65.71v-60.1104l32.8799 21.9199c4.4502 2.9707 7.12012 7.95996 7.12012 13.3105v170.59c0 8.83984 7.16016 16 16 16h16c8.83984 0 16 -7.16016 16 -16v-170.59c0 -5.55273 2.81934 -10.4414 7.12012 -13.3105l32.8799 -21.9199 +v60.1104c0 36.29 31.3604 65.71 70.0498 65.71c43.9805 0 57.9307 -28.5596 80.0498 -63.1299c45.9707 -71.8701 80.3408 -149.72 102.011 -231.021z" /> +d="M128 192c70.6455 0 128 -57.3545 128 -128s-57.3545 -128 -128 -128s-128 57.3545 -128 128s57.3545 128 128 128zM507 246.86c14.2402 -24.3799 -3.58008 -54.8604 -32.0898 -54.8604h-213.82c-28.5098 0 -46.3301 30.4805 -32.0898 54.8604l106.93 182.85 +c6.48828 10.9688 18.3906 18.3311 32.0469 18.3311c13.6553 0 25.6055 -7.3623 32.0938 -18.3311zM480 160c17.6611 0 32 -14.3389 32 -32v-160c0 -17.6611 -14.3389 -32 -32 -32h-160c-17.6611 0 -32 14.3389 -32 32v160c0 17.6611 14.3389 32 32 32h160z" /> +c0 26.5 21.5 48 48 48h416zM250.58 96c11 0 18.7197 10.8496 15.1104 21.25l-53.6904 154.62c-3.25586 9.3877 -12.1758 16.1299 -22.666 16.1299h-0.00390625h-26.6602l0.00292969 0.00585938c-10.4873 0 -19.4131 -6.74219 -22.6729 -16.126l-53.7002 -154.63 +c-3.60938 -10.4004 4.11035 -21.25 15.1201 -21.25h16.9404c0.00195312 0 -0.000976562 -0.00390625 0.000976562 -0.00390625c6.99316 0 12.9453 4.49609 15.1191 10.7539l7.37988 21.25h70.29l7.36914 -21.25c2.24023 -6.42969 8.31055 -10.75 15.1201 -10.75h16.9404z +M424 112v160c0 8.83984 -7.16016 16 -16 16h-16c-8.83984 0 -16 -7.16016 -16 -16v-36.4199c-7.54004 2.68945 -15.54 4.41992 -24 4.41992c-39.7002 0 -72 -32.2998 -72 -72s32.2998 -72 72 -72c9.92969 0 19.4004 2.01953 28.0195 5.67969 +c2.94043 -3.41016 7.13086 -5.67969 11.9805 -5.67969h16c8.83984 0 16 7.16016 16 16z" /> @@ -3611,19 +3916,19 @@ c-6.62988 0 -12 -5.37012 -12 -12v-40c0 -6.62988 5.37012 -12 12 -12h40c6.62988 0 c0 6.62988 -5.37012 12 -12 12h-40c-6.62988 0 -12 -5.37012 -12 -12v-40c0 -6.62988 5.37012 -12 12 -12h40c6.62988 0 12 5.37012 12 12zM576 44v40c0 6.62988 -5.37012 12 -12 12h-40c-6.62988 0 -12 -5.37012 -12 -12v-40c0 -6.62988 5.37012 -12 12 -12h40 c6.62988 0 12 5.37012 12 12zM576 140v40c0 6.62988 -5.37012 12 -12 12h-40c-6.62988 0 -12 -5.37012 -12 -12v-40c0 -6.62988 5.37012 -12 12 -12h40c6.62988 0 12 5.37012 12 12z" /> +d="M256 416c141.38 0 256 -93.1201 256 -208s-114.62 -208 -256 -208c-38.4102 0 -74.71 7.07031 -107.4 19.3799c-24.6094 -19.6299 -74.3398 -51.3799 -140.6 -51.3799l-0.00195312 0.00195312c-4.41309 0 -7.99512 3.58301 -7.99512 7.99512 +c0 2.13184 0.835938 4.06934 2.19727 5.50293c0.5 0.530273 42.2598 45.4502 54.8193 95.7598c-35.6094 35.7305 -57.0195 81.1807 -57.0195 130.74c0 114.88 114.62 208 256 208zM280 113.56c30.29 3.62012 53.3701 30.9805 49.3203 63.04 +c-2.90039 22.96 -20.6602 41.3105 -42.9102 47.6699l-50.0703 14.3008c-3.59961 1.0293 -6.12012 4.35938 -6.12012 8.10938c0 4.64062 3.78027 8.41992 8.44043 8.41992h32.7803c0.0214844 0 0.0634766 -0.0126953 0.0859375 -0.0126953 +c3.62891 0 7.07422 -0.790039 10.1738 -2.20703c4.7998 -2.20996 10.3701 -1.70996 14.1094 2.03027l17.5205 17.5195c5.26953 5.27051 4.66992 14.2705 -1.5498 18.3799c-9.5 6.27051 -20.3604 10.1104 -31.7803 11.46v17.7305c0 8.83984 -7.16016 16 -16 16h-16 +c-8.83984 0 -16 -7.16016 -16 -16v-17.5498c-30.29 -3.62012 -53.3701 -30.9805 -49.3203 -63.0498c2.90039 -22.96 20.6602 -41.3203 42.9102 -47.6699l50.0703 -14.3008c3.59961 -1.0293 6.12012 -4.35938 6.12012 -8.10938 +c0 -4.64062 -3.78027 -8.41992 -8.44043 -8.41992h-32.7803c-3.59961 0 -7.0791 0.759766 -10.2598 2.21973c-4.7998 2.20996 -10.3701 1.70996 -14.1094 -2.03027l-17.5205 -17.5195c-5.26953 -5.27051 -4.66992 -14.2705 1.5498 -18.3799 +c9.5 -6.27051 20.3604 -10.1104 31.7803 -11.46v-17.7305c0 -8.83984 7.16016 -16 16 -16h16c8.83984 0 16 7.16016 16 16v17.5596z" /> +d="M464 320c26.4922 0 48 -21.5078 48 -48v-224c0 -26.4922 -21.5078 -48 -48 -48h-416c-26.4922 0 -48 21.5078 -48 48v288c0 26.4922 21.5078 48 48 48h160l64 -64h192zM359.5 152v16c0 8.83105 -7.16895 16 -16 16h-64v64c0 8.83105 -7.16895 16 -16 16h-16 +c-8.83105 0 -16 -7.16895 -16 -16v-64h-64c-8.83105 0 -16 -7.16895 -16 -16v-16c0 -8.83105 7.16895 -16 16 -16h64v-64c0 -8.83105 7.16895 -16 16 -16h16c8.83105 0 16 7.16895 16 16v64h64c8.83105 0 16 7.16895 16 16z" /> +d="M535.953 96c-42.6406 -94.1719 -137.641 -160 -247.984 -160c-4.26562 0 -8.54688 0.0986328 -12.8447 0.296875c-103.969 4.76562 -193.859 69.4688 -235.109 159.703h39.9219l-58.6094 58.5938c-2.65332 12.8242 -4.38672 25.9951 -5.10938 39.4219 +c-0.133789 3.5166 -0.202148 7.05078 -0.202148 10.5996c0 6.65527 0.234375 12.8477 0.702148 19.3848h47.2188l-41.3906 41.375c14.7842 66.6123 53.959 124.015 107.969 162.078c2.61426 1.87109 5.82812 2.98535 9.28125 3 +c5.62793 -0.03125 10.5791 -2.89355 13.5 -7.25c1.76367 -2.57422 2.7959 -5.68848 2.7959 -9.04199c0 -2.13086 -0.414062 -4.19141 -1.1709 -6.05176c-6.31445 -15.834 -9.84375 -33.1904 -9.84375 -51.2656c0 -45.1094 21.0469 -86.5781 57.7188 -113.734 +c4.07324 -2.96484 6.72266 -7.76855 6.72266 -13.1865c0 -4.86133 -2.13965 -9.2168 -5.51953 -12.2041c-26.5469 -23.9844 -41.1719 -56.5 -41.1719 -91.5781c0 -60.0312 42.9531 -110.281 99.8906 -121.922l2.5 65.2656l-27.1562 -18.4844 +c-1.29688 -0.832031 -2.83887 -1.31445 -4.49219 -1.31445c-2.10352 0 -4.04004 0.777344 -5.50781 2.06445c-1.55078 1.46387 -2.51953 3.53809 -2.51953 5.83691c0 1.49414 0.416992 2.90234 1.12891 4.10059l20.125 33.7656l-42.0625 8.73438 +c-3.64062 0.744141 -6.38379 3.96777 -6.38379 7.82812s2.74316 7.08398 6.38379 7.82812l42.0625 8.71875l-20.1094 33.7344c-0.724609 1.20312 -1.1416 2.61133 -1.1416 4.11719c0 4.41016 3.58105 7.99121 7.99121 7.99121c1.67188 0 3.22656 -0.510742 4.50977 -1.38965 +l30.3906 -20.6562l11.5166 287.969c0.15918 4.25879 3.66797 7.66699 7.96484 7.66699c0.0117188 0 0.0234375 0.00488281 0.0351562 0.00488281h0.046875c4.29004 -0.0332031 7.78418 -3.44629 7.95312 -7.70312l11.5312 -287.922l30.3906 20.6719 +c1.28223 0.855469 2.82227 1.35449 4.47852 1.35449c2.12793 0 4.07715 -0.820312 5.52148 -2.16699c1.54785 -1.45898 2.51465 -3.52832 2.51465 -5.82129c0 -1.48828 -0.415039 -2.89062 -1.12402 -4.08496l-20.1406 -33.7656l42.0781 -8.73438 +c3.63379 -0.750977 6.36914 -3.97266 6.36914 -7.82812s-2.73535 -7.07715 -6.36914 -7.82812l-42.0781 -8.71875l20.1094 -33.7344c0.730469 -1.20508 1.15039 -2.61719 1.15039 -4.12793c0 -2.27637 -0.947266 -4.33984 -2.47852 -5.79395 +c-1.46484 -1.32227 -3.4043 -2.12793 -5.53125 -2.12793c-1.6543 0 -3.20801 0.492188 -4.5 1.33105l-27.1719 18.4688l2.5 -65.3438c48.4844 9.40625 87.5781 48.1562 97.3125 96.5c1.68066 8.11816 2.56445 16.5254 2.56445 25.1387 +c0 36.5547 -15.8574 69.3145 -41.127 91.9395c-3.38867 2.98926 -5.52734 7.3623 -5.52734 12.2314c0 5.42578 2.64844 10.2256 6.73047 13.1904c36.6562 27.1719 57.6875 68.6094 57.6875 113.734v0.0859375c0 18.0664 -3.53613 35.4062 -9.85938 51.2266 +c-0.763672 1.86523 -1.18555 3.90625 -1.18555 6.0459c0 3.34668 1.0332 6.47949 2.79492 9.04785c2.9248 4.35059 7.875 7.20605 13.5 7.23438c3.44043 -0.0136719 6.64355 -1.12305 9.25 -2.98438c53.9287 -38.2227 93.0518 -95.6611 107.906 -162.281l-41.25 -41.2344 +h46.9531c0.359375 -5.76562 1.04688 -11.4531 1.04688 -17.2656c-0.0332031 -17.8086 -1.7959 -35.0137 -5.125 -51.8594l-58.8906 -58.875h39.9688z" /> +c1.67383 -1.4668 2.73047 -3.62012 2.73047 -6.01758c0 -4.41309 -3.58398 -7.99414 -7.99609 -7.99805h-0.015625c-1.97363 0.0996094 -3.79785 0.828125 -5.25 1.98438l-23.5938 20.6406c11.5469 -49.5781 55.7656 -86.625 108.859 -86.625 +s97.3125 37.0469 108.875 86.625l-23.5938 -20.6406c-1.40918 -1.22461 -3.25391 -1.96875 -5.26562 -1.96875h-0.015625c-2.34766 0.129883 -4.46777 1.14551 -6.01562 2.71875c-1.1543 1.45996 -1.88184 3.28809 -1.98438 5.26562 +c0.128906 2.35059 1.15137 4.47266 2.73438 6.01562l37.1094 32.4688c0.015625 0.53125 0.15625 1 0.15625 1.51562c0 11.0469 -2.09375 21.5156 -5.0625 31.5938l-21.2656 -21.25c-1.44922 -1.4502 -3.45117 -2.34863 -5.66211 -2.34863 +c-4.41797 0 -8.00488 3.58691 -8.00488 8.00488c0 2.20605 0.892578 4.20801 2.33887 5.65625l26.4219 26.4062c-10.0342 20.8945 -26.1904 38.0244 -46.3594 49.2656c6.05371 -9.67676 9.55469 -21.1123 9.55469 -33.3584c0 -19.916 -9.17383 -37.7295 -23.6172 -49.2822 +c9.69336 -10.0459 15.6592 -23.7119 15.6592 -38.7598c0 -26.875 -19.0703 -49.3535 -44.3779 -54.6621l-1.42188 34.2812l12.6719 -8.625c0.635742 -0.432617 1.40234 -0.685547 2.22852 -0.685547c0.00585938 0 0.015625 -0.00195312 0.0214844 -0.00195312h0.0263672 +c2.19727 0 3.98047 1.7832 3.98047 3.98047c0 0.748047 -0.209961 1.45215 -0.569336 2.05078l-8.53125 14.3125l17.9062 3.71875c1.81738 0.379883 3.18457 1.99219 3.18457 3.92188s-1.36719 3.54199 -3.18457 3.92188l-17.9062 3.71875l8.53125 14.3125 +c0.359375 0.598633 0.566406 1.29883 0.566406 2.04688c0 2.19629 -1.7832 3.98047 -3.98047 3.98047c-0.00878906 0 -0.0146484 0.00390625 -0.0234375 0.00390625c-0.817383 -0.0322266 -1.58984 -0.275391 -2.25 -0.671875l-14.1875 -9.65625l-4.6875 112.297 +c-0.09375 2.12695 -1.84961 3.8252 -4 3.8252s-3.90625 -1.69824 -4 -3.8252l-4.625 -110.812l-12 8.15625c-0.639648 0.43457 -1.41211 0.688477 -2.24316 0.688477c-2.20996 0 -4.00293 -1.79395 -4.00293 -4.00391c0 -0.745117 0.203125 -1.44629 0.558594 -2.04395 +l8.53125 -14.3125l-17.9062 -3.71875c-1.81738 -0.375977 -3.18457 -1.98633 -3.18457 -3.91406s1.36719 -3.53809 3.18457 -3.91406l17.9062 -3.73438l-8.53125 -14.2969c-0.330078 -0.611328 -0.532227 -1.31152 -0.5625 -2.04688 +c0.0615234 -1.12109 0.525391 -2.14062 1.25 -2.90625c0.717773 -0.677734 1.68652 -1.09277 2.75 -1.09375c0.830078 0.00390625 1.60645 0.257812 2.25 0.6875l10.3594 7.04688l-1.35938 -32.7188c-25.3086 5.31836 -44.335 27.79 -44.335 54.6709 +c0 15.0518 5.92285 28.7324 15.6162 38.7822c-14.4434 11.5508 -23.7012 29.3193 -23.7012 49.2334c0 12.2559 3.59082 23.7412 9.6543 33.4229c-20.1709 -11.2451 -36.3311 -28.374 -46.375 -49.2656l26.4219 -26.4219c1.43945 -1.44727 2.33008 -3.44043 2.33008 -5.64062 +c0 -4.41504 -3.58496 -8 -7.99902 -8c-2.2002 0 -4.19629 0.888672 -5.64355 2.32812l-21.2656 21.2656c-2.98438 -10.0938 -5.07812 -20.5625 -5.0625 -31.625z" /> +c-3.47949 -0.950195 -5.88965 -4.11035 -5.88965 -7.71973v-16.5801c0 -5.28027 5.01953 -9.11035 10.1104 -7.7207l96 26.1807c3.47949 0.950195 5.88965 4.10938 5.88965 7.71973zM448 234.47v-16.5801c0 -0.00195312 0.00195312 -0.00195312 0.00195312 -0.00390625 +c0 -3.68359 2.49609 -6.78906 5.8877 -7.71582l80 -21.8203c5.09082 -1.38965 10.1104 2.44043 10.1104 7.7207v16.5801c0 3.60938 -2.41016 6.76953 -5.88965 7.71973l-80 21.8203c-5.09082 1.38965 -10.1104 -2.44043 -10.1104 -7.7207zM304 273.74v-16.5801 +c0 -0.00195312 0.00195312 -0.00292969 0.00195312 -0.00488281c0 -3.68359 2.49609 -6.78906 5.8877 -7.71484l96 -26.1807c5.09082 -1.38965 10.1104 2.44043 10.1104 7.7207v16.5791c0 3.61035 -2.41016 6.77051 -5.88965 7.7207l-96 26.1797 +c-5.09082 1.38965 -10.1104 -2.44043 -10.1104 -7.71973z" /> +d="M501.62 355.89c6.24023 -2.33984 10.3799 -8.30957 10.3799 -14.9795v-36.9102c0 -8.83984 -7.16016 -16 -16 -16h-480c-8.83984 0 -16 7.16016 -16 16v36.9102c0.000976562 6.85547 4.31445 12.7041 10.3799 14.9795l234.39 90.0703 +c3.49219 1.31152 7.30176 2.02832 11.25 2.02832c3.94727 0 7.72852 -0.716797 11.2207 -2.02832zM64 256h64v-160h96v160h64v-160h96v160h64v-160h16c8.83984 0 16 -7.16016 16 -16v-48h-448v48c0 8.83984 7.16016 16 16 16h16v160zM496 0c8.83984 0 16 -7.16016 16 -16 +v-32c0 -8.83984 -7.16016 -16 -16 -16h-480c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16h480z" /> +d="M272 256.09c17.5996 0 32 -14.3994 32 -32v-128c0 -51.8896 -34.8398 -98.0801 -84.75 -112.35l-179.19 -46.6201c-2.64941 -0.69043 -5.36914 -1.03027 -8.05957 -1.03027c-23.4805 0 -32 21.1797 -32 32v96 +c0 0.00390625 -0.00488281 -0.000976562 -0.00488281 0.00292969c0 14.1221 9.1748 26.1182 21.8848 30.3477l90.1201 30.04v80.2295c0 18.9805 5.55957 37.3896 16.1201 53.2305l117.26 175.899c0.169922 0.270508 0.589844 0.25 0.790039 0.480469 +c9.58008 13.5098 27.8496 17.8799 42.2998 9.20996c15.1602 -9.10059 20.0605 -28.75 10.9707 -43.9102l-77.75 -129.59c-8.9707 -14.9199 -13.6904 -32 -13.6904 -49.3906v-76.5498c0 -8.83984 7.16016 -16 16 -16s16 7.16016 16 16v80c0 17.6006 14.4004 32 32 32z +M618.12 94.3604c13.0703 -4.36035 21.8799 -16.5801 21.8799 -30.3506v-96c0 -10.8193 -8.51953 -32 -32 -32c-2.67969 0 -5.40039 0.339844 -8.05957 1.03027l-179.19 46.6201c-49.9102 14.2598 -84.75 60.4502 -84.75 112.34v128c0 17.5996 14.4004 32 32 32 +s32 -14.4004 32 -32v-80c0 -8.83984 7.16016 -16 16 -16s16 7.16016 16 16v76.5498c0 17.3906 -4.71973 34.4697 -13.6904 49.3906l-77.75 129.59c-9.08984 15.1602 -4.18945 34.8193 10.9707 43.9102c14.4502 8.66992 32.7197 4.2998 42.2998 -9.20996 +c0.200195 -0.240234 0.610352 -0.210938 0.790039 -0.480469l117.26 -175.89c10.5605 -15.8408 16.1201 -34.25 16.1201 -53.2305v-80.2295z" /> +c-52.3096 0 -94.8594 42.5596 -94.8594 94.8594c0 52.3105 42.5498 94.8604 94.8594 94.8604c1.04004 0 3.45996 -0.209961 4.13086 -0.209961c0.738281 -0.276367 1.54004 -0.429688 2.375 -0.429688c3.73926 0 6.77441 3.03516 6.77441 6.77441 +c0 3.7373 -3.0332 6.77246 -6.76953 6.77539c-13.1201 4.91992 -26.71 7.41016 -40.3799 7.41016zM380.8 0v64h-284.8c-16 0 -32 -12.7998 -32 -32s12.7998 -32 32 -32h284.8z" /> +v-208c0 -41.8877 -20.0566 -79.043 -51.2002 -102.4l-115.2 -86.3994c-17.2695 -12.9502 -37.4893 -19.2002 -57.5195 -19.2002c-32.8105 0 -65.1699 16.75 -83.4199 48.3301c-24.6504 42.6396 -10.1904 97.5 29.21 127.06z" /> +c0 13.2598 10.75 24 24 24h81.4697c12.0801 -0.00292969 22.584 -6.67871 28.0303 -16.5703l58.4102 -106.1l84.79 322.8c3.68945 14.0703 16.4102 23.8701 30.9502 23.8701h244.35z" /> +l18.46 -30.8203h-36.8496zM382.45 136.5l18.4102 30.7998l18.4492 -30.7998h-36.8594zM128 -16v416h384v-416h-384zM194.77 262.13c-1.7627 -3.04492 -2.77148 -6.62402 -2.77148 -10.3936c0 -3.92969 1.09668 -7.60547 3.00195 -10.7363l29.3604 -49l-29.21 -48.8398 +c-1.91211 -3.17578 -3.02637 -6.91699 -3.02637 -10.8906c0 -11.6504 9.45898 -21.1094 21.1104 -21.1094h0.015625h59.5l29.25 -48.8799c3.61816 -6.12793 10.2754 -10.2207 17.9004 -10.2207h0.0996094c7.7373 0.0166016 14.4912 4.17676 18.1602 10.4004l29.1299 48.7002 +h59.4697c0.0078125 0 0.00195312 -0.0224609 0.00878906 -0.0224609c7.90723 0 14.8115 4.32812 18.4717 10.7422c1.75879 3.04199 2.76562 6.61621 2.76562 10.3799c0 3.93164 -1.09863 7.6084 -3.00586 10.7402l-29.3701 49l29.2402 48.8496 +c1.90723 3.17383 3.01758 6.91113 3.01758 10.8809c0 11.6553 -9.46191 21.1182 -21.1182 21.1191h-59.5195l-29.25 48.8604c-3.6123 6.12207 -10.2617 10.21 -17.8779 10.21h-0.0722656c-0.0117188 0 -0.00976562 0.0224609 -0.0214844 0.0224609 +c-7.74316 0 -14.5186 -4.17383 -18.1982 -10.3926l-29.1299 -48.71h-59.4502c-0.015625 0 -0.0166016 0.0224609 -0.0322266 0.0224609c-7.89844 0 -14.7939 -4.32422 -18.4482 -10.7324zM592 448c26.5098 0 48 -14.3301 48 -32v-448c0 -17.6699 -21.4902 -32 -48 -32 +s-48 14.3301 -48 32v448c0 17.6699 21.4902 32 48 32zM320 302.47l17.6797 -29.6201h-35.46zM257.55 247.47l-18.3701 -30.7998l-18.4395 30.7998h36.8096zM287.13 136.47l-33.2295 55.5303l33.1699 55.5195h65.79l33.2295 -55.5195l-33.1699 -55.5303h-65.79z" /> +d="M298.06 224l149.94 -53.5498v-218.45c0 -8.83105 -7.16895 -16 -16 -16h-64c-8.83105 0 -16 7.16895 -16 16v112h-160v-112c0 -8.83105 -7.16895 -16 -16 -16h-64c-8.83105 0 -16 7.16895 -16 16v213.91c-37.1602 13.25 -64 48.4297 -64 90.0898 +c0 17.6611 14.3389 32 32 32s32 -14.3389 32 -32c0.0332031 -17.6455 14.3545 -31.9668 32 -32h170.06zM544 336v-32c0 -35.3223 -28.6777 -64 -64 -64h-32v-35.5801l-128 45.71v149.87c0 14.25 17.2197 21.3896 27.3096 11.3096l27.2803 -27.3096h53.6299 +c10.9102 0 23.75 -7.91992 28.6201 -17.6904l7.16016 -14.3096h64c8.83105 0 16 -7.16895 16 -16zM432 336c0 8.83105 -7.16895 16 -16 16s-16 -7.16895 -16 -16s7.16895 -16 16 -16s16 7.16895 16 16z" /> +c10.0703 0 19.5498 -4.7002 25.6006 -12.7598l74.5293 -99.3799c4.00781 -5.3457 6.37988 -12.042 6.37988 -19.2305c0 -5.12988 -1.20996 -9.98047 -3.35938 -14.2803l-14.3105 -28.6191c-5.25 -10.502 -16.0889 -17.6895 -28.6191 -17.6904h-30.9707 +c-8.48926 0 -16.6299 3.37012 -22.6299 9.37012l-28.0898 22.6299h-64v-36.6904c0.00195312 -18.791 10.7812 -35.0459 26.5303 -42.9199zM489.18 381.75c-4.33008 -17.1396 8.56055 -28.96 21.5205 -29.6699c11.6602 -0.629883 21.3799 7.34961 24.1299 18.2598z" /> +d="M462.8 398.43c34.3203 -34.2793 50.4307 -79.5996 49.1299 -124.56c-41.9795 22.6602 -94.3594 17.5596 -128.739 -16.7998c-40.8809 -40.8398 -40.6904 -107.181 -1.05078 -151.07c-18.9736 -6.45312 -39.3203 -10.0049 -60.4648 -10.0049 +c-0.475586 0 -0.950195 0.000976562 -1.4248 0.00488281h-85.8896l-40.6104 -40.5596c-9.71973 -9.75 -11.0898 -24.0205 -6 -36.75c2.77051 -6.92383 4.3125 -14.5234 4.3125 -22.4316c0 -33.3086 -27.042 -60.3506 -60.3496 -60.3506 +c-16.7041 0 -31.8311 6.80078 -42.7627 17.7822c-15.2803 15.2695 -19.6006 36.5 -15.1006 56.0996c-19.6094 -4.49023 -40.8496 -0.179688 -56.1191 15.0703c-10.9395 10.9229 -17.668 26.002 -17.668 42.666c0 33.2979 27.0332 60.3301 60.3301 60.3301 +c7.88965 0 15.4277 -1.51758 22.3379 -4.27637c12.7793 -5.07031 27.0791 -3.69043 36.7793 6l40.6201 40.5898v85.8301c0 64 27.6904 107 63.1699 142.43c30.666 30.6338 73.0479 49.5889 119.774 49.5889s89.0605 -18.9551 119.726 -49.5889z" /> @@ -3957,10 +4264,10 @@ c0 -4.41992 3.58008 -8 8 -8h12.2695zM256 184c0 4.41992 -3.58008 8 -8 8h-16c-4.41 c23.4004 25.1992 36.2803 58.6094 36.2803 94.0898v20.7998c0 4.41992 -3.58008 8 -8 8h-16c-4.41992 0 -8 -3.58008 -8 -8v-20.7998c0 -20.2705 -5.7002 -40.1807 -16 -56.8799c-10.2998 16.71 -16 36.6094 -16 56.8799v20.7998zM377 343c4.5 -4.5 7 -10.5996 7 -16.9004 v-6.09961h-128v128h6.09961c6.40039 0 12.5 -2.5 17 -7z" /> @@ -3984,14 +4291,14 @@ M176 320c-13.25 0 -24 11.9502 -24 26.6699s24 53.3301 24 53.3301s24 -38.5996 24 - c0 -14.7295 -10.75 -26.6699 -24 -26.6699zM400 320c-13.25 0 -24 11.9502 -24 26.6699s24 53.3301 24 53.3301s24 -38.5996 24 -53.3301c0 -14.7295 -10.75 -26.6699 -24 -26.6699zM464 320c-13.25 0 -24 11.9502 -24 26.6699s24 53.3301 24 53.3301 s24 -38.5996 24 -53.3301c0 -14.7295 -10.75 -26.6699 -24 -26.6699zM528 320c-13.25 0 -24 11.9502 -24 26.6699s24 53.3301 24 53.3301s24 -38.5996 24 -53.3301c0 -14.7295 -10.75 -26.6699 -24 -26.6699z" /> +d="M496 0c8.83984 0 16 -7.16016 16 -16v-32c0 -8.83984 -7.16016 -16 -16 -16h-480c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16h480zM192 64l16 -32h-144l110.96 249.66c11.1211 25.0264 29.8379 45.6514 53.46 59.1494l187.58 107.19l-56.2998 -168.92 +c-2.12207 -6.35938 -3.25781 -13.2188 -3.25781 -20.2881c0 -8.93164 1.83496 -17.4375 5.14746 -25.1621l86.4102 -201.63h-208l16 32l64 32l-64 32l-32 64l-32 -64l-64 -32zM256 288l-32 -16l32 -16l16 -32l16 32l32 16l-32 16l-16 32z" /> +d="M575.92 371.4l0.0605469 -77.71c0 -0.0107422 0.0185547 -0.00683594 0.0185547 -0.0166016c0 -13.4707 -8.34277 -25.0088 -20.1387 -29.7236l-32.5508 -13.0205c-15.4395 -6.17969 -33.04 0.5 -40.4893 15.3701l-18.9004 37.7002l-16 7.11035v-102.471 +c0.00976562 -0.219727 0.0800781 -0.419922 0.0800781 -0.639648c0 -30.4697 -12.2598 -58.0303 -32 -78.2197v-177.78c0 -8.83984 -7.16016 -16 -16 -16h-64c-8.83984 0 -16 7.16016 -16 16v150.4l-133.97 22.3301l-23.8398 -63.5908l26.3096 -105.26 +c2.53027 -10.0996 -5.11035 -19.8799 -15.5195 -19.8799h-65.9609c-7.48633 0 -13.7783 5.16602 -15.5098 12.1201l-24.8496 99.4102c-1.24707 4.98047 -1.8916 10.1924 -1.8916 15.5576c0 7.8916 1.43262 15.4502 4.05176 22.4316l25.7197 68.6006 +c-18.7002 17.5195 -30.54 42.2402 -30.54 69.8799c0 2.62988 0.570312 5.09961 0.780273 7.67969c-9.91016 -7.29004 -16.7803 -18.46 -16.7803 -31.6797v-56c0 -8.83984 -7.16016 -16 -16 -16h-16c-8.83984 0 -16 7.16016 -16 16v56c0 48.5303 39.4697 88 88 88v-1.11035 +c17.5996 20.1299 43.1602 33.1104 72 33.1104h159.92c0 70.6904 57.3105 128 128 128h119.98c5.05957 0 8.94922 -4.67969 7.92969 -9.63965c-2.67969 -13.1699 -11.1201 -23.8203 -22.1797 -30.6602c5.10938 -5.37988 9.90918 -10.4697 13.6895 -14.5 +c5.56055 -5.93066 8.57031 -13.6699 8.58008 -21.7998zM511.92 352c8.83984 0 16 7.16016 16 16s-7.16016 16 -16 16s-16 -7.16016 -16 -16s7.16016 -16 16 -16z" /> +d="M634.92 -14.7002c3.2041 -4.98145 5.06348 -10.9756 5.06348 -17.334c0 -5.53906 -1.41113 -10.751 -3.89355 -15.2959c-5.60938 -10.2803 -16.3799 -16.6699 -28.0898 -16.6699h-576c-12.1191 0 -22.6582 6.7168 -28.0898 16.6602 +c-2.48242 4.5459 -3.89355 9.82715 -3.89355 15.3672c0 6.36035 1.85938 12.2891 5.06348 17.2725l288 448c5.88965 9.16016 16.0303 14.7002 26.9199 14.7002s21.0303 -5.54004 26.9199 -14.7002zM320 356.82l-102.06 -158.761l38.0596 -38.0596l64 64h85.3896z" /> +c-4.91016 28.1201 5 54.2197 23.1904 71.7998c23.5596 22.75 39.5596 52.1396 39.5596 84.8896v1.61035c0 106.04 85.96 192 192 192h56l153.25 87.5703c9.66992 5.51953 20.6104 8.42969 31.75 8.42969h20.4902c0.00390625 0 0.0166016 0.00878906 0.0214844 0.00878906 +c17.6602 0 33.6582 -7.17188 45.2383 -18.7588l13.25 -13.25h32zM512 400c-8.83984 0 -16 -7.16016 -16 -16s7.16016 -16 16 -16s16 7.16016 16 16s-7.16016 16 -16 16zM544 304c20.8301 0 38.4297 13.4199 45.0498 32h-77.0498l-118.57 -59.29l13.7705 -27.5498 +l101.84 54.8398h34.96z" /> +c0 0.00292969 0.0205078 0.0400391 0.0205078 0.0439453c0 6.20898 1.77246 12.0078 4.83984 16.916l60.8301 97.3301h-47.0605l-48 -72c-4.89941 -7.35059 -14.8398 -9.33984 -22.1895 -4.44043l-13.3105 8.87988c-7.36035 4.90039 -9.33984 14.8398 -4.43945 22.1904 +l52.7393 79.1299c5.74121 8.60547 15.5186 14.248 26.6299 14.25h77.9404l-68.9902 24.3496c-6.81738 2.27441 -12.5947 6.74023 -16.5098 12.6104l-53.5996 80.4102c-4.90039 7.36035 -2.91016 17.29 4.43945 22.1895l13.3105 8.88086 +c7.35938 4.89941 17.29 2.90918 22.1895 -4.44043l50.5703 -75.8301l60.4902 -20.1699h36.0996l10.3701 51.8496c2.18945 10.9707 17.3701 60.1504 69.6299 60.1504s67.4404 -49.1797 69.6299 -60.1504l10.3701 -51.8496h36.0996l60.5 20.1699l50.5605 75.8301 +c4.89941 7.34961 14.8398 9.33984 22.1895 4.44043l13.3105 -8.88086c7.34961 -4.89941 9.33984 -14.8398 4.43945 -22.1895l-53.5996 -80.4102c-3.91504 -5.87012 -9.69238 -10.3359 -16.5098 -12.6104l-68.9902 -24.3594h77.9404 +c11.1084 -0.00292969 20.8828 -5.64453 26.6191 -14.25zM406.09 350.49l-23.7998 71.3896c-2.79004 8.37988 1.74023 17.4404 10.1201 20.2402l15.1699 5.05957c8.37988 2.80078 17.4502 -1.73926 20.2402 -10.1201l25.8896 -77.6797 +c1.06152 -3.18164 1.62598 -6.62109 1.62598 -10.1582c0 -5.12695 -1.20801 -9.97461 -3.35547 -14.2715l-27.1504 -54.2998l-25.9297 -8.65039h-4.66992l-5.2207 26.1201c-0.719727 3.58008 -1.7998 7.58008 -3.20996 11.79z" /> +c-8.58984 8.58984 -8.58984 22.5195 0 31.1104l31.1104 31.1094c7.92969 7.93066 20.2598 8.2002 28.8896 1.4707v146.52c0 26.4697 21.5303 48 48 48h133.45c0.015625 0 0.00878906 0.0341797 0.0244141 0.0341797c19.7969 0 36.8047 -12.0312 44.1055 -29.1738 +l56.0898 -130.86h102.33v40.2002c0 29.9902 10.5801 58.8994 29.5 81.7197c6.37988 7.7002 18.04 8.23047 24.7002 0.780273l21.6299 -24.1699c4.87012 -5.43066 5.74023 -13.6904 1.32031 -19.4902c-8.4502 -11.0801 -13.1504 -24.7197 -13.1504 -38.8398v-40.2002h64z +M176 32c44.1797 0 80 35.8203 80 80s-35.8203 80 -80 80s-80 -35.8203 -80 -80s35.8203 -80 80 -80zM198 288h110.04l-41.1504 96h-106.89v-96h38z" /> +d="M511.328 427.197c-11.6074 -38.7021 -34.3076 -111.702 -61.3037 -187.701c6.99902 -2.09375 13.4043 -4 18.6074 -5.59277c6.58301 -2.00684 11.3779 -8.13184 11.3779 -15.3672c0 -2.71875 -0.685547 -5.29395 -1.87988 -7.53906 +c-22.1055 -42.2969 -82.6904 -152.795 -142.479 -214.403c-0.999023 -1.09375 -1.99902 -2.5 -2.99902 -3.5c-35.2676 -35.2773 -83.9824 -57.1094 -137.757 -57.1094c-107.53 0 -194.83 87.2998 -194.83 194.83c0 53.7559 21.7637 102.511 57.0195 137.775 +c1 1 2.40625 2 3.49902 3c61.6006 59.9053 171.975 120.405 214.374 142.498c2.24512 1.19434 4.80664 1.87109 7.52441 1.87109c7.23535 0 13.374 -4.78711 15.3779 -11.3711c1.59375 -5.09375 3.5 -11.5928 5.59277 -18.5928 +c75.8955 26.999 148.978 49.7021 187.675 61.2959c1.4834 0.448242 3.05664 0.689453 4.68652 0.689453c8.93164 0 16.1826 -7.25098 16.1826 -16.1826c0 -1.59961 -0.236328 -3.14062 -0.668945 -4.60059zM319.951 127.998 +c-0.00976562 70.626 -57.3525 127.962 -127.98 127.962c-70.6348 0 -127.98 -57.3457 -127.98 -127.98c0 -70.6338 57.3457 -127.979 127.98 -127.979c70.6318 0 127.976 57.3438 127.976 127.976c0 0.0078125 0.00488281 0.0146484 0.00488281 0.0224609zM191.971 159.997 +c-0.00292969 -17.6562 -14.3379 -31.9902 -31.9951 -31.9902c-17.6582 0 -31.9951 14.3369 -31.9951 31.9951c0 17.6592 14.3369 31.9951 31.9951 31.9951h0.0371094c17.6387 0 31.959 -14.3203 31.959 -31.959 +c0 -0.0136719 -0.000976562 -0.0263672 -0.000976562 -0.0410156v0zM223.966 79.998c-0.000976562 -8.82812 -7.16895 -15.9951 -15.998 -15.9951s-15.9971 7.16895 -15.9971 15.998s7.16797 15.9971 15.9971 15.9971c8.81738 -0.0283203 15.9707 -7.18262 15.998 -16v0z +" /> d="M96 -48c0 -8.7998 -7.2002 -16 -16 -16h-32c-8.7998 0 -16 7.2002 -16 16v480c0 8.7998 7.2002 16 16 16h32c8.7998 0 16 -7.2002 16 -16v-480zM224 -48c0 -8.7998 -7.2002 -16 -16 -16h-32c-8.7998 0 -16 7.2002 -16 16v480c0 8.7998 7.2002 16 16 16h32 c8.7998 0 16 -7.2002 16 -16v-480z" /> +d="M502.63 409c5.77344 -5.79004 9.34473 -13.7852 9.34473 -22.5996c0 -8.8291 -3.58398 -16.8281 -9.375 -22.6201l-46.3301 -46.3203c-3.82617 -3.83691 -8.53223 -6.78125 -13.7891 -8.53027l-36.4805 -12.1602l-76.2402 -76.2393 +c8.79004 -12.2002 15.7705 -25.5605 19.1602 -40.2002c7.74023 -33.3896 0.870117 -66.8701 -22 -89.75c-9.26367 -9.2207 -20.71 -16.2314 -33.4795 -20.25c-18.54 -6.00977 -32.6709 -23.29 -34.4307 -42.1396c-2.29004 -23.8105 -11.4502 -45.8301 -28.4502 -62.71 +c-45.5596 -45.4805 -127.5 -37.3809 -182.979 18.0693c-55.4805 55.4502 -63.6904 137.45 -18.0498 182.96c16.8799 16.9902 38.9102 26.1699 62.6094 28.4404c18.9404 1.76953 36.1504 15.8994 42.1504 34.46c4.01172 12.7686 11.0195 24.2119 20.2402 33.4697 +c22.8799 22.8799 56.4297 29.7803 89.8799 22c14.5996 -3.39941 27.9395 -10.3799 40.0996 -19.1396l76.2598 76.2598l12.1602 36.5098c1.74902 5.25781 4.69336 9.96387 8.53027 13.79l46.2803 46.3301c5.79199 5.79395 13.8018 9.37988 22.6338 9.37988 +s16.833 -3.58594 22.626 -9.37988zM208 96c26.4922 0 48 21.5078 48 48s-21.5078 48 -48 48s-48 -21.5078 -48 -48s21.5078 -48 48 -48z" /> @@ -4387,20 +4696,21 @@ c14.2998 -1.2002 26.5 -10.7002 29.7998 -24.2002zM336 448c8.7998 0 16 -7.2002 16 c0 -13.2998 -10.7002 -24 -24 -24h-8v-136c0 -13.2998 -10.7002 -24 -24 -24h-80c-13.2998 0 -24 10.7002 -24 24v136h-8c-13.2998 0 -24 10.7002 -24 24v136c0 25.0996 19.2998 45.5 43.9004 47.5996c15 -9.7998 32.8994 -15.5996 52.0996 -15.5996 s37.0996 5.7998 52.0996 15.5996z" /> +d="M502.609 137.958l-96.7041 -96.7168c-5.76758 -5.74707 -13.7207 -9.30176 -22.499 -9.30176c-8.77734 0 -16.7402 3.55469 -22.5078 9.30176l-80.3262 80.418l-9.89258 -9.9082c10.8848 -23.9746 16.9482 -50.5957 16.9482 -78.6221 +c0 -32.3584 -8.10156 -63.1982 -22.3555 -89.9004c-4.50098 -8.50098 -16.3936 -9.59473 -23.207 -2.79785l-107.519 107.515l-17.7998 -17.7988c0.703125 -2.60938 1.60938 -5.00098 1.60938 -7.79785c0 -17.6641 -14.3408 -32.0059 -32.0049 -32.0059 +s-32.0059 14.3418 -32.0059 32.0059s14.3418 32.0039 32.0059 32.0039c2.79688 0 5.18848 -0.90625 7.79785 -1.60938l17.7998 17.7998l-107.518 107.515c-6.79883 6.8125 -5.7041 18.6113 2.79688 23.2061c26.7031 14.2539 57.1895 22.3359 89.5479 22.3359 +c28.0273 0 55.0049 -6.04395 78.9805 -16.9297l9.79883 9.79883l-80.3105 80.417c-5.74609 5.78613 -9.29785 13.7539 -9.29785 22.5449s3.55176 16.7686 9.29785 22.5547l96.7197 96.7168c5.72754 5.74512 13.6484 9.30273 22.3945 9.30273 +c0.0351562 0 0.0732422 -0.00488281 0.109375 -0.00488281h0.0458984c8.79199 0 16.7656 -3.5498 22.5518 -9.29785l80.3262 -80.3076l47.8047 47.8965c6.08301 6.07715 14.4805 9.83789 23.749 9.83789c9.26953 0 17.6768 -3.76074 23.7588 -9.83789l47.5088 -47.5059 +c6.07031 -6.08594 9.82617 -14.4824 9.82617 -23.749s-3.75586 -17.6719 -9.82617 -23.7578l-47.8057 -47.8975l80.3105 -80.417c5.73633 -5.75195 9.28516 -13.6865 9.28516 -22.4434c0 -8.81348 -3.59277 -16.8018 -9.39453 -22.5625zM219.562 250.567l73.8252 73.8223 +l-68.918 68.8994l-73.8096 -73.8066zM457.305 160.461l-68.9023 68.916l-73.8242 -73.8232l68.918 -68.8994z" /> +c-0.6875 2.60938 -1.59375 5.00098 -1.59375 7.81348c0 17.6631 14.3398 32.0039 32.0039 32.0039c17.6631 0 32.0039 -14.3408 32.0039 -32.0039c0 -17.6641 -14.3408 -32.0039 -32.0039 -32.0039c-2.79785 0 -5.2041 0.890625 -7.79785 1.59375l-27.4102 -27.4102z +M511.976 144.933c0.0175781 -0.301758 0.0253906 -0.605469 0.0253906 -0.912109c0 -8.86133 -7.1748 -16.0488 -16.0273 -16.0898h-32.1133c-8.46289 0.0244141 -15.3867 6.65918 -15.8926 15.002c-7.50098 129.519 -111.515 234.533 -240.937 241.534 +c-8.34863 0.444336 -14.9902 7.36426 -14.9902 15.8223c0 0.0292969 -0.0126953 0.0566406 -0.0117188 0.0859375v31.5986c0.0361328 8.85156 7.2334 16.0264 16.0938 16.0264c0.308594 0 0.603516 -0.00683594 0.908203 -0.0244141 +c163.224 -8.59473 294.443 -139.816 302.944 -303.043zM415.964 145.229c0.0244141 -0.364258 0.0371094 -0.732422 0.0371094 -1.10254c0 -8.92578 -7.23145 -16.1621 -16.1484 -16.1963h-32.208c-8.34961 0.0605469 -15.1953 6.51953 -15.8926 14.7051 +c-6.90625 77.0107 -68.1172 138.91 -144.924 145.224c-8.25781 0.592773 -14.7959 7.48633 -14.7988 15.8926v32.1143v0.00390625c0 8.9043 7.22949 16.1338 16.1338 16.1338c0.396484 0 0.775391 -0.0136719 1.16504 -0.0419922 +c110.123 -8.50098 198.229 -96.6074 206.636 -206.732z" /> +c0 54.4004 41.5996 96 96 96h326.4c16 0 25.5996 -9.59961 25.5996 -25.5996v-332.801zM144 280v-48c0 -4.41504 3.58496 -8 8 -8h56v-56c0 -4.41504 3.58496 -8 8 -8h48c4.41504 0 8 3.58496 8 8v56h56c4.41504 0 8 3.58496 8 8v48c0 4.41504 -3.58496 8 -8 8h-56v56 +c0 4.41504 -3.58496 8 -8 8h-48c-4.41504 0 -8 -3.58496 -8 -8v-56h-56c-4.41504 0 -8 -3.58496 -8 -8zM380.8 0v64h-284.8c-16 0 -32 -12.7998 -32 -32s12.7998 -32 32 -32h284.8z" /> +d="M0 160h512v-160c0 -17.6611 -14.3389 -32 -32 -32h-448c-17.6611 0 -32 14.3389 -32 32v160zM299.83 416c118.17 -6.2002 212.17 -104.11 212.17 -224h-512l278.7 217c5.47656 4.38477 12.4277 7.02051 19.9814 7.02051 +c0.384766 0 0.767578 -0.00683594 1.14844 -0.0205078z" /> +d="M288 333l218.74 -192.9c1.54004 -1.37988 3.55957 -2.04004 5.25977 -3.19922v-184.9c0 -8.83105 -7.16895 -16 -16 -16h-416c-8.83105 0 -16 7.16895 -16 16v184.94c1.78027 1.20996 3.84961 1.88965 5.46973 3.34961zM384 72v48c0 4.41504 -3.58496 8 -8 8h-56v56 +c0 4.41504 -3.58496 8 -8 8h-48c-4.41504 0 -8 -3.58496 -8 -8v-56h-56c-4.41504 0 -8 -3.58496 -8 -8v-48c0 -4.41504 3.58496 -8 8 -8h56v-56c0 -4.41504 3.58496 -8 8 -8h48c4.41504 0 8 3.58496 8 8v56h56c4.41504 0 8 3.58496 8 8zM570.69 211.72 +c3.2627 -2.92969 5.30762 -7.18555 5.30762 -11.9121c0 -4.10156 -1.54688 -7.84473 -4.08789 -10.6777l-21.4004 -23.8203c-2.92969 -3.2627 -7.18457 -5.30762 -11.9111 -5.30762c-4.10742 0 -7.85449 1.55078 -10.6885 4.09766l-229.32 202.271 +c-2.82031 2.48828 -6.53906 3.99902 -10.5928 3.99902c-4.05273 0 -7.75684 -1.51074 -10.5771 -3.99902l-229.32 -202.28c-2.83398 -2.54688 -6.58594 -4.10645 -10.6924 -4.10645c-4.72656 0 -8.97754 2.05371 -11.9072 5.31641l-21.4102 23.8203 +c-2.54688 2.83398 -4.10645 6.58594 -4.10645 10.6934c0 4.72559 2.05371 8.97656 5.31641 11.9062l256 226c7.06934 6.3916 16.4707 10.2852 26.7412 10.2852c10.2715 0 19.6396 -3.89355 26.709 -10.2852z" /> +d="M256 416c141.39 0 256 -93.1201 256 -208s-114.61 -208 -256 -208c-0.161133 0 -0.446289 0.107422 -0.606445 0.107422c-37.5674 0 -73.5547 6.81445 -106.794 19.2725c-24.5996 -19.6299 -74.3398 -51.3799 -140.6 -51.3799 +c-4.41113 0.00488281 -7.99023 3.58984 -7.99023 8.00195c0 2.12891 0.833008 4.06445 2.19043 5.49805c0.5 0.5 42.2598 45.4502 54.7998 95.7598c-35.5898 35.7402 -57 81.1807 -57 130.74c0 114.88 114.62 208 256 208zM352 184v48c0 4.41504 -3.58496 8 -8 8h-56v56 +c0 4.41504 -3.58496 8 -8 8h-48c-4.41504 0 -8 -3.58496 -8 -8v-56h-56c-4.41504 0 -8 -3.58496 -8 -8v-48c0 -4.41504 3.58496 -8 8 -8h56v-56c0 -4.41504 3.58496 -8 8 -8h48c4.41504 0 8 3.58496 8 8v56h56c4.41504 0 8 3.58496 8 8z" /> +d="M507.31 262.29c2.87109 -2.89258 4.64551 -6.87891 4.64551 -11.2725c0 -4.42285 -1.79883 -8.42969 -4.70508 -11.3271l-22.6201 -22.6309c-2.89648 -2.89648 -6.90137 -4.68945 -11.3174 -4.68945s-8.41602 1.79297 -11.3125 4.68945l-181 181 +c-2.89648 2.89648 -4.68945 6.90137 -4.68945 11.3174s1.79297 8.41699 4.68945 11.3135l22.6904 22.5996c2.89551 2.89355 6.89844 4.68457 11.3115 4.68457c4.41406 0 8.41211 -1.79102 11.3076 -4.68457zM327.77 195.88l55.1006 55.1201l45.25 -45.2695l-109.68 -109.681 +c-12.4922 -12.4961 -28.4805 -21.5479 -46.29 -25.6494l-120.25 -27.75l-102 -102c-2.89648 -2.89746 -6.90137 -4.69043 -11.3174 -4.69043s-8.41699 1.79297 -11.3135 4.69043l-22.6191 22.6191c-2.89746 2.89648 -4.69043 6.90137 -4.69043 11.3174 +s1.79297 8.41699 4.69043 11.3135l102 102l27.7393 120.26c4.11816 17.8066 13.1738 33.7939 25.6699 46.29l109.671 109.67l45.25 -45.25l-55.1006 -55.1006zM273.2 141.31l9.30957 9.31055l-67.8896 67.8896l-9.31055 -9.30957 +c-4.16113 -4.17676 -7.17969 -9.51074 -8.55957 -15.4502l-18.2998 -79.2998l79.2998 18.3193c5.94238 1.36328 11.2783 4.37695 15.4502 8.54004z" /> +c20.6602 -1.62012 40.9404 5.59961 54.2002 19.3096l46.0898 47.7207c33.4297 34.5098 98.4199 21.1494 110 -22.6201l16 -60.4502c4.60059 -17.3906 18.8604 -31.71 38.1406 -38.3105zM160 192c17.6611 0 32 14.3389 32 32s-14.3389 32 -32 32s-32 -14.3389 -32 -32 +s14.3389 -32 32 -32zM288 96c17.6611 0 32 14.3389 32 32s-14.3389 32 -32 32s-32 -14.3389 -32 -32s14.3389 -32 32 -32zM304 224c8.83105 0 16 7.16895 16 16s-7.16895 16 -16 16s-16 -7.16895 -16 -16s7.16895 -16 16 -16z" /> +d="M464 192c26.4922 0 48 -21.5078 48 -48s-21.5078 -48 -48 -48h-416c-26.4922 0 -48 21.5078 -48 48s21.5078 48 48 48h416zM480 64c8.83105 0 16 -7.16895 16 -16v-16c0 -35.3223 -28.6777 -64 -64 -64h-352c-35.3223 0 -64 28.6777 -64 64v16 +c0 8.83105 7.16895 16 16 16h448zM58.6396 224c-34.5693 0 -54.6396 43.9102 -34.8193 75.8896c40.1797 64.9102 128.64 116.011 232.18 116.11c103.55 -0.0996094 192 -51.2002 232.18 -116.12c19.8008 -31.9795 -0.25 -75.8799 -34.8193 -75.8799h-394.721zM384 336 +c-8.83105 0 -16 -7.16895 -16 -16s7.16895 -16 16 -16s16 7.16895 16 16s-7.16895 16 -16 16zM256 368c-8.83105 0 -16 -7.16895 -16 -16s7.16895 -16 16 -16s16 7.16895 16 16s-7.16895 16 -16 16zM128 336c-8.83105 0 -16 -7.16895 -16 -16s7.16895 -16 16 -16 +s16 7.16895 16 16s-7.16895 16 -16 16z" /> +d="M479.93 130.88l0.0703125 -82.8799c0 -61.7979 -50.1592 -111.973 -111.95 -112h-215c-30.9053 0.00292969 -58.9189 12.5361 -79.1895 32.8096l-30.9307 30.9307c-6.75488 6.75391 -10.9297 16.0928 -10.9297 26.3896v73.4697 +c0 14.6221 8.38574 27.2734 20.6396 33.4004l27.3604 15v-76c0 -4.41504 3.58496 -8 8 -8s8 3.58496 8 8v147.04c0 15.2598 12.8701 28.3799 30.8701 31.3799l30.6797 5.12012c17.8203 2.96973 34.4502 -8.38965 34.4502 -23.54v-32c0 -4.41504 3.58496 -8 8 -8 +s8 3.58496 8 8v200c0 0.0078125 -0.0244141 0.015625 -0.0244141 0.0234375c0 26.4912 21.5078 48 48 48c0.50293 0 1.00488 -0.0078125 1.50488 -0.0234375c26.2695 -0.799805 46.5195 -23.7197 46.5195 -50v-198c0 -4.41504 3.58496 -8 8 -8s8 3.58496 8 8v32 +c0 15.1396 16.6299 26.5 34.4502 23.5303l38.3994 -6.40039c13.46 -2.25 23.1504 -12.0996 23.1504 -23.54v-49.5898l35.6504 -8.92969c16.2188 -4.05371 28.2676 -18.7256 28.2793 -36.1904z" /> +d="M480 160v-64h-448v64c0 80.25 49.2803 148.92 119.19 177.62l40.8096 -81.6201v112c0 8.83105 7.16895 16 16 16h96c8.83105 0 16 -7.16895 16 -16v-112l40.8096 81.6201c69.9102 -28.7002 119.19 -97.3701 119.19 -177.62zM496 64c8.83105 0 16 -7.16895 16 -16v-32 +c0 -8.83105 -7.16895 -16 -16 -16h-480c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h480z" /> +d="M480 128c-52.9834 0 -96 43.0166 -96 96s43.0166 96 96 96s96 -43.0166 96 -96s-43.0166 -96 -96 -96zM528 96c61.8145 0 112.002 -50.1738 112.002 -111.988c0 -0.210938 -0.000976562 -0.420898 -0.00195312 -0.631836 +c-0.139648 -26.2598 -21.7305 -47.3799 -48 -47.3799h-224c-26.2695 0 -47.8604 21.1201 -48 47.3799c-0.000976562 0.210938 0 0.40918 0 0.620117c0 61.8145 50.1855 112 112 112c0.0273438 0 0.0556641 -0.00488281 0.0830078 -0.00488281 +c2.42871 0 4.77051 -0.380859 6.9668 -1.08496c12.8193 -4.4541 26.6504 -6.87402 40.9775 -6.87402s28.0938 2.41992 40.9131 6.87402c2.19922 0.704102 4.54395 1.08984 6.97656 1.08984h0.0830078zM329.91 85.5498c-25.9033 -25.8965 -41.915 -61.665 -41.915 -101.15 +c0 -0.396484 0.00195312 -0.792969 0.00488281 -1.18945c0.166016 -17.7246 6.24512 -34.1309 16.3096 -47.21h-288.31c-8.83105 0 -16 7.16895 -16 16v368c0 17.6611 14.3389 32 32 32h32v64c0 17.6611 14.3389 32 32 32h160c17.6611 0 32 -14.3389 32 -32v-64h32 +c17.6611 0 32 -14.3389 32 -32v-216.62c-7.98633 -5.24609 -15.3037 -11.1562 -22.0898 -17.8301zM144 44v40c0 6.62305 -5.37695 12 -12 12h-40c-6.62305 0 -12 -5.37695 -12 -12v-40c0 -6.62305 5.37695 -12 12 -12h40c6.62305 0 12 5.37695 12 12zM144 172v40 +c0 6.62305 -5.37695 12 -12 12h-40c-6.62305 0 -12 -5.37695 -12 -12v-40c0 -6.62305 5.37695 -12 12 -12h40c6.62305 0 12 5.37695 12 12zM192 294v26h26c3.31152 0 6 2.68848 6 6v20c0 3.31152 -2.68848 6 -6 6h-26v26c0 3.31152 -2.68848 6 -6 6h-20 +c-3.31152 0 -6 -2.68848 -6 -6v-26h-26c-3.31152 0 -6 -2.68848 -6 -6v-20c0 -3.31152 2.68848 -6 6 -6h26v-26c0 -3.31152 2.68848 -6 6 -6h20c3.31152 0 6 2.68848 6 6zM272 44v40c0 6.62305 -5.37695 12 -12 12h-40c-6.62305 0 -12 -5.37695 -12 -12v-40 +c0 -6.62305 5.37695 -12 12 -12h40c6.62305 0 12 5.37695 12 12zM272 172v40c0 6.62305 -5.37695 12 -12 12h-40c-6.62305 0 -12 -5.37695 -12 -12v-40c0 -6.62305 5.37695 -12 12 -12h40c6.62305 0 12 5.37695 12 12z" /> +d="M368 288c26.4922 0 48 -21.5078 48 -48s-21.5078 -48 -48 -48h-288c-26.4922 0 -48 21.5078 -48 48s21.5078 48 48 48h0.94043c-0.625 5.43945 -0.93457 10.9707 -0.93457 16.5762c0 79.4756 64.5234 144 144 144c79.4756 0 144 -64.5244 144 -144 +c0 -5.60547 -0.321289 -11.1367 -0.946289 -16.5762h0.94043zM195.38 -45.6904l-99.3799 205.69h256l-99.3799 -205.69c-4.99414 -10.8223 -15.9111 -18.3398 -28.6035 -18.3398s-23.6426 7.51758 -28.6367 18.3398z" /> +d="M232 224c-4.41504 0 -8 3.58496 -8 8v48c0 4.41504 3.58496 8 8 8h56v56c0 4.41504 3.58496 8 8 8h48c4.41504 0 8 -3.58496 8 -8v-56h56c4.41504 0 8 -3.58496 8 -8v-48c0 -4.41504 -3.58496 -8 -8 -8h-56v-56c0 -4.41504 -3.58496 -8 -8 -8h-48 +c-4.41504 0 -8 3.58496 -8 8v56h-56zM576 400v-336h-512v336c0.0771484 26.4561 21.5439 47.9229 48 48h416c26.4561 -0.0771484 47.9229 -21.5439 48 -48zM512 128v256h-384v-256h384zM624 32c8.83105 0 16 -7.16895 16 -16v-16 +c-0.104492 -35.2744 -28.7256 -63.8955 -64 -64h-512c-35.2744 0.104492 -63.8955 28.7256 -64 64v16c0 8.83105 7.16895 16 16 16h239.23c-0.230469 -14.5303 14.0791 -32 32.7695 -32h60.7998c18.0303 0 32 12.1904 32.7402 32h242.46z" /> +d="M448 384c35.3223 0 64 -28.6777 64 -64v-256c0 -35.3223 -28.6777 -64 -64 -64h-384c-35.3223 0 -64 28.6777 -64 64v256c0 35.3223 28.6777 64 64 64h384zM160 80v48h-80c-8.83105 0 -16 -7.16895 -16 -16v-16c0 -8.83105 7.16895 -16 16 -16h80zM288 96v16 +c0 8.83105 -7.16895 16 -16 16h-80v-48h80c8.83105 0 16 7.16895 16 16zM448 224v64c0 17.6611 -14.3389 32 -32 32h-320c-17.6611 0 -32 -14.3389 -32 -32v-64c0 -17.6611 14.3389 -32 32 -32h320c17.6611 0 32 14.3389 32 32z" /> +d="M330.67 184.88h107.46l37.0498 -38.54c-48.5293 -87.4697 -206.54 -210.34 -419.18 -210.34c-30.9072 0 -56 25.0928 -56 56s25.0928 56 56 56c141.58 0 163.44 181.24 221.92 250.82l52.75 -24.2207v-89.7197zM461.76 313.25 +c30.8984 -28.1729 50.2402 -68.7275 50.2402 -113.795v-0.145508c0 -13.6797 -2.2998 -26.6895 -5.55957 -39.3096l-54.6807 56.8799h-89.0898v78.2402l-74.6699 34.29c22.3398 14.0498 48.3398 22.5898 76.3398 22.5898 +c20.2783 -0.0078125 39.6836 -4.32031 57.1602 -11.96c18.4502 37.2197 8.25977 61.96 1.40039 72.3203c-0.896484 1.29883 -1.42676 2.88184 -1.42676 4.57715c0 2.20117 0.884766 4.19727 2.31641 5.65234l22.9004 23c1.45117 1.47559 3.46777 2.39453 5.69922 2.39453 +c2.5166 0 4.76367 -1.16504 6.23047 -2.98438c18.5596 -23.4805 35.2998 -71.9102 3.13965 -131.75z" /> +M100.4 335.85c176.069 -1.95996 294.88 -119.25 299.149 -294.14l-379 -105.1c-1.37793 -0.381836 -2.82324 -0.59375 -4.32227 -0.59375c-8.94629 0 -16.21 7.26367 -16.21 16.21c0 1.42871 0.18457 2.81348 0.532227 4.13379zM128 32c17.6611 0 32 14.3389 32 32 +s-14.3389 32 -32 32s-32 -14.3389 -32 -32s14.3389 -32 32 -32zM176 184c17.6611 0 32 14.3389 32 32s-14.3389 32 -32 32s-32 -14.3389 -32 -32s14.3389 -32 32 -32zM280 80c17.6611 0 32 14.3389 32 32s-14.3389 32 -32 32s-32 -14.3389 -32 -32s14.3389 -32 32 -32z" /> +d="M53.2002 -19l-21.2002 339h384l-21.2002 -339c-1.57031 -25.0762 -22.4316 -44.9971 -47.8994 -45h-245.801c-25.4678 0.00292969 -46.3291 19.9238 -47.8994 45zM123.31 156.8c-10.0791 -10.6201 -2.93945 -28.7998 11.3203 -28.7998h57.3701v-112 +c0 -8.83105 7.16895 -16 16 -16h32c8.83105 0 16 7.16895 16 16v112h57.3701c14.2598 0 21.3994 18.1797 11.3203 28.7998l-89.3809 94.2598c-2.81543 3.04297 -6.83984 4.94922 -11.3086 4.94922s-8.49512 -1.90625 -11.3105 -4.94922zM432 416 +c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-416c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h120l9.40039 18.7002c3.85547 7.88574 11.9434 13.2998 21.3066 13.2998h0.0927734h114.3 +c0.00585938 0 -0.00195312 0.0234375 0.00390625 0.0234375c9.41113 0 17.5645 -5.42871 21.4961 -13.3232l9.40039 -18.7002h120z" /> +d="M32 -16v336h384v-336c0 -26.4922 -21.5078 -48 -48 -48h-288c-26.4922 0 -48 21.5078 -48 48zM123.31 156.8c-10.0791 -10.6201 -2.93945 -28.7998 11.3203 -28.7998h57.3701v-112c0 -8.83105 7.16895 -16 16 -16h32c8.83105 0 16 7.16895 16 16v112h57.3701 +c14.2598 0 21.3994 18.1797 11.3203 28.7998l-89.3809 94.2598c-2.81543 3.04297 -6.83984 4.94922 -11.3086 4.94922s-8.49512 -1.90625 -11.3105 -4.94922zM432 416c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-416 +c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h120l9.40039 18.7002c3.85547 7.88574 11.9434 13.2998 21.3066 13.2998h0.0927734h114.3c0.00585938 0 -0.00195312 0.0234375 0.00390625 0.0234375c9.41113 0 17.5645 -5.42871 21.4961 -13.3232 +l9.40039 -18.7002h120z" /> +d="M319.41 128c71.4902 -3.09961 128.59 -61.5996 128.59 -133.79c0 -32.127 -26.083 -58.21 -58.21 -58.21h-331.58c-32.127 0 -58.21 26.083 -58.21 58.21c0 72.1904 57.0996 130.69 128.59 133.79l95.4102 -95.3896zM224 144c-70.6455 0 -128 57.3545 -128 128v110.18 +c0 13.7119 8.62988 25.4092 20.7598 29.96l84.7705 31.79c6.98438 2.61914 14.6035 4.05176 22.498 4.05176s15.457 -1.43262 22.4414 -4.05176l84.7705 -31.75c12.1309 -4.55078 20.7598 -16.248 20.7598 -29.96v-0.0400391v-110.18c0 -70.6455 -57.3545 -128 -128 -128z +M184 376.33v-16.6602c0 -2.75977 2.24023 -5 5 -5h21.6699v-21.6699c0 -2.75977 2.24023 -5 5 -5h16.6602c2.75977 0 5 2.24023 5 5v21.6699h21.6699c2.75977 0 5 2.24023 5 5v16.6602c0 2.75977 -2.24023 5 -5 5h-21.6699v21.6699c0 2.75977 -2.24023 5 -5 5h-16.6602 +c-2.75977 0 -5 -2.24023 -5 -5v-21.6699h-21.6699c-2.75977 0 -5 -2.24023 -5 -5zM144 288v-16c0 -44.1533 35.8467 -80 80 -80s80 35.8467 80 80v16h-160z" /> +d="M476 -32h-152c-19.8691 0 -36 16.1309 -36 36v348h-96v-156c0 -19.8691 -16.1309 -36 -36 -36h-140c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h112v156c0 19.8691 16.1309 36 36 36h152c19.8691 0 36 -16.1309 36 -36v-348h96v156 +c0 19.8691 16.1309 36 36 36h140c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-112v-156c0 -19.8691 -16.1309 -36 -36 -36z" /> +d="M400 352c-26.4922 0 -48 21.5078 -48 48s21.5078 48 48 48s48 -21.5078 48 -48s-21.5078 -48 -48 -48zM396 231l-41.3604 33.1104l-58.25 -49.9199l41.3604 -27.5703c8.60547 -5.7373 14.248 -15.5117 14.25 -26.6201v-128c0 -17.6611 -14.3389 -32 -32 -32 +s-32 14.3389 -32 32v110.88l-81.7305 54.5205c-8.60742 5.7373 -14.2686 15.5068 -14.2686 26.6191c0 9.71777 4.3418 18.4297 11.1895 24.3008l112 96c5.58887 4.80176 12.8965 7.70117 20.8359 7.70117c7.55566 0 14.502 -2.62891 19.9736 -7.02148l71.2197 -57h52.7803 +c17.6611 0 32 -14.3389 32 -32s-14.3389 -32 -32 -32h-64c-0.0205078 0 -0.0625 0.0117188 -0.0830078 0.0117188c-7.53125 0 -14.457 2.61621 -19.917 6.98828zM512 192c70.6455 0 128 -57.3545 128 -128s-57.3545 -128 -128 -128s-128 57.3545 -128 128 +s57.3545 128 128 128zM512 0c35.3223 0 64 28.6777 64 64s-28.6777 64 -64 64s-64 -28.6777 -64 -64s28.6777 -64 64 -64zM128 192c70.6455 0 128 -57.3545 128 -128s-57.3545 -128 -128 -128s-128 57.3545 -128 128s57.3545 128 128 128zM128 0c35.3223 0 64 28.6777 64 64 +s-28.6777 64 -64 64s-64 -28.6777 -64 -64s28.6777 -64 64 -64z" /> +d="M240 224c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-32c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h32zM336 224c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-32c-8.83105 0 -16 7.16895 -16 16v32 +c0 8.83105 7.16895 16 16 16h32zM432 224c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-32c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h32zM144 224c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-32 +c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h32zM240 32c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-32c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h32zM336 32c8.83105 0 16 -7.16895 16 -16v-32 +c0 -8.83105 -7.16895 -16 -16 -16h-32c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h32zM432 32c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-32c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h32zM432 128 +c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-32c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h32zM432 320c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-32c-8.83105 0 -16 7.16895 -16 16v32 +c0 8.83105 7.16895 16 16 16h32zM240 128c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-32c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h32zM240 320c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-32 +c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h32zM144 32c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-32c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h32zM240 416c8.83105 0 16 -7.16895 16 -16v-32 +c0 -8.83105 -7.16895 -16 -16 -16h-32c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h32zM336 416c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-32c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h32zM432 416 +c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-32c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h32zM48 224c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-32c-8.83105 0 -16 7.16895 -16 16v32 +c0 8.83105 7.16895 16 16 16h32zM48 32c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-32c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h32zM48 128c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-32 +c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h32zM48 320c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-32c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h32zM48 416c8.83105 0 16 -7.16895 16 -16v-32 +c0 -8.83105 -7.16895 -16 -16 -16h-32c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h32zM144 416c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-32c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h32z" /> +d="M240 32c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-32c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h32zM144 32c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-32c-8.83105 0 -16 7.16895 -16 16v32 +c0 8.83105 7.16895 16 16 16h32zM336 32c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-32c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h32zM432 224c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-32 +c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h32zM432 128c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-32c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h32zM432 32c8.83105 0 16 -7.16895 16 -16v-32 +c0 -8.83105 -7.16895 -16 -16 -16h-32c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h32zM432 320c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-32c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h32zM432 416 +c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-368v-368c0 -8.83105 -7.16895 -16 -16 -16h-32c-8.83105 0 -16 7.16895 -16 16v400c0 17.6611 14.3389 32 32 32h400z" /> +c-8.34082 22.9707 -12.8604 48.9707 -12.8604 77.0605c0 81.79 61.6299 149.3 141.33 159.3c10.4795 1.30957 19.6699 -7.17969 18.5898 -17.6201l-12.4102 -123.11c22.9707 8.34082 48.9707 12.8604 77.0605 12.8604zM256 160c17.6611 0 32 14.3389 32 32 +s-14.3389 32 -32 32s-32 -14.3389 -32 -32s14.3389 -32 32 -32z" /> +l-96.75 -99.8301c-2.85449 -2.98242 -6.875 -4.83984 -11.3252 -4.83984s-8.46973 1.85742 -11.3242 4.83984zM260.57 128.16c15.1406 -0.0107422 27.4297 -12.3066 27.4297 -27.4502v-0.00976562v-137.25c0 -15.1436 -12.2891 -27.4395 -27.4297 -27.4502h-233.141 +c-15.1396 0.00585938 -27.4297 12.2988 -27.4297 27.4395v0.0107422v137.25v0.00976562c0 15.1504 12.2998 27.4502 27.4502 27.4502h0.00976562h48l7 14.2402c3.89258 10.3887 13.9082 17.7793 25.6484 17.7793h0.0117188h71.71 +c0.00390625 0 -0.00195312 0.0126953 0.000976562 0.0126953c11.7412 0 21.7666 -7.40332 25.6592 -17.792l7.08008 -14.2402h48zM144 -20c28.6992 0 52 23.3008 52 52s-23.3008 52 -52 52s-52 -23.3008 -52 -52s23.3008 -52 52 -52zM499.4 95.9004 +c9.70996 0 15.75 -8.79004 10.8691 -15.7002l-92.3994 -138.91c-2.42188 -3.19824 -6.24805 -5.25488 -10.5654 -5.25488c-0.118164 0 -0.236328 0.00195312 -0.354492 0.00488281c-8.03027 0 -14.1201 6.25 -12.2305 12.9004l24.2002 83h-62.3096 +c-7.62012 0 -13.5 5.58984 -12.5 11.8896l16.7998 106.93c0.839844 5.2002 6.2002 9.10059 12.5 9.10059h75.5898c8.25 0 14.2803 -6.56055 12.1797 -13.21l-22.3594 -50.75h60.5801zM478.08 447.67c17.9199 2.75 33.9199 -12.1895 33.9199 -31.6699v-144.26 +c-0.269531 -26.3398 -28.7998 -47.6602 -64 -47.6602c-35.3496 0 -64 21.4795 -64 48c0 26.5195 28.6504 48 64 48c5.49219 -0.0498047 10.8096 -0.633789 16 -1.7002v47.1797l-112 -17.2197v-108.58c-0.269531 -26.3398 -28.7998 -47.6602 -64 -47.6602 +c-35.3496 0 -64 21.4805 -64 48c0 26.5205 28.6504 48 64 48c5.49219 -0.0498047 10.8096 -0.632812 16 -1.69922v106.77c0 15.9102 10.8701 29.4102 25.5098 31.6602z" /> +d="M497.39 86.2002c8.60059 -3.74121 14.6006 -12.2891 14.6006 -22.2588c0 -1.83496 -0.204102 -3.62305 -0.589844 -5.3418l-24 -104c-2.45801 -10.6416 -12 -18.5996 -23.3848 -18.5996h-0.015625c-256.1 0 -464 207.5 -464 464l0.0136719 0.00390625 +c0 11.3848 7.94434 20.9287 18.5859 23.3857l104 24c1.72754 0.392578 3.49805 0.619141 5.34375 0.619141c9.9082 0 18.4307 -5.97656 22.1562 -14.5186l48 -112c1.23828 -2.88965 1.95117 -6.0791 1.95117 -9.41895c0 -7.49512 -3.45215 -14.1904 -8.85059 -18.5811 +l-60.6006 -49.6006c36.7334 -77.9072 99.2822 -140.457 177.19 -177.189l49.5996 60.5996c4.40332 5.39258 11.1113 8.81055 18.6084 8.81055c3.33203 0 6.50684 -0.680664 9.3916 -1.91016z" /> +d="M400 416c26.4922 0 48 -21.5078 48 -48v-352c0 -26.4922 -21.5078 -48 -48 -48h-352c-26.4922 0 -48 21.5078 -48 48v352c0 26.4922 21.5078 48 48 48h352zM383.61 108.63c0.235352 1.09082 0.369141 2.21387 0.389648 3.37012 +c-0.301758 6.06445 -3.91992 11.2607 -9.08984 13.79l-70 30c-1.83594 0.71582 -3.83789 1.14355 -5.91016 1.20996c-4.58496 -0.251953 -8.69922 -2.31836 -11.6104 -5.5l-31 -37.8896c-48.7002 22.9775 -87.8018 62.0791 -110.779 110.779l37.8896 31 +c3.18164 2.91113 5.24805 7.02539 5.5 11.6104c-0.0673828 2.07129 -0.495117 4.07324 -1.20996 5.91016l-30 70c-2.53223 5.16797 -7.72754 8.78418 -13.79 9.08984c-1.15527 -0.0253906 -2.27734 -0.15918 -3.37012 -0.389648l-65 -15 +c-6.52246 -1.74707 -11.3818 -7.59961 -11.6299 -14.6104c0 -160.29 130 -290 290 -290c7.11426 0.00292969 13.0762 4.97852 14.6104 11.6299z" /> +d="M608 448c17.6611 0 32 -14.3389 32 -32v-320c0 -17.6611 -14.3389 -32 -32 -32h-128v320h-192v-64h-160v96c0 17.6611 14.3389 32 32 32h448zM232 345v30c0 4.9668 -4.0332 9 -9 9h-30c-4.9668 0 -9 -4.0332 -9 -9v-30c0 -4.9668 4.0332 -9 9 -9h30 +c4.9668 0 9 4.0332 9 9zM584 137v30c0 4.9668 -4.0332 9 -9 9h-30c-4.9668 0 -9 -4.0332 -9 -9v-30c0 -4.9668 4.0332 -9 9 -9h30c4.9668 0 9 4.0332 9 9zM584 241v30c0 4.9668 -4.0332 9 -9 9h-30c-4.9668 0 -9 -4.0332 -9 -9v-30c0 -4.9668 4.0332 -9 9 -9h30 +c4.9668 0 9 4.0332 9 9zM584 345v30c0 4.9668 -4.0332 9 -9 9h-30c-4.9668 0 -9 -4.0332 -9 -9v-30c0 -4.9668 4.0332 -9 9 -9h30c4.9668 0 9 4.0332 9 9zM416 288c17.6611 0 32 -14.3389 32 -32v-288c0 -17.6611 -14.3389 -32 -32 -32h-384c-17.6611 0 -32 14.3389 -32 32 +v288c0 17.6611 14.3389 32 32 32h384zM96 224c-17.6611 0 -32 -14.3389 -32 -32s14.3389 -32 32 -32s32 14.3389 32 32s-14.3389 32 -32 32zM384 0v96l-96 96l-128 -128l-32 32l-64 -64v-32h320z" /> +d="M336 32c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-128c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h32.4902l26.5098 79.5996l67.0898 -51.8301l-9.25977 -27.7695h11.1699zM633.82 -10.0996 +c3.76855 -2.92871 6.17676 -7.50977 6.17676 -12.6475c0 -3.69238 -1.25293 -7.09375 -3.35742 -9.80273l-19.6396 -25.2705c-2.92871 -3.76855 -7.50879 -6.17578 -12.6465 -6.17578c-3.69727 0 -7.10254 1.25684 -9.81348 3.36621l-588.36 454.72 +c-3.76562 2.92871 -6.1709 7.50781 -6.1709 12.6426c0 3.69434 1.25488 7.09766 3.36133 9.80762l19.6299 25.2695c2.92871 3.76855 7.50879 6.17676 12.6465 6.17676c3.69727 0 7.10254 -1.25684 9.81348 -3.36621l114.54 -88.5205v43.9004c0 8.83105 7.16895 16 16 16h416 +c8.83105 0 16 -7.16895 16 -16v-96c0 -8.83105 -7.16895 -16 -16 -16h-32c-8.83105 0 -16 7.16895 -16 16v32h-117.83l-49.1699 -147.59zM309.91 240.24l31.9199 95.7598h-117.83v-29.3604z" /> +d="M176 96c14.2197 0 21.3496 -17.2598 11.3301 -27.3096l-80 -96c-2.89551 -2.89453 -6.89844 -4.68555 -11.3125 -4.68555c-4.41309 0 -8.41211 1.79102 -11.3076 4.68555l-80 96c-10.0703 10.0693 -2.90039 27.3096 11.29 27.3096h48v304c0 8.83105 7.16895 16 16 16h32 +c8.83105 0 16 -7.16895 16 -16v-304h48zM288 224c-8.83105 0 -16 7.16895 -16 16v17.6299c0 9.51074 4.14355 18.0566 10.7402 23.9199l61.2598 70.4502h-56c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h128c8.83105 0 16 -7.16895 16 -16v-17.6299 +c0 -9.51074 -4.14355 -18.0566 -10.7402 -23.9199l-61.2598 -70.4502h56c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-128zM447.06 -10.6201c0.600586 -1.67969 0.931641 -3.49512 0.931641 -5.37988c0 -8.82812 -7.16406 -15.9951 -15.9912 -16 +h-24.8398c-0.015625 0 -0.0263672 -0.00195312 -0.0419922 -0.00195312c-7.11426 0 -13.1514 4.6543 -15.2285 11.082l-4.40918 12.9199h-71l-4.4209 -12.9199c-2.07617 -6.42773 -8.10938 -11.0801 -15.2246 -11.0801h-0.00488281h-24.8301 +c-8.82715 0.00488281 -15.9863 7.17773 -15.9863 16.0049c0 1.88574 0.326172 3.69531 0.926758 5.375l59.2695 160c2.20996 6.19043 8.125 10.6201 15.0703 10.6201h41.4395c6.94531 0 12.8604 -4.42969 15.0703 -10.6201zM335.61 48h32.7793l-16.3896 48z" /> +d="M16 288c-14.2197 0 -21.3496 17.2598 -11.3096 27.3096l80 96c2.89551 2.89453 6.89844 4.68555 11.3115 4.68555c4.41406 0 8.41211 -1.79102 11.3076 -4.68555l80 -96c10.0703 -10.0693 2.90039 -27.3096 -11.3096 -27.3096h-48v-304c0 -8.83105 -7.16895 -16 -16 -16 +h-32c-8.83105 0 -16 7.16895 -16 16v304h-48zM288 224c-8.83105 0 -16 7.16895 -16 16v17.6299c0 9.51074 4.14355 18.0566 10.7402 23.9199l61.2598 70.4502h-56c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h128c8.83105 0 16 -7.16895 16 -16v-17.6299 +c0 -9.51074 -4.14355 -18.0566 -10.7402 -23.9199l-61.2598 -70.4502h56c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-128zM447.06 -10.6201c0.600586 -1.67969 0.931641 -3.49512 0.931641 -5.37988c0 -8.82812 -7.16406 -15.9951 -15.9912 -16 +h-24.8398c-0.015625 0 -0.0263672 -0.00195312 -0.0419922 -0.00195312c-7.11426 0 -13.1514 4.6543 -15.2285 11.082l-4.40918 12.9199h-71l-4.4209 -12.9199c-2.07617 -6.42773 -8.10938 -11.0801 -15.2246 -11.0801h-0.00488281h-24.8301 +c-8.82715 0.00488281 -15.9863 7.17773 -15.9863 16.0049c0 1.88574 0.326172 3.69531 0.926758 5.375l59.2695 160c2.20996 6.19043 8.125 10.6201 15.0703 10.6201h41.4395c6.94531 0 12.8604 -4.42969 15.0703 -10.6201zM335.61 48h32.7793l-16.3896 48z" /> +d="M240 352c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h64c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-64zM240 224c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h128c8.83105 0 16 -7.16895 16 -16v-32 +c0 -8.83105 -7.16895 -16 -16 -16h-128zM496 32c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-256c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h256zM240 96c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h192 +c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-192zM176 96c14.2197 0 21.3496 -17.2598 11.3301 -27.3096l-80 -96c-2.89551 -2.89453 -6.89844 -4.68555 -11.3125 -4.68555c-4.41309 0 -8.41211 1.79102 -11.3076 4.68555l-80 96 +c-10.0801 10.0693 -2.90039 27.3096 11.29 27.3096h48v304c0 8.83105 7.16895 16 16 16h32c8.83105 0 16 -7.16895 16 -16v-304h48z" /> +d="M240 352c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h64c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-64zM240 224c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h128c8.83105 0 16 -7.16895 16 -16v-32 +c0 -8.83105 -7.16895 -16 -16 -16h-128zM496 32c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-256c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h256zM240 96c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h192 +c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-192zM16 288c-14.2197 0 -21.3496 17.2598 -11.3096 27.3096l80 96c2.89551 2.89453 6.89844 4.68555 11.3115 4.68555c4.41406 0 8.41211 -1.79102 11.3076 -4.68555l80 -96 +c10.0801 -10.0693 2.90039 -27.3096 -11.3096 -27.3096h-48v-304c0 -8.83105 -7.16895 -16 -16 -16h-32c-8.83105 0 -16 7.16895 -16 16v304h-48z" /> +d="M176 96c14.2197 0 21.3496 -17.2598 11.3301 -27.3096l-80 -96c-2.89551 -2.89453 -6.89844 -4.68555 -11.3125 -4.68555c-4.41309 0 -8.41211 1.79102 -11.3076 4.68555l-80 96c-10.0703 10.0693 -2.90039 27.3096 11.29 27.3096h48v304c0 8.83105 7.16895 16 16 16h32 +c8.83105 0 16 -7.16895 16 -16v-304h48zM400 32c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-96c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h16v64h-16c-8.82422 0.0078125 -15.9775 7.18945 -15.9775 16.0156 +c0 2.57129 0.608398 5.00098 1.6875 7.1543l16 32c2.62598 5.23926 8.03613 8.8252 14.29 8.83008h48c8.83105 0 16 -7.16895 16 -16v-112h16zM330.17 413.09c53.4502 14.25 101.83 -25.8799 101.85 -77.0898v-10.7695c0 -70.3906 -28.25 -107.23 -86.25 -132 +c-8.36914 -3.58008 -18.0293 1.2793 -20.8994 9.90918l-9.90039 20c-2.62012 7.87012 0.610352 16.9404 8.18066 20.3408c7.59961 3.28516 14.6064 7.64258 20.8496 12.9092c-47.6396 4.76074 -83.0996 51.4805 -68.8301 102.53c7.62891 26.2793 28.5596 46.9287 55 54.1699 +zM352 316c11.0381 0 20 8.96191 20 20s-8.96191 20 -20 20s-20 -8.96191 -20 -20s8.96191 -20 20 -20z" /> +d="M107.31 411.31l80 -96c10.0703 -10.0693 2.90039 -27.3096 -11.3096 -27.3096h-48v-304c0 -8.83105 -7.16895 -16 -16 -16h-32c-8.83105 0 -16 7.16895 -16 16v304h-48c-14.2197 0 -21.3496 17.2598 -11.3096 27.3096l80 96 +c2.89551 2.89453 6.89844 4.68555 11.3115 4.68555c4.41406 0 8.41211 -1.79102 11.3076 -4.68555zM400 32c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-96c-8.83105 0 -16 7.16895 -16 16v32c0 8.83105 7.16895 16 16 16h16v64h-16 +c-8.82422 0.0078125 -15.9775 7.18945 -15.9775 16.0156c0 2.57129 0.608398 5.00098 1.6875 7.1543l16 32c2.62598 5.23926 8.03613 8.8252 14.29 8.83008h48c8.83105 0 16 -7.16895 16 -16v-112h16zM330.17 413.09c53.4502 14.25 101.83 -25.8799 101.85 -77.0898 +v-10.7695c0 -70.3906 -28.25 -107.23 -86.25 -132c-8.36914 -3.58008 -18.0293 1.2793 -20.8994 9.90918l-9.90039 20c-2.62012 7.87012 0.610352 16.9404 8.18066 20.3408c7.59961 3.28516 14.6064 7.64258 20.8496 12.9092 +c-47.6396 4.76074 -83.0996 51.4805 -68.8301 102.53c7.62891 26.2793 28.5596 46.9287 55 54.1699zM352 316c11.0381 0 20 8.96191 20 20s-8.96191 20 -20 20s-20 -8.96191 -20 -20s8.96191 -20 20 -20z" /> +d="M272 192c-8.83105 0 -16 7.16895 -16 16v224c0 8.83105 7.16895 16 16 16h75c42.2998 0 80.9004 -30.5703 84.6699 -72.6797c0.225586 -2.44238 0.289062 -4.91895 0.289062 -7.41895c0 -13.5479 -3.38281 -26.3115 -9.34863 -37.4912 +c15.6377 -14.5762 25.3984 -35.2832 25.3984 -58.3262c0 -1.59277 -0.046875 -3.1748 -0.138672 -4.74414c-2.50977 -43.1396 -41.3105 -75.3398 -84.5098 -75.3398h-91.3604zM312 392v-48h40c13.2461 0 24 10.7539 24 24s-10.7539 24 -24 24h-40zM312 296v-48h56 +c13.2461 0 24 10.7539 24 24s-10.7539 24 -24 24h-56zM155.12 425.75l68.2998 -213.48c0.376953 -1.36035 0.580078 -2.79004 0.580078 -4.26953c0 -8.83105 -7.16895 -16 -16 -16h-24.9297c-7.35059 0 -13.5488 4.97168 -15.4199 11.7305l-11.9404 36.2695h-87.4199 +l-11.9404 -36.2695c-1.87109 -6.75879 -8.06934 -11.7305 -15.4199 -11.7305h-24.9297c-8.82617 0.00488281 -15.9883 7.16895 -15.9883 15.9961c0 1.47949 0.201172 2.91309 0.578125 4.27344l68.29 213.48c4.12695 12.9004 16.2168 22.25 30.4805 22.25h25.2793 +c14.2637 0 26.3535 -9.34961 30.4805 -22.25zM89.3701 304h45.2598l-22.6299 68.7002zM571.37 171.52c2.8916 -2.89453 4.65918 -6.89648 4.65918 -11.3066c0 -4.40137 -1.78027 -8.38867 -4.65918 -11.2832l-208 -208.21 +c-2.88086 -2.91406 -6.88379 -4.7207 -11.3018 -4.7207s-8.41699 1.80664 -11.2988 4.7207l-112 112.21c-2.88477 2.89453 -4.66895 6.8916 -4.66895 11.2979c0 4.40527 1.78418 8.39746 4.66895 11.292l45.3008 45.3008c2.87891 2.91309 6.87988 4.71973 11.2969 4.71973 +c4.41602 0 8.41309 -1.80664 11.293 -4.71973l55.4102 -55.5l151.5 151.5c2.87891 2.91309 6.87988 4.71973 11.2969 4.71973c4.41602 0 8.41309 -1.80664 11.293 -4.71973z" /> +d="M496 320c79.4756 0 144 -64.5244 144 -144s-64.5244 -144 -144 -144h-352c-79.4727 0.00390625 -144.079 64.3818 -144.079 143.854c0 79.4766 64.5244 144 144 144c79.4766 0 144 -64.5234 144 -144c0 -29.5293 -8.90723 -56.9961 -24.1807 -79.8545h112.52 +c-15.2734 22.8584 -24.2598 50.4697 -24.2598 80c0 79.4756 64.5244 144 144 144zM64 176c0 -44.1533 35.8467 -80 80 -80s80 35.8467 80 80s-35.8467 80 -80 80s-80 -35.8467 -80 -80zM496 96c44.1533 0 80 35.8467 80 80s-35.8467 80 -80 80s-80 -35.8467 -80 -80 +s35.8467 -80 80 -80z" /> +d="M490 151.1c-38.7695 -12.5898 -93.7305 -23.0996 -170 -23.0996s-131.19 10.5303 -169.99 23.1201c9.50977 57.4102 39.5098 232.88 97.71 232.88c14 0 26.4902 -6 37 -14c9.78516 -7.45996 22.0947 -11.8906 35.3369 -11.8906c13.2432 0 25.458 4.43066 35.2432 11.8906 +c10.5098 8.07031 23 14 37 14c58.21 0 88.21 -175.51 97.7002 -232.9zM632.9 188.28c4.27637 -2.87402 7.08008 -7.75195 7.08008 -13.2871c0 -1.94043 -0.34668 -3.80078 -0.980469 -5.52344c-0.730469 -2.01953 -77.3203 -201.47 -319 -201.47s-318.27 199.45 -319 201.47 +c-0.625977 1.71289 -0.966797 3.56543 -0.966797 5.49316c0 8.83105 7.16992 16 16 16c4.12012 0 7.87891 -1.56055 10.7168 -4.12305c1.01953 -0.899414 102.42 -90.8398 293.24 -90.8398c191.89 0 292.16 89.8799 293.16 90.7803 +c2.84863 2.61816 6.6709 4.20996 10.8428 4.20996c3.2959 0 6.36035 -0.999023 8.90723 -2.70996z" /> +c34.3994 0 67.7695 -12.1201 96.3994 -35.0596zM495.45 175.23c114.95 -7.90039 144.55 -101.841 144.55 -127.23c0 -26.4922 -21.5078 -48 -48 -48c-97.0996 0 -141.24 35.46 -212.31 96.7002l-98 84.4795c-35.29 28.2705 -75.5 42.8203 -117.29 42.8203 +c-7.09082 0 -13.8906 -1.16992 -20.79 -2l6.88965 65.21c2.96094 27.6465 23.6035 50.1143 50.3496 55.79l191.15 40.5898c4.31055 0.916992 8.73828 1.34277 13.3203 1.34277c31.6191 0 57.9131 -22.9785 63.0801 -53.1328z" /> +d="M0 96v128h384v-128c0 -88.3066 -71.6934 -160 -160 -160h-64c-88.3066 0 -160 71.6934 -160 160zM176 448v-192h-176v32c0 88.3066 71.6934 160 160 160h16zM224 448c88.3066 0 160 -71.6934 160 -160v-32h-176v192h16z" /> +d="M256 296c57.3994 0 104 -46.6006 104 -104s-46.6006 -104 -104 -104s-104 46.6006 -104 104s46.6006 104 104 104zM256 168c13.2461 0 24 10.7539 24 24s-10.7539 24 -24 24s-24 -10.7539 -24 -24s10.7539 -24 24 -24zM256 440c137 0 248 -111 248 -248 +s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM256 64c70.6455 0 128 57.3545 128 128s-57.3545 128 -128 128s-128 -57.3545 -128 -128s57.3545 -128 128 -128z" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - +d="M416 240c8.83105 0 16 -7.16895 16 -16s-7.16895 -16 -16 -16s-16 7.16895 -16 16s7.16895 16 16 16zM624 128c8.83105 0 16 -7.16895 16 -16v-32c0 -8.83105 -7.16895 -16 -16 -16h-336c0 -52.9834 -43.0166 -96 -96 -96s-96 43.0166 -96 96h-32 +c-35.3223 0 -64 28.6777 -64 64v256c0 35.3223 28.6777 64 64 64h352c88.3066 0 160 -71.6934 160 -160v-160h48zM192 16c26.4795 0.0273438 47.9727 21.5205 48 48c0 26.4922 -21.5078 48 -48 48s-48 -21.5078 -48 -48s21.5078 -48 48 -48zM256 256v64 +c0 17.6611 -14.3389 32 -32 32h-128c-17.6611 0 -32 -14.3389 -32 -32v-64c0 -17.6611 14.3389 -32 32 -32h128c17.6611 0 32 14.3389 32 32zM448 128v192c0 17.6611 -14.3389 32 -32 32h-64c-17.6611 0 -32 -14.3389 -32 -32v-192h128z" /> diff --git a/sapl/static/sapl/frontend/img/fa-solid-900.664de393.svg.gz b/sapl/static/sapl/frontend/img/fa-solid-900.664de393.svg.gz new file mode 100644 index 000000000..a57d0bac6 Binary files /dev/null and b/sapl/static/sapl/frontend/img/fa-solid-900.664de393.svg.gz differ diff --git a/sapl/static/sapl/frontend/img/fa-solid-900.ec763292.svg.gz b/sapl/static/sapl/frontend/img/fa-solid-900.ec763292.svg.gz deleted file mode 100644 index ae478377d..000000000 Binary files a/sapl/static/sapl/frontend/img/fa-solid-900.ec763292.svg.gz and /dev/null differ diff --git a/sapl/static/sapl/frontend/js/chunk-vendors.8a6bb3dd.js b/sapl/static/sapl/frontend/js/chunk-vendors.8a6bb3dd.js new file mode 100644 index 000000000..dff7dd494 --- /dev/null +++ b/sapl/static/sapl/frontend/js/chunk-vendors.8a6bb3dd.js @@ -0,0 +1,3 @@ +/*! For license information please see chunk-vendors.8a6bb3dd.js.LICENSE.txt */ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-vendors"],{"030f":function(t,e,n){(function(t){(function(){"use strict";var e=function(){},n=function(t){return function(){return t()}},r=function(t,e){return function(){for(var n=[],r=0;r-1},V=function(t,e){for(var n=0,r=t.length;n=0;n--){var r=t[n];e(r,n)}},G=function(t,e){for(var n=[],r=[],o=0,i=t.length;o=0&&e0?de(n.errors):fe(n.values,e)},pe=function(t,e){return t.length>0?Ot.svalue(Gt(e,Kt.apply(void 0,t))):Ot.svalue(e)},me=function(t){return r(Ot.serror,et)(t)},ge=function(t,e){var n=Ot.partition(t);return n.errors.length>0?me(n.errors):pe(n.values,e)},ve=function(t){var e=Ot.partition(t);return e.errors.length>0?me(e.errors):Ot.svalue(e.values)},be={consolidateObj:ge,consolidateArr:ve},ye=function(t){return O(t)&&Dt(t).length>100?" removed due to size":JSON.stringify(t,null,2)},we=function(t){var e=t.length>10?t.slice(0,10).concat([{path:[],getErrorInfo:function(){return"... (only showing first ten failures)"}}]):t;return $(e,(function(t){return"Failed path: ("+t.path.join(" > ")+")\n"+t.getErrorInfo()}))},_e=function(t,e){return Ot.serror([{path:t,getErrorInfo:e}])},xe=function(t,e,n){return _e(t,(function(){return'Could not find valid *strict* value for "'+e+'" in '+ye(n)}))},Ce=function(t,e){return _e(t,(function(){return'Choice schema did not contain choice key: "'+e+'"'}))},ke=function(t,e,n){return _e(t,(function(){return'The chosen schema: "'+n+'" did not exist in branches: '+ye(e)}))},Se=function(t,e){return _e(t,(function(){return"There are unsupported fields: ["+e.join(", ")+"] specified"}))},Te=function(t,e){return _e(t,(function(){return e}))},Oe=Wt.generate([{field:["key","okey","presence","prop"]},{state:["okey","instantiator"]}]),De=function(t,e,n){return Ht(e,n).fold((function(){return xe(t,n,e)}),Ot.svalue)},Ee=function(t,e,n){var r=Ht(t,e).fold((function(){return n(t)}),a);return Ot.svalue(r)},Ae=function(t,e){return Ot.svalue(Ht(t,e))},Me=function(t,e,n){var r=Ht(t,e).map((function(e){return!0===e?n(t):e}));return Ot.svalue(r)},Ne=function(t,e,n,r){return n.fold((function(n,o,a,u){var s=function(e){var i=u.extract(t.concat([n]),r,e);return Ot.map(i,(function(t){return ae(o,r(t))}))},c=function(e){return e.fold((function(){var t=ae(o,r(_.none()));return Ot.svalue(t)}),(function(e){var i=u.extract(t.concat([n]),r,e);return Ot.map(i,(function(t){return ae(o,r(_.some(t)))}))}))};return function(){return a.fold((function(){return Ot.bind(De(t,e,n),s)}),(function(t){return Ot.bind(Ee(e,n,t),s)}),(function(){return Ot.bind(Ae(e,n),c)}),(function(t){return Ot.bind(Me(e,n,t),c)}),(function(t){var r=t(e),o=Ot.map(Ee(e,n,i({})),(function(t){return Gt(r,t)}));return Ot.bind(o,s)}))}()}),(function(t,n){var o=n(e);return Ot.svalue(ae(t,r(o)))}))},Re=function(t,e,n,r){var o=$(n,(function(n){return Ne(t,e,n,r)}));return be.consolidateObj(o,{})},Pe=function(t){var e=function(e,n,r){return t().extract(e,n,r)},n=function(){return t().toString()};return{extract:e,toString:n}},ze=function(t){var e=function(e,n,r){return Ot.bindError(t(r,n),(function(t){return Te(e,t)}))},n=function(){return"val"};return{extract:e,toString:n}},Ie=function(t){return Dt(zt(t,(function(t){return void 0!==t&&null!==t})))},Le=function(t){var e=Be(t),n=X(t,(function(t,e){return e.fold((function(e){return Gt(t,ce(e,!0))}),i(t))}),{}),r=function(t,r,o){var i=E(o)?[]:Ie(o),a=K(i,(function(t){return!jt(n,t)}));return 0===a.length?e.extract(t,r,o):Se(t,a)};return{extract:r,toString:e.toString}},Be=function(t){var e=function(e,n,r){return Re(e,r,t,n)},n=function(){var e=$(t,(function(t){return t.fold((function(t,e,n,r){return t+" -> "+r.toString()}),(function(t,e){return"state("+t+")"}))}));return"obj{\n"+e.join("\n")+"}"};return{extract:e,toString:n}},He=function(t){var e=function(e,n,r){var o=$(r,(function(r,o){return t.extract(e.concat(["["+o+"]"]),n,r)}));return be.consolidateArr(o)},n=function(){return"array("+t.toString()+")"};return{extract:e,toString:n}},Fe=function(t){var e=function(e,n,r){for(var o=[],i=0,a=t;i1)throw new Error("HTML must have a single root node");return Zn(r.childNodes[0])},Jn=function(t,e){var n=e||document,r=n.createElement(t);return Zn(r)},Qn=function(t,e){var n=e||document,r=n.createTextNode(t);return Zn(r)},Zn=function(t){if(null===t||void 0===t)throw new Error("Node cannot be null or undefined");return{dom:t}},tr=function(t,e,n){return _.from(t.dom.elementFromPoint(e,n)).map(Zn)},er={fromHtml:Xn,fromTag:Jn,fromText:Qn,fromDom:Zn,fromPoint:tr},nr=function(t,e,n,r){var o=t.isiOS()&&!0===/ipad/i.test(n),a=t.isiOS()&&!o,u=t.isiOS()||t.isAndroid(),s=u||r("(pointer:coarse)"),c=o||!a&&u&&r("(min-device-width:768px)"),l=a||u&&!c,f=e.isSafari()&&t.isiOS()&&!1===/safari/i.test(n),d=!l&&!c&&!f;return{isiPad:i(o),isiPhone:i(a),isTablet:i(c),isPhone:i(l),isTouch:i(s),isAndroid:t.isAndroid,isiOS:t.isiOS,isWebView:i(f),isDesktop:i(d)}},rr=function(t,e){for(var n=0;n=e.length&&t.substr(n,n+e.length)===e},pr=function(t,e){return-1!==t.indexOf(e)},mr=function(t,e){return hr(t,e,t.length-e.length)},gr=function(t){return function(e){return e.replace(t,"")}},vr=gr(/^\s+|\s+$/g),br=/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,yr=function(t){return function(e){return pr(e,t)}},wr=[{name:"Edge",versionRegexes:[/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],search:function(t){return pr(t,"edge/")&&pr(t,"chrome")&&pr(t,"safari")&&pr(t,"applewebkit")}},{name:"Chrome",versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/,br],search:function(t){return pr(t,"chrome")&&!pr(t,"chromeframe")}},{name:"IE",versionRegexes:[/.*?msie\ ?([0-9]+)\.([0-9]+).*/,/.*?rv:([0-9]+)\.([0-9]+).*/],search:function(t){return pr(t,"msie")||pr(t,"trident")}},{name:"Opera",versionRegexes:[br,/.*?opera\/([0-9]+)\.([0-9]+).*/],search:yr("opera")},{name:"Firefox",versionRegexes:[/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/],search:yr("firefox")},{name:"Safari",versionRegexes:[br,/.*?cpu os ([0-9]+)_([0-9]+).*/],search:function(t){return(pr(t,"safari")||pr(t,"mobile/"))&&pr(t,"applewebkit")}}],_r=[{name:"Windows",search:yr("win"),versionRegexes:[/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]},{name:"iOS",search:function(t){return pr(t,"iphone")||pr(t,"ipad")},versionRegexes:[/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,/.*cpu os ([0-9]+)_([0-9]+).*/,/.*cpu iphone os ([0-9]+)_([0-9]+).*/]},{name:"Android",search:yr("android"),versionRegexes:[/.*?android\ ?([0-9]+)\.([0-9]+).*/]},{name:"OSX",search:yr("mac os x"),versionRegexes:[/.*?mac\ os\ x\ ?([0-9]+)_([0-9]+).*/]},{name:"Linux",search:yr("linux"),versionRegexes:[]},{name:"Solaris",search:yr("sunos"),versionRegexes:[]},{name:"FreeBSD",search:yr("freebsd"),versionRegexes:[]},{name:"ChromeOS",search:yr("cros"),versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/]}],xr={browsers:i(wr),oses:i(_r)},Cr="Edge",kr="Chrome",Sr="IE",Tr="Opera",Or="Firefox",Dr="Safari",Er=function(){return Ar({current:void 0,version:sr.unknown()})},Ar=function(t){var e=t.current,n=t.version,r=function(t){return function(){return e===t}};return{current:e,version:n,isEdge:r(Cr),isChrome:r(kr),isIE:r(Sr),isOpera:r(Tr),isFirefox:r(Or),isSafari:r(Dr)}},Mr={unknown:Er,nu:Ar,edge:i(Cr),chrome:i(kr),ie:i(Sr),opera:i(Tr),firefox:i(Or),safari:i(Dr)},Nr="Windows",Rr="iOS",Pr="Android",zr="Linux",Ir="OSX",Lr="Solaris",Br="FreeBSD",Hr="ChromeOS",Fr=function(){return jr({current:void 0,version:sr.unknown()})},jr=function(t){var e=t.current,n=t.version,r=function(t){return function(){return e===t}};return{current:e,version:n,isWindows:r(Nr),isiOS:r(Rr),isAndroid:r(Pr),isOSX:r(Ir),isLinux:r(zr),isSolaris:r(Lr),isFreeBSD:r(Br),isChromeOS:r(Hr)}},Vr={unknown:Fr,nu:jr,windows:i(Nr),ios:i(Rr),android:i(Pr),linux:i(zr),osx:i(Ir),solaris:i(Lr),freebsd:i(Br),chromeos:i(Hr)},Wr=function(t,e){var n=xr.browsers(),r=xr.oses(),o=dr.detectBrowser(n,t).fold(Mr.unknown,Mr.nu),i=dr.detectOs(r,t).fold(Vr.unknown,Vr.nu),a=nr(i,o,t,e);return{browser:o,os:i,deviceType:a}},Ur={detect:Wr},$r=function(t){return window.matchMedia(t).matches},Yr=Xt((function(){return Ur.detect(navigator.userAgent,$r)})),qr=function(){return Yr()},Gr=function(t,e,n){return 0!==(t.compareDocumentPosition(e)&n)},Kr=function(t,e){return Gr(t,e,Node.DOCUMENT_POSITION_CONTAINED_BY)},Xr=9,Jr=11,Qr=1,Zr=3,to=function(t,e){var n=t.dom;if(n.nodeType!==Qr)return!1;var r=n;if(void 0!==r.matches)return r.matches(e);if(void 0!==r.msMatchesSelector)return r.msMatchesSelector(e);if(void 0!==r.webkitMatchesSelector)return r.webkitMatchesSelector(e);if(void 0!==r.mozMatchesSelector)return r.mozMatchesSelector(e);throw new Error("Browser lacks native selectors")},eo=function(t){return t.nodeType!==Qr&&t.nodeType!==Xr&&t.nodeType!==Jr||0===t.childElementCount},no=function(t,e){var n=void 0===e?document:e.dom;return eo(n)?[]:$(n.querySelectorAll(t),er.fromDom)},ro=function(t,e){var n=void 0===e?document:e.dom;return eo(n)?_.none():_.from(n.querySelector(t)).map(er.fromDom)},oo=function(t,e){return t.dom===e.dom},io=function(t,e){var n=t.dom,r=e.dom;return n!==r&&n.contains(r)},ao=function(t,e){return Kr(t.dom,e.dom)},uo=function(t,e){return qr().browser.isIE()?ao(t,e):io(t,e)},so=function(t){return R(t)?t:l},co=function(t,e,n){var r=t.dom,o=so(n);while(r.parentNode){r=r.parentNode;var i=er.fromDom(r),a=e(i);if(a.isSome())return a;if(o(i))break}return _.none()},lo=function(t,e,n){var r=e(t),o=so(n);return r.orThunk((function(){return o(t)?_.none():co(t,e,o)}))},fo=function(t,e){return oo(t.element,e.event.target)},ho=function(t){if(!jt(t,"can")&&!jt(t,"abort")&&!jt(t,"run"))throw new Error("EventHandler defined by: "+JSON.stringify(t,null,2)+" does not have can, abort, or run!");return on("Extracting event.handler",Le([Bn("can",f),Bn("abort",l),Bn("run",e)]),t)},po=function(t,e){return function(){for(var n=[],r=0;r0&&ra(t,e),aa(t)},sa=function(t,e){var n=e||document,r=n.createElement("div");return r.innerHTML=t,Ki(er.fromDom(r))},ca=function(t){return t.dom.innerHTML},la=function(t,e){var n=ji(t),r=n.dom,o=er.fromDom(r.createDocumentFragment()),i=sa(e,r);oa(o,i),ia(t),ea(t,o)},fa=function(t){var e=er.fromTag("div"),n=er.fromDom(t.dom.cloneNode(!0));return ea(e,n),ca(e)},da=function(t,e,n){if(!(T(n)||E(n)||P(n)))throw new Error("Attribute value was not simple");t.setAttribute(e,n+"")},ha=function(t,e,n){da(t.dom,e,n)},pa=function(t,e){var n=t.dom;At(e,(function(t,e){da(n,e,t)}))},ma=function(t,e){var n=t.dom.getAttribute(e);return null===n?void 0:n},ga=function(t,e){return _.from(ma(t,e))},va=function(t,e){var n=t.dom;return!(!n||!n.hasAttribute)&&n.hasAttribute(e)},ba=function(t,e){t.dom.removeAttribute(e)},ya=function(t,e){return er.fromDom(t.dom.cloneNode(e))},wa=function(t){return ya(t,!1)},_a=function(t){var e=wa(t);return fa(e)},xa=function(t){return _a(t)},Ca=function(t,e,n){return oo(e,t.element)&&!oo(e,n)},ka=gi([bi(Ho(),(function(t,e){var n=e.event,r=n.originator,o=n.target;return!Ca(t,r,o)}))]),Sa=Object.freeze({__proto__:null,events:ka}),Ta=0,Oa=function(t){var e=new Date,n=e.getTime(),r=Math.floor(1e9*Math.random());return Ta++,t+"_"+r+Ta+String(n)},Da=i("alloy-id-"),Ea=i("data-alloy-id"),Aa=Da(),Ma=Ea(),Na=function(t,e){var n=Oa(Aa+t);return Ra(e,n),n},Ra=function(t,e){Object.defineProperty(t.dom,Ma,{value:e,writable:!0})},Pa=function(t){var e=Li(t)?t.dom[Ma]:null;return _.from(e)},za=function(t){return Oa(t)},Ia=a,La=function(t){var e=function(e){return function(){throw new Error("The component must be in a context to send: "+e+(t?"\n"+xa(t().element)+" is not in context.":""))}};return{debugInfo:i("fake"),triggerEvent:e("triggerEvent"),triggerFocus:e("triggerFocus"),triggerEscape:e("triggerEscape"),build:e("build"),addToWorld:e("addToWorld"),removeFromWorld:e("removeFromWorld"),addToGui:e("addToGui"),removeFromGui:e("removeFromGui"),getByUid:e("getByUid"),getByDom:e("getByDom"),broadcast:e("broadcast"),broadcastOn:e("broadcastOn"),broadcastEvent:e("broadcastEvent"),isConnected:l}},Ba=La(),Ha=function(t,e,n){var r=n.toString(),o=r.indexOf(")")+1,i=r.indexOf("("),a=r.substring(i+1,o-1).split(/,\s*/);return t.toFunctionAnnotation=function(){return{name:e,parameters:Fa(a.slice(0,1).concat(a.slice(3)))}},t},Fa=function(t){return $(t,(function(t){return mr(t,"/*")?t.substring(0,t.length-"/*".length):t}))},ja=function(t,e){var n=t.toString(),r=n.indexOf(")")+1,o=n.indexOf("("),i=n.substring(o+1,r-1).split(/,\s*/);return t.toFunctionAnnotation=function(){return{name:e,parameters:Fa(i)}},t},Va=function(t,e){var n=e.toString(),r=n.indexOf(")")+1,o=n.indexOf("("),i=n.substring(o+1,r-1).split(/,\s*/);return t.toFunctionAnnotation=function(){return{name:"OVERRIDE",parameters:Fa(i.slice(1))}},t},Wa=Oa("alloy-premade"),Ua=function(t){return ce(Wa,t)},$a=function(t){return Ht(t,Wa)},Ya=function(t){return Va((function(e){for(var n=[],r=1;r1?K(e[n],(function(e){return V(t,(function(t){return t.name===e}))})).join(" > "):t[0].name;return ce(n,ru(o,i))}))}));return he(n,{})},mu="alloy.base.behaviour",gu=function(t){var e;return nn("custom.definition",Be([Ye("dom","dom",te(),Be([yn("tag"),Bn("styles",{}),Bn("classes",[]),Bn("attributes",{}),An("value"),An("innerHtml")])),yn("components"),yn("uid"),Bn("events",{}),Bn("apis",{}),Ye("eventOrder","eventOrder",Zt((e={},e[Wo()]=["disabling",mu,"toggling","typeaheadevents"],e[Ho()]=[mu,"focusing","keying"],e[Ko()]=[mu,"disabling","toggling","representing"],e[No()]=[mu,"representing","streaming","invalidating"],e[ei()]=[mu,"representing","item-events","tooltipping"],e[Co()]=["focusing",mu,"item-type-events"],e[yo()]=["focusing",mu,"item-type-events"],e[Oo()]=["item-type-events","tooltipping"],e[Vo()]=["receiving","reflecting","tooltipping"],e)),ln()),An("domModification")]),t)},vu=function(t){return h(h({},t.dom),{uid:t.uid,domChildren:$(t.components,(function(t){return t.element}))})},bu=function(t){return t.domModification.fold((function(){return Za({})}),Za)},yu=function(t){return t.events},wu=function(t,e){var n=ma(t,e);return void 0===n||""===n?[]:n.split(" ")},_u=function(t,e,n){var r=wu(t,e),o=r.concat([n]);return ha(t,e,o.join(" ")),!0},xu=function(t,e,n){var r=K(wu(t,e),(function(t){return t!==n}));return r.length>0?ha(t,e,r.join(" ")):ba(t,e),!1},Cu=function(t){return void 0!==t.dom.classList},ku=function(t){return wu(t,"class")},Su=function(t,e){return _u(t,"class",e)},Tu=function(t,e){return xu(t,"class",e)},Ou=function(t,e){Cu(t)?t.dom.classList.add(e):Su(t,e)},Du=function(t){var e=Cu(t)?t.dom.classList:ku(t);0===e.length&&ba(t,"class")},Eu=function(t,e){if(Cu(t)){var n=t.dom.classList;n.remove(e)}else Tu(t,e);Du(t)},Au=function(t,e){return Cu(t)&&t.dom.classList.contains(e)},Mu=function(t,e){Y(e,(function(e){Ou(t,e)}))},Nu=function(t,e){Y(e,(function(e){Eu(t,e)}))},Ru=function(t){return void 0!==t.style&&R(t.style.getPropertyValue)},Pu=function(t){return Fi(t)},zu=R(Element.prototype.attachShadow)&&R(Node.prototype.getRootNode),Iu=i(zu),Lu=zu?function(t){return er.fromDom(t.dom.getRootNode())}:Vi,Bu=function(t){return Pu(t)?t:er.fromDom(Vi(t).dom.body)},Hu=function(t){return Fu(t).isSome()},Fu=function(t){var e=Lu(t);return Pu(e)?_.some(e):_.none()},ju=function(t){return er.fromDom(t.dom.host)},Vu=function(t){if(Iu()&&N(t.target)){var e=er.fromDom(t.target);if(Li(e)&&Wu(e)&&t.composed&&t.composedPath){var n=t.composedPath();if(n)return ct(n)}}return _.from(t.target)},Wu=function(t){return N(t.dom.shadowRoot)},Uu=function(t){var e=Bi(t)?t.dom.parentNode:t.dom;if(void 0===e||null===e||null===e.ownerDocument)return!1;var n=e.ownerDocument;return Fu(er.fromDom(e)).fold((function(){return n.body.contains(e)}),o(Uu,ju))},$u=function(){return Yu(er.fromDom(document))},Yu=function(t){var e=t.dom.body;if(null===e||void 0===e)throw new Error("Body is not available yet");return er.fromDom(e)},qu=function(t,e,n){if(!T(n))throw new Error("CSS value must be a string: "+n);Ru(t)&&t.style.setProperty(e,n)},Gu=function(t,e){Ru(t)&&t.style.removeProperty(e)},Ku=function(t,e,n){var r=t.dom;qu(r,e,n)},Xu=function(t,e){var n=t.dom;At(e,(function(t,e){qu(n,e,t)}))},Ju=function(t,e){var n=t.dom;At(e,(function(t,e){t.fold((function(){Gu(n,e)}),(function(t){qu(n,e,t)}))}))},Qu=function(t,e){var n=t.dom,r=window.getComputedStyle(n),o=r.getPropertyValue(e);return""!==o||Uu(t)?o:Zu(n,e)},Zu=function(t,e){return Ru(t)?t.style.getPropertyValue(e):""},ts=function(t,e){var n=t.dom,r=Zu(n,e);return _.from(r).filter((function(t){return t.length>0}))},es=function(t){var e={},n=t.dom;if(Ru(n))for(var r=0;r0?eu(n,i,e,r):o;return tu(r,a)},ds=function(t,e,n){var r={"alloy.base.behaviour":yu(t)};return lu(n,t.eventOrder,e,r).getOrDie()},hs=function(t){var e=function(){return b},n=Kn(Ba),r=rn(gu(t)),o=ls(t),i=Xa(o),a=Ja(o),u=fs(r,i,a),s=us(u),c=ds(r,i,a),l=Kn(r.components),f=function(t){n.set(t)},d=function(){n.set(La(e))},h=function(){var t=Ki(s),e=nt(t,(function(t){return n.get().getByDom(t).fold((function(){return[]}),(function(t){return[t]}))}));l.set(e)},p=function(e){var n=a,r=R(n[e.name()])?n[e.name()]:function(){throw new Error("Could not find "+e.name()+" in "+JSON.stringify(t,null,2))};return r()},m=function(t){return R(a[t.name()])},g=function(){return r.apis},v=function(t){return a[t]().map((function(t){return t.state.readState()})).getOr("not enabled")},b={getSystem:n.get,config:p,hasConfigured:m,spec:t,readState:v,getApis:g,connect:f,disconnect:d,element:s,syncComponents:h,components:l.get,events:c};return b},ps=function(t){var e=Ht(t,"components").getOr([]);return $(e,ys)},ms=function(t){var e=Ia(t),n=e.events,r=p(e,["events"]),o=ps(r),i=h(h({},r),{events:h(h({},Sa),n),components:o});return gt.value(hs(i))},gs=function(t){var e=er.fromText(t);return vs({element:e})},vs=function(t){var n=on("external.component",Le([yn("element"),An("uid")]),t),r=Kn(La()),o=function(t){r.set(t)},a=function(){r.set(La((function(){return u})))};n.uid.each((function(t){Ra(n.element,t)}));var u={getSystem:r.get,config:_.none,hasConfigured:l,connect:o,disconnect:a,getApis:function(){return{}},element:n.element,spec:t,readState:i("No state"),syncComponents:e,components:i([]),events:{}};return Ua(u)},bs=za,ys=function(t){return $a(t).fold((function(){var e=t.hasOwnProperty("uid")?t:h({uid:bs("")},t);return ms(e).getOrDie()}),(function(t){return t}))},ws=Ua;function _s(t,e){var n=function(e,n){if(!P(n)&&!n.match(/^[0-9]+$/))throw new Error(t+".set accepts only positive integer values. Value was "+n);var r=e.dom;Ru(r)&&(r.style[t]=n+"px")},r=function(n){var r=e(n);if(r<=0||null===r){var o=Qu(n,t);return parseFloat(o)||0}return r},o=r,i=function(t,e){return J(e,(function(e,n){var r=Qu(t,n),o=void 0===r?0:parseInt(r,10);return isNaN(o)?e:e+o}),0)},a=function(t,e,n){var r=i(t,n),o=e>r?e-r:0;return o};return{set:n,get:r,getOuter:o,aggregate:i,max:a}}var xs=_s("height",(function(t){var e=t.dom;return Uu(t)?e.getBoundingClientRect().height:e.offsetHeight})),Cs=function(t){return xs.get(t)},ks=function(t){return xs.getOuter(t)},Ss=function(t,e){var n=["margin-top","border-top-width","padding-top","padding-bottom","border-bottom-width","margin-bottom"],r=xs.max(t,e,n);Ku(t,"max-height",r+"px")},Ts=function(t,e){var n=function(n,r){return Ts(t+n,e+r)};return{left:t,top:e,translate:n}},Os=Ts,Ds=function(t){var e=t.getBoundingClientRect();return Os(e.left,e.top)},Es=function(t,e){return void 0!==t?t:void 0!==e?e:0},As=function(t){var e=t.dom.ownerDocument,n=e.body,r=e.defaultView,o=e.documentElement;if(n===t.dom)return Os(n.offsetLeft,n.offsetTop);var i=Es(null===r||void 0===r?void 0:r.pageYOffset,o.scrollTop),a=Es(null===r||void 0===r?void 0:r.pageXOffset,o.scrollLeft),u=Es(o.clientTop,n.clientTop),s=Es(o.clientLeft,n.clientLeft);return Ms(t).translate(a-s,i-u)},Ms=function(t){var e=t.dom,n=e.ownerDocument,r=n.body;return r===e?Os(r.offsetLeft,r.offsetTop):Uu(t)?Ds(e):Os(0,0)},Ns=_s("width",(function(t){return t.dom.offsetWidth})),Rs=function(t,e){return Ns.set(t,e)},Ps=function(t){return Ns.get(t)},zs=function(t){return Ns.getOuter(t)},Is=function(t,e){var n=["margin-left","border-left-width","padding-left","padding-right","border-right-width","margin-right"],r=Ns.max(t,e,n);Ku(t,"max-width",r+"px")},Ls=function(t,e,n,r,o,i,a){return{target:t,x:e,y:n,stop:r,prevent:o,kill:i,raw:a}},Bs=function(t){var e=er.fromDom(Vu(t).getOr(t.target)),n=function(){return t.stopPropagation()},o=function(){return t.preventDefault()},i=r(o,n);return Ls(e,t.clientX,t.clientY,n,o,i,t)},Hs=function(t,e){return function(n){t(n)&&e(Bs(n))}},Fs=function(t,e,n,r,o){var i=Hs(n,r);return t.dom.addEventListener(e,i,o),{unbind:u(Ws,t,e,i,o)}},js=function(t,e,n,r){return Fs(t,e,n,r,!1)},Vs=function(t,e,n,r){return Fs(t,e,n,r,!0)},Ws=function(t,e,n,r){t.dom.removeEventListener(e,n,r)},Us=function(t){var e=void 0!==t?t.dom:document,n=e.body.scrollLeft||e.documentElement.scrollLeft,r=e.body.scrollTop||e.documentElement.scrollTop;return Os(n,r)},$s=function(t,e,n){var r=void 0!==n?n.dom:document,o=r.defaultView;o&&o.scrollTo(t,e)},Ys=function(t){var e=void 0===t?window:t;return _.from(e["visualViewport"])},qs=function(t,e,n,r){return{x:t,y:e,width:n,height:r,right:t+n,bottom:e+r}},Gs=function(t){var e=void 0===t?window:t,n=e.document,r=Us(er.fromDom(n));return Ys(e).fold((function(){var t=e.document.documentElement,n=t.clientWidth,o=t.clientHeight;return qs(r.left,r.top,n,o)}),(function(t){return qs(Math.max(t.pageLeft,r.left),Math.max(t.pageTop,r.top),t.width,t.height)}))},Ks=function(t,e){var n=t.view(e);return n.fold(i([]),(function(e){var n=t.owner(e),r=Ks(t,n);return[e].concat(r)}))},Xs=function(t,e){var n=e.owner(t),r=Ks(e,n);return _.some(r)},Js=function(t){var e,n=t.dom===document?_.none():_.from(null===(e=t.dom.defaultView)||void 0===e?void 0:e.frameElement);return n.map(er.fromDom)},Qs=function(t){return ji(t)},Zs=Object.freeze({__proto__:null,view:Js,owner:Qs}),tc=function(t){var e=er.fromDom(document),n=Us(e),r=Xs(t,Zs);return r.fold(u(As,t),(function(e){var r=Ms(t),o=X(e,(function(t,e){var n=Ms(e);return{left:t.left+n.left,top:t.top+n.top}}),{left:0,top:0});return Os(o.left+r.left+n.left,o.top+r.top+n.top)}))},ec=function(t,e,n){return{point:t,width:e,height:n}},nc=function(t,e,n,r){return{x:t,y:e,width:n,height:r}},rc=function(t,e,n,r){return{x:t,y:e,width:n,height:r,right:t+n,bottom:e+r}},oc=function(t){var e=As(t),n=zs(t),r=ks(t);return rc(e.left,e.top,n,r)},ic=function(t){var e=tc(t),n=zs(t),r=ks(t);return rc(e.left,e.top,n,r)},ac=function(){return Gs(window)};function uc(t,e,n,r,o){return t(n,r)?_.some(n):R(o)&&o(n)?_.none():e(n,r,o)}var sc,cc=function(t,e,n){var r=t.dom,o=R(n)?n:l;while(r.parentNode){r=r.parentNode;var i=er.fromDom(r);if(e(i))return _.some(i);if(o(i))break}return _.none()},lc=function(t,e,n){var r=function(t,e){return e(t)};return uc(r,cc,t,e,n)},fc=function(t,e){var n=function(t){for(var r=0;r-1}));return e.bind((function(t){var e=ma(t,"id"),n=Lu(t);return pc(n,'[aria-owns="'+e+'"]')}))},vc=function(){var t=Oa("aria-owns"),e=function(e){ha(e,"aria-owns",t)},n=function(t){ba(t,"aria-owns")};return{id:t,link:e,unlink:n}},bc=function(t,e){return gc(e).exists((function(e){return yc(t,e)}))},yc=function(t,e){return dc(e,(function(e){return oo(e,t.element)}),l)||bc(t,e)},wc="unknown";(function(t){t[t["STOP"]=0]="STOP",t[t["NORMAL"]=1]="NORMAL",t[t["LOGGING"]=2]="LOGGING"})(sc||(sc={}));var _c,xc=Kn({}),Cc=function(t,e){var n=[];(new Date).getTime();return{logEventCut:function(t,e,r){n.push({outcome:"cut",target:e,purpose:r})},logEventStopped:function(t,e,r){n.push({outcome:"stopped",target:e,purpose:r})},logNoParent:function(t,e,r){n.push({outcome:"no-parent",target:e,purpose:r})},logEventNoHandlers:function(t,e){n.push({outcome:"no-handlers-left",target:e})},logEventResponse:function(t,e,r){n.push({outcome:"response",purpose:r,target:e})},write:function(){(new Date).getTime();j(["mousemove","mouseover","mouseout",Ko()],t)}}},kc=function(t,e,n){var r=Ht(xc.get(),t).orThunk((function(){var e=Dt(xc.get());return dt(e,(function(e){return t.indexOf(e)>-1?_.some(xc.get()[e]):_.none()}))})).getOr(sc.NORMAL);switch(r){case sc.NORMAL:return n(Ec());case sc.LOGGING:var o=Cc(t,e),i=n(o);return o.write(),i;case sc.STOP:return!0}},Sc=["alloy/data/Fields","alloy/debugging/Debugging"],Tc=function(){var t=new Error;if(void 0!==t.stack){var e=t.stack.split("\n");return Z(e,(function(t){return t.indexOf("alloy")>0&&!V(Sc,(function(e){return t.indexOf(e)>-1}))})).getOr(wc)}return wc},Oc={logEventCut:e,logEventStopped:e,logNoParent:e,logEventNoHandlers:e,logEventResponse:e,write:e},Dc=function(t,e,n){return kc(t,e,n)},Ec=i(Oc),Ac=i([yn("menu"),yn("selectedMenu")]),Mc=i([yn("item"),yn("selectedItem")]),Nc=(i(Be(Mc().concat(Ac()))),i(Be(Mc()))),Rc=On("initSize",[yn("numColumns"),yn("numRows")]),Pc=function(){return wn("markers",Nc())},zc=function(){return On("markers",[yn("backgroundMenu")].concat(Ac()).concat(Mc()))},Ic=function(t){return On("markers",$(t,yn))},Lc=function(t,e,n){Tc();return Ye(e,e,n,Ze((function(t){return gt.value((function(){for(var e=[],n=0;n=r?_.some(e):_.none():e<=r?_.some(e):_.none()})).map((function(t){return t+o})).getOr(r)},o=r("left",t.x),i=r("top",t.y),u=r("right",t.right),s=r("bottom",t.bottom);return rc(o,i,u-o,s-i)},ul=function(t){return t.x},sl=function(t,e){return t.x+t.width/2-e.width/2},cl=function(t,e){return t.x+t.width-e.width},ll=function(t,e){return t.y-e.height},fl=function(t){return t.y+t.height},dl=function(t,e){return t.y+t.height/2-e.height/2},hl=function(t){return t.x+t.width},pl=function(t,e){return t.x-e.width},ml=function(t,e,n){return $c(ul(t),fl(t),n.southeast(),Xc(),il(t,{left:1,top:3}),"layout-se")},gl=function(t,e,n){return $c(cl(t,e),fl(t),n.southwest(),Jc(),il(t,{right:0,top:3}),"layout-sw")},vl=function(t,e,n){return $c(ul(t),ll(t,e),n.northeast(),Qc(),il(t,{left:1,bottom:2}),"layout-ne")},bl=function(t,e,n){return $c(cl(t,e),ll(t,e),n.northwest(),Zc(),il(t,{right:0,bottom:2}),"layout-nw")},yl=function(t,e,n){return $c(sl(t,e),ll(t,e),n.north(),el(),il(t,{bottom:2}),"layout-n")},wl=function(t,e,n){return $c(sl(t,e),fl(t),n.south(),tl(),il(t,{top:3}),"layout-s")},_l=function(t,e,n){return $c(hl(t),dl(t,e),n.east(),nl(),il(t,{left:0}),"layout-e")},xl=function(t,e,n){return $c(pl(t,e),dl(t,e),n.west(),rl(),il(t,{right:1}),"layout-w")},Cl=function(){return[ml,gl,vl,bl,wl,yl,_l,xl]},kl=function(){return[gl,ml,bl,vl,wl,yl,_l,xl]},Sl=function(){return[vl,bl,ml,gl,yl,wl]},Tl=function(){return[bl,vl,gl,ml,yl,wl]},Ol=function(){return[ml,gl,vl,bl,wl,yl]},Dl=function(){return[gl,ml,bl,vl,wl,yl]},El=function(t,e){return e.universal?t:K(t,(function(t){return j(e.channels,t)}))},Al=function(t){return gi([wi(Vo(),(function(e,n){var r=t.channels,o=Dt(r),i=n,a=El(o,i);Y(a,(function(t){var n=r[t],o=n.schema,a=on("channel["+t+"] data\nReceiver: "+xa(e.element),o,i.data);n.onReceive(e,a)}))}))])},Ml=Object.freeze({__proto__:null,events:Al}),Nl=[wn("channels",tn(gt.value,Le([Fc("onReceive"),Bn("schema",ln())])))],Rl=function(t,e,n){return Ri((function(r){n(r,t,e)}))},Pl=function(t,e,n){return Ni((function(r,o){n(r,t,e)}))},zl=function(t,e,n,r,o,i){var a=Le(t),u=In(e,[Ln("config",t)]);return Hl(a,u,e,n,r,o,i)},Il=function(t,e,n,r,o,i){var a=t,u=In(e,[Mn("config",t)]);return Hl(a,u,e,n,r,o,i)},Ll=function(t,e,n){var r=function(r){for(var o=[],a=1;ar?n:o=i,l=e>=a,f=c&&l,d=t+n<=i+u,h=e+r<=a+s,p=d&&h,m=Math.abs(Math.min(n,c?i+u-t:i-(t+n))),g=Math.abs(Math.min(r,l?a+s-e:a-(e+r))),v=Math.max(o.x,o.right-n),b=Math.max(o.y,o.bottom-r),y=vf(t,o.x,v),w=vf(e,o.y,b);return{originInBounds:f,sizeInBounds:p,limitX:y,limitY:w,deltaW:m,deltaH:g}},wf=function(t,e,n,r){var o=t.x,a=t.y,u=t.bubble.offset,s=u.left,c=u.top,l=al(r,t.boundsRestriction,u),f=l.y,d=l.bottom,h=l.x,p=l.right,m=o+s,g=a+c,v=yf(m,g,e,n,l),b=v.originInBounds,y=v.sizeInBounds,w=v.limitX,_=v.limitY,x=v.deltaW,C=v.deltaH,k=i(_+C-f),S=i(d-_),T=Gc(t.direction,S,S,k),O=i(w+x-h),D=i(p-w),E=Kc(t.direction,D,D,O),A={x:w,y:_,width:x,height:C,maxHeight:T,maxWidth:E,direction:t.direction,classes:{on:t.bubble.classesOn,off:t.bubble.classesOff},label:t.label,candidateYforTest:g};return b&&y?bf.fit(A):bf.nofit(A,x,C)},_f=function(t,e,n,r,o){var i=n.width,s=n.height,c=function(t,a,u,c){var l=t(e,n,r),f=wf(l,i,s,o);return f.fold(bf.fit,(function(t,e,n){var r=n>c||e>u;return r?bf.nofit(t,e,n):bf.nofit(a,u,c)}))},l=J(t,(function(t,e){var n=u(c,e);return t.fold(bf.fit,n)}),bf.nofit({x:e.x,y:e.y,width:n.width,height:n.height,maxHeight:n.height,maxWidth:n.width,direction:Xc(),classes:{on:[],off:[]},label:"none",candidateYforTest:e.y},-1,-1));return l.fold(a,a)},xf=function(t){return{width:zs(t),height:ks(t)}},Cf=function(t,e,n,r){rs(e,"max-height"),rs(e,"max-width");var o=xf(e);return _f(r.preference,t,o,n,r.bounds)},kf=function(t,e){var n=e.classes;Nu(t,n.off),Mu(t,n.on)},Sf=function(t,e,n){var r=n.maxHeightFunction;r(t,e.maxHeight)},Tf=function(t,e,n){var r=n.maxWidthFunction;r(t,e.maxWidth)},Of=function(t,e,n){rf(t,uf(n.origin,e))},Df=function(t,e){Ss(t,Math.floor(e))},Ef=i((function(t,e){Df(t,e),Xu(t,{"overflow-x":"hidden","overflow-y":"auto"})})),Af=i((function(t,e){Df(t,e)})),Mf=function(t,e,n){return void 0===t[e]?n:t[e]},Nf=function(t,n,r,o,i,a){var u=Mf(a,"maxHeightFunction",Ef()),s=Mf(a,"maxWidthFunction",e),c=t.anchorBox,l=t.origin,f={bounds:cf(l,i),origin:l,preference:o,maxHeightFunction:u,maxWidthFunction:s};Rf(c,n,r,f)},Rf=function(t,e,n,r){var o=Cf(t,e,n,r);Of(e,o,r),kf(e,o),Sf(e,o,r),Tf(e,o,r)},Pf=["valignCentre","alignLeft","alignRight","alignCentre","top","bottom","left","right"],zf=function(t,e,n){var r=function(t){return Ht(n,t).getOr([])},o=function(t,e,n){var o=it(Pf,n);return{offset:Os(t,e),classesOn:nt(n,r),classesOff:nt(o,r)}};return{southeast:function(){return o(-t,e,["top","alignLeft"])},southwest:function(){return o(t,e,["top","alignRight"])},south:function(){return o(-t/2,e,["top","alignCentre"])},northeast:function(){return o(-t,-e,["bottom","alignLeft"])},northwest:function(){return o(t,-e,["bottom","alignRight"])},north:function(){return o(-t/2,-e,["bottom","alignCentre"])},east:function(){return o(t,-e/2,["valignCentre","left"])},west:function(){return o(-t,-e/2,["valignCentre","right"])},innerNorthwest:function(){return o(-t,e,["top","alignRight"])},innerNortheast:function(){return o(t,e,["top","alignLeft"])},innerNorth:function(){return o(-t/2,e,["top","alignCentre"])},innerSouthwest:function(){return o(-t,-e,["bottom","alignRight"])},innerSoutheast:function(){return o(t,-e,["bottom","alignLeft"])},innerSouth:function(){return o(-t/2,-e,["bottom","alignCentre"])},innerWest:function(){return o(t,-e/2,["valignCentre","right"])},innerEast:function(){return o(-t,-e/2,["valignCentre","left"])}}},If=function(){return zf(0,0,{})},Lf=function(t){return t},Bf=function(t,e){return function(n){return"rtl"===Hf(n)?e:t}},Hf=function(t){return"rtl"===Qu(t,"direction")?"rtl":"ltr"};(function(t){t["TopToBottom"]="toptobottom",t["BottomToTop"]="bottomtotop"})(_c||(_c={}));var Ff="data-alloy-vertical-dir",jf=function(t){return dc(t,(function(t){return Li(t)&&ma(t,"data-alloy-vertical-dir")===_c.BottomToTop}))},Vf=function(){return In("layouts",[yn("onLtr"),yn("onRtl"),An("onBottomLtr"),An("onBottomRtl")])},Wf=function(t,e,n,r,o,i,a){var u=a.map(jf).getOr(!1),s=e.layouts.map((function(e){return e.onLtr(t)})),c=e.layouts.map((function(e){return e.onRtl(t)})),l=u?e.layouts.bind((function(e){return e.onBottomLtr.map((function(e){return e(t)}))})).or(s).getOr(o):s.getOr(n),f=u?e.layouts.bind((function(e){return e.onBottomRtl.map((function(e){return e(t)}))})).or(c).getOr(i):c.getOr(r),d=Bf(l,f);return d(t)},Uf=function(t,e,n){var r=e.hotspot,o=sf(n,r.element),i=Wf(t.element,e,Ol(),Dl(),Sl(),Tl(),_.some(e.hotspot.element));return _.some(Lf({anchorBox:o,bubble:e.bubble.getOr(If()),overrides:e.overrides,layouts:i,placer:_.none()}))},$f=[yn("hotspot"),An("bubble"),Bn("overrides",{}),Vf(),Vc("placement",Uf)],Yf=function(t,e,n){var r=lf(n,e.x,e.y),o=rc(r.left,r.top,e.width,e.height),i=Wf(t.element,e,Cl(),kl(),Cl(),kl(),_.none());return _.some(Lf({anchorBox:o,bubble:e.bubble,overrides:e.overrides,layouts:i,placer:_.none()}))},qf=[yn("x"),yn("y"),Bn("height",0),Bn("width",0),Bn("bubble",If()),Bn("overrides",{}),Vf(),Vc("placement",Yf)],Gf="\ufeff",Kf=" ",Xf=function(t,e,n,r){return{start:t,soffset:e,finish:n,foffset:r}},Jf={create:Xf},Qf=Wt.generate([{before:["element"]},{on:["element","offset"]},{after:["element"]}]),Zf=function(t,e,n,r){return t.fold(e,n,r)},td=function(t){return t.fold(a,a,a)},ed=Qf.before,nd=Qf.on,rd=Qf.after,od={before:ed,on:nd,after:rd,cata:Zf,getStart:td},id=Wt.generate([{domRange:["rng"]},{relative:["startSitu","finishSitu"]},{exact:["start","soffset","finish","foffset"]}]),ad=function(t){return id.exact(t.start,t.soffset,t.finish,t.foffset)},ud=function(t){return t.match({domRange:function(t){return er.fromDom(t.startContainer)},relative:function(t,e){return od.getStart(t)},exact:function(t,e,n,r){return t}})},sd=id.domRange,cd=id.relative,ld=id.exact,fd=function(t){var e=ud(t);return Ui(e)},dd=Jf.create,hd={domRange:sd,relative:cd,exact:ld,exactFromRange:ad,getWin:fd,range:dd},pd=function(t,e){e.fold((function(e){t.setStartBefore(e.dom)}),(function(e,n){t.setStart(e.dom,n)}),(function(e){t.setStartAfter(e.dom)}))},md=function(t,e){e.fold((function(e){t.setEndBefore(e.dom)}),(function(e,n){t.setEnd(e.dom,n)}),(function(e){t.setEndAfter(e.dom)}))},gd=function(t,e,n){var r=t.document.createRange();return pd(r,e),md(r,n),r},vd=function(t,e,n,r,o){var i=t.document.createRange();return i.setStart(e.dom,n),i.setEnd(r.dom,o),i},bd=function(t){return{left:t.left,top:t.top,right:t.right,bottom:t.bottom,width:t.width,height:t.height}},yd=function(t){var e=t.getClientRects(),n=e.length>0?e[0]:t.getBoundingClientRect();return n.width>0||n.height>0?_.some(n).map(bd):_.none()},wd=Wt.generate([{ltr:["start","soffset","finish","foffset"]},{rtl:["start","soffset","finish","foffset"]}]),_d=function(t,e,n){return e(er.fromDom(n.startContainer),n.startOffset,er.fromDom(n.endContainer),n.endOffset)},xd=function(t,e){return e.match({domRange:function(t){return{ltr:i(t),rtl:_.none}},relative:function(e,n){return{ltr:Xt((function(){return gd(t,e,n)})),rtl:Xt((function(){return _.some(gd(t,n,e))}))}},exact:function(e,n,r,o){return{ltr:Xt((function(){return vd(t,e,n,r,o)})),rtl:Xt((function(){return _.some(vd(t,r,o,e,n))}))}}})},Cd=function(t,e){var n=e.ltr();if(n.collapsed){var r=e.rtl().filter((function(t){return!1===t.collapsed}));return r.map((function(t){return wd.rtl(er.fromDom(t.endContainer),t.endOffset,er.fromDom(t.startContainer),t.startOffset)})).getOrThunk((function(){return _d(t,wd.ltr,n)}))}return _d(t,wd.ltr,n)},kd=function(t,e){var n=xd(t,e);return Cd(t,n)},Sd=function(t,e){var n=kd(t,e);return n.match({ltr:function(e,n,r,o){var i=t.document.createRange();return i.setStart(e.dom,n),i.setEnd(r.dom,o),i},rtl:function(e,n,r,o){var i=t.document.createRange();return i.setStart(r.dom,o),i.setEnd(e.dom,n),i}})};wd.ltr,wd.rtl;function Td(t,e){var n=function(n){if(!t(n))throw new Error("Can only get "+e+" value of a "+e+" node");return r(n).getOr("")},r=function(e){return t(e)?_.from(e.dom.nodeValue):_.none()},o=function(n,r){if(!t(n))throw new Error("Can only set raw "+e+" value of a "+e+" node");n.dom.nodeValue=r};return{get:n,getOption:r,set:o}}var Od=Td(Bi,"text"),Dd=function(t){return Od.get(t)},Ed=function(t){return Od.getOption(t)},Ad=function(t){return"img"===Pi(t)?1:Ed(t).fold((function(){return Ki(t).length}),(function(t){return t.length}))},Md=function(t){return Ed(t).filter((function(t){return 0!==t.trim().length||t.indexOf(Kf)>-1})).isSome()},Nd=["img","br"],Rd=function(t){var e=Md(t);return e||j(Nd,Pi(t))},Pd=function(t){return zd(t,Rd)},zd=function(t,e){var n=function(t){for(var r=Ki(t),o=r.length-1;o>=0;o--){var i=r[o];if(e(i))return _.some(i);var a=n(i);if(a.isSome())return a}return _.none()};return n(t)},Id=function(t,e){return no(e,t)},Ld=function(t,e,n,r){var o=ji(t),i=o.dom.createRange();return i.setStart(t.dom,e),i.setEnd(n.dom,r),i},Bd=function(t,e,n,r){var o=Ld(t,e,n,r),i=oo(t,n)&&e===r;return o.collapsed&&!i},Hd=function(t){return _.from(t.getSelection())},Fd=function(t){if(t.rangeCount>0){var e=t.getRangeAt(0),n=t.getRangeAt(t.rangeCount-1);return _.some(Jf.create(er.fromDom(e.startContainer),e.startOffset,er.fromDom(n.endContainer),n.endOffset))}return _.none()},jd=function(t){if(null===t.anchorNode||null===t.focusNode)return Fd(t);var e=er.fromDom(t.anchorNode),n=er.fromDom(t.focusNode);return Bd(e,t.anchorOffset,n,t.focusOffset)?_.some(Jf.create(e,t.anchorOffset,n,t.focusOffset)):Fd(t)},Vd=function(t){return Hd(t).filter((function(t){return t.rangeCount>0})).bind(jd)},Wd=function(t,e){var n=Sd(t,e);return yd(n)},Ud=function(t,e){return{element:t,offset:e}},$d=function(t,e){var n=Ki(t);if(0===n.length)return Ud(t,e);if(e"})),ln()),gm=Gn("schema",(function(){return[An("preprocess")]})),vm=Bn("defaults",i({})),bm=Bn("overrides",i({})),ym=Be([dm,hm,pm,mm,vm,bm]),wm=Be([dm,hm,pm,vm,bm]),_m=Be([dm,hm,pm,mm,vm,bm]),xm=Be([dm,gm,pm,yn("unit"),mm,vm,bm]),Cm=function(t){return t.fold(_.some,_.none,_.some,_.some)},km=function(t){var e=function(t){return t.name};return t.fold(e,e,e,e)},Sm=function(t){return t.fold(a,a,a,a)},Tm=function(t,e){return function(n){var r=on("Converting part type",e,n);return t(r)}},Om=Tm(fm.required,ym),Dm=Tm(fm.external,wm),Em=Tm(fm.optional,_m),Am=Tm(fm.group,xm),Mm=i("entirety"),Nm=Object.freeze({__proto__:null,required:Om,external:Dm,optional:Em,group:Am,asNamedPart:Cm,name:km,asCommon:Sm,original:Mm}),Rm=function(t,e,n,r){return Gt(e.defaults(t,n,r),n,{uid:t.partUids[e.name]},e.overrides(t,n,r))},Pm=function(t,e,n){var r={},o={};return Y(n,(function(t){t.fold((function(t){r[t.pname]=sm(!0,(function(e,n,r){return t.factory.sketch(Rm(e,t,n,r))}))}),(function(t){var n=e.parts[t.name];o[t.name]=i(t.factory.sketch(Rm(e,t,n[Mm()]),n))}),(function(t){r[t.pname]=sm(!1,(function(e,n,r){return t.factory.sketch(Rm(e,t,n,r))}))}),(function(t){r[t.pname]=cm(!0,(function(e,n,r){var o=e[t.name];return $(o,(function(n){return t.factory.sketch(Gt(t.defaults(e,n,r),n,t.overrides(e,n)))}))}))}))})),{internals:i(r),externals:i(o)}},zm=function(t,e){var n={};return Y(e,(function(e){Cm(e).each((function(e){var r=Im(t,e.pname);n[e.name]=function(n){var o=on("Part: "+e.name+" in "+t,Be(e.schema),n);return h(h({},r),{config:n,validated:o})}}))})),n},Im=function(t,e){return{uiType:lm(),owner:t,name:e}},Lm=function(t,e,n){return{uiType:lm(),owner:t,name:e,config:n,validated:{}}},Bm=function(t){return nt(t,(function(t){return t.fold(_.none,_.some,_.none,_.none).map((function(t){return On(t.name,t.schema.concat([Wc(Mm())]))})).toArray()}))},Hm=function(t){return $(t,km)},Fm=function(t,e,n){return Pm(t,e,n)},jm=function(t,e,n){return um(_.some(t),e,e.components,n)},Vm=function(t,e,n){var r=e.partUids[n];return t.getSystem().getByUid(r).toOptional()},Wm=function(t,e,n){return Vm(t,e,n).getOrDie("Could not find part: "+n)},Um=function(t,e,n){var r={},o=e.partUids,a=t.getSystem();return Y(n,(function(t){r[t]=i(a.getByUid(o[t]))})),r},$m=function(t,e){var n=t.getSystem();return Mt(e.partUids,(function(t,e){return i(n.getByUid(t))}))},Ym=function(t){return Dt(t.partUids)},qm=function(t,e,n){var r={},o=e.partUids,a=t.getSystem();return Y(n,(function(t){r[t]=i(a.getByUid(o[t]).getOrDie())})),r},Gm=function(t,e){var n=Hm(e);return le($(n,(function(e){return{key:e,value:t+"-"+e}})))},Km=function(t){return Ye("partUids","partUids",re((function(e){return Gm(e.uid,t)})),ln())},Xm=Object.freeze({__proto__:null,generate:zm,generateOne:Lm,schemas:Bm,names:Hm,substitutes:Fm,components:jm,defaultUids:Gm,defaultUidsSchema:Km,getAllParts:$m,getAllPartNames:Ym,getPart:Vm,getPartOrDie:Wm,getParts:Um,getPartsOrDie:qm}),Jm=function(t,e){var n=t.length>0?[On("parts",t)]:[];return n.concat([yn("uid"),Bn("dom",{}),Bn("components",[]),Wc("originalSpec"),Bn("debug.sketcher",{})]).concat(e)},Qm=function(t,e,n,r,o){var i=Jm(r,o);return on(t+" [SpecSchema]",Le(i.concat(e)),n)},Zm=function(t,e,n,r){var o=ng(r),i=Qm(t,e,o,[],[]);return n(i,o)},tg=function(t,e,n,r,o){var i=ng(o),a=Bm(n),u=Km(n),s=Qm(t,e,i,a,[u]),c=Fm(t,s,n),l=jm(t,s,c.internals());return r(s,l,i,c.externals())},eg=function(t){return Ft(t,"uid")},ng=function(t){return eg(t)?t:h(h({},t),{uid:za("uid")})};function rg(t){return void 0!==t.uid}var og,ig=Le([yn("name"),yn("factory"),yn("configFields"),Bn("apis",{}),Bn("extraApis",{})]),ag=Le([yn("name"),yn("factory"),yn("configFields"),yn("partFields"),Bn("apis",{}),Bn("extraApis",{})]),ug=function(t){var e=on("Sketcher for "+t.name,ig,t),n=function(t){return Zm(e.name,e.configFields,e.factory,t)},r=Mt(e.apis,Ya),o=Mt(e.extraApis,(function(t,e){return ja(t,e)}));return h(h({name:e.name,configFields:e.configFields,sketch:n},r),o)},sg=function(t){var e=on("Sketcher for "+t.name,ag,t),n=function(t){return tg(e.name,e.configFields,e.partFields,e.factory,t)},r=zm(e.name,e.partFields),o=Mt(e.apis,Ya),i=Mt(e.extraApis,(function(t,e){return ja(t,e)}));return h(h({name:e.name,partFields:e.partFields,configFields:e.configFields,sketch:n,parts:r},o),i)},cg=function(t){for(var e=[],n=function(t){e.push(t)},r=0;r0?_.some(r[r.length-1]):_.none();return o.bind((function(e){return t.getSystem().getByDom(e).toOptional()}))},Rg=function(t,e,n,r){var o=Id(t.element,"."+e.itemClass),i=tt(o,(function(t){return Au(t,e.highlightClass)}));return i.bind((function(e){var n=gf(e,r,0,o.length-1);return t.getSystem().getByDom(o[n]).toOptional()}))},Pg=function(t,e,n){return Rg(t,e,n,-1)},zg=function(t,e,n){return Rg(t,e,n,1)},Ig=function(t,e,n){var r=Id(t.element,"."+e.itemClass);return cg($(r,(function(e){return t.getSystem().getByDom(e).toOptional()})))},Lg=Object.freeze({__proto__:null,dehighlightAll:_g,dehighlight:xg,highlight:Cg,highlightFirst:kg,highlightLast:Sg,highlightAt:Tg,highlightBy:Og,isHighlighted:Dg,getHighlighted:Eg,getFirst:Mg,getLast:Ng,getPrevious:Pg,getNext:zg,getCandidates:Ig}),Bg=[yn("highlightClass"),yn("itemClass"),Bc("onHighlight"),Bc("onDehighlight")],Hg=Vl({fields:Bg,name:"highlighting",apis:Lg}),Fg=[8],jg=[9],Vg=[13],Wg=[27],Ug=[32],$g=[37],Yg=[38],qg=[39],Gg=[40],Kg=function(t,e,n){var r=ot(t.slice(0,e)),o=ot(t.slice(e+1));return Z(r.concat(o),n)},Xg=function(t,e,n){var r=ot(t.slice(0,e));return Z(r,n)},Jg=function(t,e,n){var r=t.slice(0,e),o=t.slice(e+1);return Z(o.concat(r),n)},Qg=function(t,e,n){var r=t.slice(e+1);return Z(r,n)},Zg=function(t){return function(e){var n=e.raw;return j(t,n.which)}},tv=function(t){return function(e){return rt(t,(function(t){return t(e)}))}},ev=function(t){var e=t.raw;return!0===e.shiftKey},nv=function(t){var e=t.raw;return!0===e.ctrlKey},rv=s(ev),ov=function(t,e){return{matches:t,classification:e}},iv=function(t,e){var n=Z(t,(function(t){return t.matches(e)}));return n.map((function(t){return t.classification}))},av=function(t,e,n){var r=e.exists((function(t){return n.exists((function(e){return oo(e,t)}))}));r||fi(t,oi(),{prevFocus:e,newFocus:n})},uv=function(){var t=function(t){return tf(t.element)},e=function(e,n){var r=t(e);e.getSystem().triggerFocus(n,e.element);var o=t(e);av(e,r,o)};return{get:t,set:e}},sv=function(){var t=function(t){return Hg.getHighlighted(t).map((function(t){return t.element}))},n=function(n,r){var o=t(n);n.getSystem().getByDom(r).fold(e,(function(t){Hg.highlight(n,t)}));var i=t(n);av(n,o,i)};return{get:t,set:n}};(function(t){t["OnFocusMode"]="onFocus",t["OnEnterOrSpaceMode"]="onEnterOrSpace",t["OnApiMode"]="onApi"})(og||(og={}));var cv=function(t,e,n,r,o){var i=function(){return t.concat([Bn("focusManager",uv()),Hn("focusInside","onFocus",Ze((function(t){return j(["onFocus","onEnterOrSpace","onApi"],t)?gt.value(t):gt.error("Invalid value for focusInside")}))),Vc("handler",s),Vc("state",e),Vc("sendFocusIn",o)])},a=function(t,e,n,r,o){var i=n(t,e,r,o);return iv(i,e.event).bind((function(n){return n(t,e,r,o)}))},u=function(t,e){var i=t.focusInside!==og.OnFocusMode?_.none():o(t).map((function(n){return wi(Ho(),(function(r,o){n(r,t,e),o.stop()}))})),u=function(n,r){var i=Zg(Ug.concat(Vg))(r.event);t.focusInside===og.OnEnterOrSpaceMode&&i&&fo(n,r)&&o(t).each((function(o){o(n,t,e),r.stop()}))},s=[wi(Ao(),(function(r,o){a(r,o,n,t,e).fold((function(){u(r,o)}),(function(t){o.stop()}))})),wi(Mo(),(function(n,o){a(n,o,r,t,e).each((function(t){o.stop()}))}))];return gi(i.toArray().concat(s))},s={schema:i,processKey:a,toEvents:u};return s},lv=function(t){var e=[An("onEscape"),An("onEnter"),Bn("selector",'[data-alloy-tabstop="true"]:not(:disabled)'),Bn("firstTabstop",0),Bn("useTabstopAt",f),An("visibilitySelector")].concat([t]),n=function(t,e){var n=t.visibilitySelector.bind((function(t){return mc(e,t)})).getOr(e);return Cs(n)>0},r=function(t,e){var r=Id(t.element,e.selector),o=K(r,(function(t){return n(e,t)}));return _.from(o[e.firstTabstop])},o=function(t,e){return e.focusManager.get(t).bind((function(t){return mc(t,e.selector)}))},a=function(t,e){return n(t,e)&&t.useTabstopAt(e)},s=function(t,e,n){r(t,e).each((function(n){e.focusManager.set(t,n)}))},c=function(t,e,n,r,o){return o(e,n,(function(t){return a(r,t)})).fold((function(){return r.cyclic?_.some(!0):_.none()}),(function(e){return r.focusManager.set(t,e),_.some(!0)}))},l=function(t,e,n,r){var i=Id(t.element,n.selector);return o(t,n).bind((function(e){var o=tt(i,u(oo,e));return o.bind((function(e){return c(t,i,e,n,r)}))}))},d=function(t,e,n){var r=n.cyclic?Kg:Xg;return l(t,e,n,r)},h=function(t,e,n){var r=n.cyclic?Jg:Qg;return l(t,e,n,r)},p=function(t,e,n){return n.onEnter.bind((function(n){return n(t,e)}))},m=function(t,e,n){return n.onEscape.bind((function(n){return n(t,e)}))},g=i([ov(tv([ev,Zg(jg)]),d),ov(Zg(jg),h),ov(Zg(Wg),m),ov(tv([rv,Zg(Vg)]),p)]),v=i([]);return cv(e,qa.init,g,v,(function(){return _.some(s)}))},fv=lv(Gn("cyclic",l)),dv=lv(Gn("cyclic",f)),hv=function(t,e,n){return hi(t,n,Wo()),_.some(!0)},pv=function(t,e,n){var r=mg(n)&&Zg(Ug)(e.event);return r?_.none():hv(t,e,n)},mv=function(t,e){return _.some(!0)},gv=[Bn("execute",pv),Bn("useSpace",!1),Bn("useEnter",!0),Bn("useControlEnter",!1),Bn("useDown",!1)],vv=function(t,e,n){return n.execute(t,e,t.element)},bv=function(t,e,n,r){var o=n.useSpace&&!mg(t.element)?Ug:[],i=n.useEnter?Vg:[],a=n.useDown?Gg:[],u=o.concat(i).concat(a);return[ov(Zg(u),vv)].concat(n.useControlEnter?[ov(tv([nv,Zg(Vg)]),vv)]:[])},yv=function(t,e,n,r){return n.useSpace&&!mg(t.element)?[ov(Zg(Ug),mv)]:[]},wv=cv(gv,qa.init,bv,yv,(function(){return _.none()})),_v=function(){var t=Kn(_.none()),e=function(e,n){t.set(_.some({numRows:e,numColumns:n}))},n=function(){return t.get().map((function(t){return t.numRows}))},r=function(){return t.get().map((function(t){return t.numColumns}))};return Ga({readState:function(){return t.get().map((function(t){return{numRows:String(t.numRows),numColumns:String(t.numColumns)}})).getOr({numRows:"?",numColumns:"?"})},setGridSize:e,getNumRows:n,getNumColumns:r})},xv=function(t){return t.state(t)},Cv=Object.freeze({__proto__:null,flatgrid:_v,init:xv}),kv=function(t){return function(e,n,r,o){var i=t(e.element);return Dv(i,e,n,r,o)}},Sv=function(t,e){var n=Bf(t,e);return kv(n)},Tv=function(t,e){var n=Bf(e,t);return kv(n)},Ov=function(t){return function(e,n,r,o){return Dv(t,e,n,r,o)}},Dv=function(t,e,n,r,o){var i=r.focusManager.get(e).bind((function(n){return t(e.element,n,r,o)}));return i.map((function(t){return r.focusManager.set(e,t),!0}))},Ev=Ov,Av=Ov,Mv=Ov,Nv=function(t){return t.offsetWidth<=0&&t.offsetHeight<=0},Rv=function(t){return!Nv(t.dom)},Pv=function(t,e){return tt(t,e).map((function(e){return{index:e,candidates:t}}))},zv=function(t,e,n){var r=function(t){return oo(t,e)},o=Id(t,n),i=K(o,Rv);return Pv(i,r)},Iv=function(t,e){return tt(t,(function(t){return oo(e,t)}))},Lv=function(t,e,n,r){var o=Math.floor(e/n),i=e%n;return r(o,i).bind((function(e){var r=e.row*n+e.column;return r>=0&&r1?_.some(t.slice(1)):_.none()}))},m=function(t){return Ht(n.get(),t)},g=function(t){return v(t).bind(Ow)},v=function(t){return Ht(e.get(),t)},b=function(e){return Ht(t.get(),e)},y=function(t){var e=o.get();return it(Dt(e),t)},w=function(){return r.get().bind(g)},x=function(){return e.get()};return{setMenuBuilt:u,setContents:s,expand:d,refresh:m,collapse:p,lookupMenu:v,lookupItem:b,otherMenus:y,getPrimary:w,getMenus:x,clear:i,isClear:a,getTriggeringPath:f}},Ow=function(t){return"prepared"===t.type?_.some(t.menu):_.none()},Dw={init:Tw,extractPreparedMenu:Ow},Ew=function(t,e){var n,r=Kn(_.none()),o=function(e,n,r){return Mt(r,(function(r,o){var i=function(){return xw.sketch(h(h({},r),{value:o,markers:t.markers,fakeFocus:t.fakeFocus,onHighlight:t.onHighlight,focusManager:t.fakeFocus?sv():uv()}))};return o===n?{type:"prepared",menu:e.getSystem().build(i())}:{type:"notbuilt",nbMenu:i}}))},i=Dw.init(),a=function(e){var n=o(e,t.data.primary,t.data.menus),r=c();return i.setContents(t.data.primary,n,t.data.expansions,r),i.getPrimary()},u=function(t){return Gp.getValue(t).value},s=function(t,e,n){return dt(e,(function(t){if(!t.getSystem().isConnected())return _.none();var e=Hg.getCandidates(t);return Z(e,(function(t){return u(t)===n}))}))},c=function(e){return Mt(t.data.menus,(function(t,e){return nt(t.items,(function(t){return"separator"===t.type?[]:[t.data.value]}))}))},l=function(t,e){Hg.highlight(t,e),Hg.getHighlighted(e).orThunk((function(){return Hg.getFirst(e)})).each((function(e){hi(t,e.element,Uo())}))},f=function(t,e){return cg($(e,(function(e){return t.lookupMenu(e).bind((function(t){return"prepared"===t.type?_.some(t.menu):_.none()}))})))},d=function(e,n,r){var o=f(n,n.otherMenus(r));Y(o,(function(n){Nu(n.element,[t.markers.backgroundMenu]),t.stayInDom||_y.remove(e,n)}))},p=function(e){return r.get().getOrThunk((function(){var n={},o=Id(e.element,"."+t.markers.item),i=K(o,(function(t){return"true"===ma(t,"aria-haspopup")}));return Y(i,(function(t){e.getSystem().getByDom(t).each((function(t){var e=u(t);n[e]=t}))})),r.set(_.some(n)),n}))},m=function(t,e){var n=p(t);At(n,(function(t,n){var r=j(e,n);ha(t.element,"aria-expanded",r)}))},g=function(e,n,r){return _.from(r[0]).bind((function(o){return n.lookupMenu(o).bind((function(o){if("notbuilt"===o.type)return _.none();var i=o.menu,a=f(n,r.slice(1));return Y(a,(function(e){Ou(e.element,t.markers.backgroundMenu)})),Uu(i.element)||_y.append(e,ws(i)),Nu(i.element,[t.markers.backgroundMenu]),l(e,i),d(e,n,r),_.some(i)}))}))};(function(t){t[t["HighlightSubmenu"]=0]="HighlightSubmenu",t[t["HighlightParent"]=1]="HighlightParent"})(n||(n={}));var v=function(t,e,n){if("notbuilt"===n.type){var r=t.getSystem().build(n.nbMenu());return i.setMenuBuilt(e,r),r}return n.menu},b=function(e,r,o){void 0===o&&(o=n.HighlightSubmenu);var a=u(r);return i.expand(a).bind((function(a){return m(e,a),_.from(a[0]).bind((function(u){return i.lookupMenu(u).bind((function(s){var c=v(e,u,s);return Uu(c.element)||_y.append(e,ws(c)),t.onOpenSubmenu(e,r,c,ot(a)),o===n.HighlightSubmenu?(Hg.highlightFirst(c),g(e,i,a)):(Hg.dehighlightAll(c),_.some(r))}))}))}))},y=function(e,n){var r=u(n);return i.collapse(r).bind((function(r){return m(e,r),g(e,i,r).map((function(r){return t.onCollapseMenu(e,n,r),r}))}))},w=function(t,e){var n=u(e);return i.refresh(n).bind((function(e){return m(t,e),g(t,i,e)}))},x=function(t,e){return mg(e.element)?_.none():b(t,e,n.HighlightSubmenu)},C=function(t,e){return mg(e.element)?_.none():y(t,e)},k=function(e,n){return y(e,n).orThunk((function(){return t.onEscape(e,n).map((function(){return e}))}))},S=function(e){return function(n,r){return mc(r.getSource(),"."+t.markers.item).bind((function(t){return n.getSystem().getByDom(t).toOptional().bind((function(t){return e(n,t).map((function(){return!0}))}))}))}},T=gi([wi(ww(),(function(t,e){var n=e.event.item;i.lookupItem(u(n)).each((function(){var n=e.event.menu;Hg.highlight(t,n);var r=u(e.event.item);i.refresh(r).each((function(e){return d(t,i,e)}))}))})),Ri((function(e,r){var o=r.event.target;e.getSystem().getByDom(o).each((function(r){var o=u(r);0===o.indexOf("collapse-item")&&y(e,r),b(e,r,n.HighlightSubmenu).fold((function(){t.onExecute(e,r)}),(function(){}))}))})),Ai((function(e,n){a(e).each((function(n){_y.append(e,ws(n)),t.onOpenMenu(e,n),t.highlightImmediately&&l(e,n)}))}))].concat(t.navigateOnHover?[wi(ow(),(function(e,r){var o=r.event.item;w(e,o),b(e,o,n.HighlightParent),t.onHover(e,o)}))]:[])),O=function(t){return Hg.getHighlighted(t).bind(Hg.getHighlighted)},D=function(t){O(t).each((function(e){y(t,e)}))},E=function(t){i.getPrimary().each((function(e){l(t,e)}))},A=function(t){return _.from(t.components()[0]).filter((function(t){return"menu"===ma(t.element,"role")}))},M=function(e){var n=i.getPrimary().bind((function(t){return O(e).bind((function(t){var n=u(t),r=Bt(i.getMenus()),o=cg($(r,Dw.extractPreparedMenu));return i.getTriggeringPath(n,(function(t){return s(e,o,t)}))})).map((function(e){return{primary:t,triggeringPath:e}}))}));n.fold((function(){A(e).each((function(n){t.onRepositionMenu(e,n,[])}))}),(function(n){var r=n.primary,o=n.triggeringPath;t.onRepositionMenu(e,r,o)}))},N={collapseMenu:D,highlightPrimary:E,repositionMenus:M};return{uid:t.uid,dom:t.dom,markers:t.markers,behaviours:Jp(t.tmenuBehaviours,[fy.config({mode:"special",onRight:S(x),onLeft:S(C),onEscape:S(k),focusIn:function(t,e){i.getPrimary().each((function(e){hi(t,e.element,Uo())}))}}),Hg.config({highlightClass:t.markers.selectedMenu,itemClass:t.markers.menu}),yg.config({find:function(t){return Hg.getHighlighted(t)}}),_y.config({})]),eventOrder:t.eventOrder,apis:N,events:T}},Aw=i("collapse-item"),Mw=function(t,e,n){return{primary:t,menus:e,expansions:n}},Nw=function(t,e){return{primary:t,menus:ce(t,e),expansions:{}}},Rw=function(t){return{value:Oa(Aw()),meta:{text:t}}},Pw=ug({name:"TieredMenu",configFields:[jc("onExecute"),jc("onEscape"),Fc("onOpenMenu"),Fc("onOpenSubmenu"),Bc("onRepositionMenu"),Bc("onCollapseMenu"),Bn("highlightImmediately",!0),On("data",[yn("primary"),yn("menus"),yn("expansions")]),Bn("fakeFocus",!1),Bc("onHighlight"),Bc("onHover"),zc(),yn("dom"),Bn("navigateOnHover",!0),Bn("stayInDom",!1),Kp("tmenuBehaviours",[fy,Hg,yg,_y]),Bn("eventOrder",{})],apis:{collapseMenu:function(t,e){t.collapseMenu(e)},highlightPrimary:function(t,e){t.highlightPrimary(e)},repositionMenus:function(t,e){t.repositionMenus(e)}},factory:Ew,extraApis:{tieredData:Mw,singleData:Nw,collapseItem:Rw}}),zw=function(t,e,n,r,o){var i=function(){return t.lazySink(e)},a="horizontal"===r.type?{layouts:{onLtr:function(){return Ol()},onRtl:function(){return Dl()}}}:{},u=function(t){return 2===t.length},s=function(t){return u(t)?a:{}};return Pw.sketch({dom:{tag:"div"},data:r.data,markers:r.menu.markers,highlightImmediately:r.menu.highlightImmediately,onEscape:function(){return dp.close(e),t.onEscape.map((function(t){return t(e)})),_.some(!0)},onExecute:function(){return _.some(!0)},onOpenMenu:function(t,e){Nh.positionWithinBounds(i().getOrDie(),n,e,o())},onOpenSubmenu:function(t,e,n,r){var o=i().getOrDie();Nh.position(o,h({anchor:"submenu",item:e},s(r)),n)},onRepositionMenu:function(t,e,r){var a=i().getOrDie();Nh.positionWithinBounds(a,n,e,o()),Y(r,(function(t){var e=s(t.triggeringPath);Nh.position(a,h({anchor:"submenu",item:t.triggeringItem},e),t.triggeredMenu)}))}})},Iw=function(t,e){var n=function(e,n){var r=t.getRelated(e);return r.exists((function(t){return yc(t,n)}))},r=function(t,e){dp.setContent(t,e)},o=function(t,e,n){i(t,e,n,_.none())},i=function(t,e,n,r){a(t,e,n,(function(){return r.map((function(t){return oc(t)}))}))},a=function(e,n,r,o){var i=t.lazySink(e).getOrDie();dp.openWhileCloaked(e,r,(function(){return Nh.positionWithinBounds(i,n,e,o())})),Gp.setValue(e,_.some({mode:"position",anchor:n,getBounds:o}))},u=function(t,e,n){s(t,e,n,(function(){return _.none()}))},s=function(e,n,r,o){var i=zw(t,e,n,r,o);dp.open(e,i),Gp.setValue(e,_.some({mode:"menu",menu:i}))},c=function(t){dp.isOpen(t)&&(Gp.setValue(t,_.none()),dp.close(t))},l=function(t){return dp.getState(t)},f=function(e){dp.isOpen(e)&&Gp.getValue(e).each((function(n){switch(n.mode){case"menu":dp.getState(e).each((function(t){Pw.repositionMenus(t)}));break;case"position":var r=t.lazySink(e).getOrDie();Nh.positionWithinBounds(r,n.anchor,e,n.getBounds());break}}))},d={setContent:r,showAt:o,showWithin:i,showWithinBounds:a,showMenuAt:u,showMenuWithinBounds:s,hide:c,getContent:l,reposition:f,isOpen:dp.isOpen};return{uid:t.uid,dom:t.dom,behaviours:Jp(t.inlineBehaviours,[dp.config({isPartOf:function(t,e,r){return yc(e,r)||n(t,r)},getAttachPoint:function(e){return t.lazySink(e).getOrDie()},onOpen:function(e){t.onShow(e)},onClose:function(e){t.onHide(e)}}),Gp.config({store:{mode:"memory",initialValue:_.none()}}),Yl.config({channels:h(h({},vp(h({isExtraPart:e.isExtraPart},t.fireDismissalEventInstead.map((function(t){return{fireEventInstead:{event:t.event}}})).getOr({})))),yp(h(h({},t.fireRepositionEventInstead.map((function(t){return{fireEventInstead:{event:t.event}}})).getOr({})),{doReposition:f})))})]),eventOrder:t.eventOrder,apis:d}},Lw=ug({name:"InlineView",configFields:[yn("lazySink"),Bc("onShow"),Bc("onHide"),Pn("onEscape"),Kp("inlineBehaviours",[dp,Gp,Yl]),In("fireDismissalEventInstead",[Bn("event",ni())]),In("fireRepositionEventInstead",[Bn("event",ri())]),Bn("getRelated",_.none),Bn("isExtraPart",l),Bn("eventOrder",_.none)],factory:Iw,apis:{showAt:function(t,e,n,r){t.showAt(e,n,r)},showWithin:function(t,e,n,r,o){t.showWithin(e,n,r,o)},showWithinBounds:function(t,e,n,r,o){t.showWithinBounds(e,n,r,o)},showMenuAt:function(t,e,n,r){t.showMenuAt(e,n,r)},showMenuWithinBounds:function(t,e,n,r,o){t.showMenuWithinBounds(e,n,r,o)},hide:function(t,e){t.hide(e)},isOpen:function(t,e){return t.isOpen(e)},getContent:function(t,e){return t.getContent(e)},setContent:function(t,e,n){t.setContent(e,n)},reposition:function(t,e){t.reposition(e)}}}),Bw=function(t){return t.x},Hw=function(t,e){return t.x+t.width/2-e.width/2},Fw=function(t,e){return t.x+t.width-e.width},jw=function(t){return t.y},Vw=function(t,e){return t.y+t.height-e.height},Ww=function(t,e,n){return $c(Fw(t,e),Vw(t,e),n.innerSoutheast(),Zc(),il(t,{right:0,bottom:3}),"layout-inner-se")},Uw=function(t,e,n){return $c(Bw(t),Vw(t,e),n.innerSouthwest(),Qc(),il(t,{left:1,bottom:3}),"layout-inner-sw")},$w=function(t,e,n){return $c(Fw(t,e),jw(t),n.innerNortheast(),Jc(),il(t,{right:0,top:2}),"layout-inner-ne")},Yw=function(t,e,n){return $c(Bw(t),jw(t),n.innerNorthwest(),Xc(),il(t,{left:1,top:2}),"layout-inner-nw")},qw=function(t,e,n){return $c(Hw(t,e),jw(t),n.innerNorth(),tl(),il(t,{top:2}),"layout-inner-n")},Gw=function(t,e,n){return $c(Hw(t,e),Vw(t,e),n.innerSouth(),el(),il(t,{bottom:3}),"layout-inner-s")},Kw=tinymce.util.Tools.resolve("tinymce.util.Delay"),Xw=function(t){var e=Zy(t.action),n=t.dom.tag,r=function(e){return Ht(t.dom,"attributes").bind((function(t){return Ht(t,e)}))},o=function(){if("button"===n){var t=r("type").getOr("button"),e=r("role").map((function(t){return{role:t}})).getOr({});return h({type:t},e)}var o=r("role").getOr("button");return{role:o}};return{uid:t.uid,dom:t.dom,components:t.components,events:e,behaviours:Qp.augment(t.buttonBehaviours,[Ny.config({}),fy.config({mode:"execution",useSpace:!0,useEnter:!0})]),domModification:{attributes:o()},eventOrder:t.eventOrder}},Jw=ug({name:"Button",factory:Xw,configFields:[Bn("uid",void 0),yn("dom"),Bn("components",[]),Qp.field("buttonBehaviours",[Ny,fy]),An("action"),An("role"),Bn("eventOrder",{})]}),Qw=function(t){var e=rg(t)&&jt(t,"uid")?t.uid:za("memento"),n=function(t){return t.getSystem().getByUid(e).getOrDie()},r=function(t){return t.getSystem().getByUid(e).toOptional()},o=function(){return h(h({},t),{uid:e})};return{get:n,getOpt:r,asSpec:o}},Zw=function(t){return _.from(t()["temporary-placeholder"]).getOr("!not found!")},t_=function(t,e){return _.from(e()[t.toLowerCase()]).getOrThunk((function(){return Zw(e)}))},e_=function(t,e,n){return _.from(e()[t.toLowerCase()]).or(n).getOrThunk((function(){return Zw(e)}))},n_=function(t,e){return dt(t,(function(t){return _.from(e()[t.toLowerCase()])})).getOrThunk((function(){return Zw(e)}))},r_={success:"checkmark",error:"warning",err:"error",warning:"warning",warn:"warning",info:"info"},o_=function(t){var e=Qw({dom:{tag:"p",innerHtml:t.translationProvider(t.text)},behaviours:Fl([_y.config({})])}),n=function(t){return{dom:{tag:"div",classes:["tox-bar"],attributes:{style:"width: "+t+"%"}}}},r=function(t){return{dom:{tag:"div",classes:["tox-text"],innerHtml:t+"%"}}},o=Qw({dom:{tag:"div",classes:t.progress?["tox-progress-bar","tox-progress-indicator"]:["tox-progress-bar"]},components:[{dom:{tag:"div",classes:["tox-bar-container"]},components:[n(0)]},r(0)],behaviours:Fl([_y.config({})])}),i=function(t,e){t.getSystem().isConnected()&&o.getOpt(t).each((function(t){_y.set(t,[{dom:{tag:"div",classes:["tox-bar-container"]},components:[n(e)]},r(e)])}))},a=function(t,n){if(t.getSystem().isConnected()){var r=e.get(t);_y.set(r,[gs(n)])}},u={updateProgress:i,updateText:a},s=et([t.icon.toArray(),t.level.toArray(),t.level.bind((function(t){return _.from(r_[t])})).toArray()]),c=Qw(Jw.sketch({dom:{tag:"button",classes:["tox-notification__dismiss","tox-button","tox-button--naked","tox-button--icon"]},components:[{dom:{tag:"div",classes:["tox-icon"],innerHtml:t_("close",t.iconProvider),attributes:{"aria-label":t.translationProvider("Close")}}}],action:function(e){t.onAction(e)}})),l=[{dom:{tag:"div",classes:["tox-notification__icon"],innerHtml:n_(s,t.iconProvider)}},{dom:{tag:"div",classes:["tox-notification__body"]},components:[e.asSpec()],behaviours:Fl([_y.config({})])}];return{uid:t.uid,dom:{tag:"div",attributes:{role:"alert"},classes:t.level.map((function(t){return["tox-notification","tox-notification--in","tox-notification--"+t]})).getOr(["tox-notification","tox-notification--in"])},behaviours:Fl([Ny.config({}),Cy("notification-events",[wi(Do(),(function(t){c.getOpt(t).each(Ny.focus)}))])]),components:l.concat(t.progress?[o.asSpec()]:[]).concat(t.closeButton?[c.asSpec()]:[]),apis:u}},i_=ug({name:"Notification",factory:o_,configFields:[An("level"),yn("progress"),yn("icon"),yn("onAction"),yn("text"),yn("iconProvider"),yn("translationProvider"),Wn("closeButton",!0)],apis:{updateProgress:function(t,e,n){t.updateProgress(e,n)},updateText:function(t,e,n){t.updateText(e,n)}}});function a_(t,e,n){var r=e.backstage,o=function(t){switch(t){case"bc-bc":return Gw;case"tc-tc":return qw;case"tc-bc":return yl;case"bc-tc":default:return wl}},i=function(t){Y(t,(function(t){return t.moveTo(0,0)}))},a=function(t){t.length>0&&(ct(t).each((function(t){return t.moveRel(null,"banner")})),Y(t,(function(e,n){n>0&&e.moveRel(t[n-1].getEl(),"bc-tc")})))},u=function(t){i(t),a(t)},s=function(t,i){var a=!t.closeButton&&t.timeout&&(t.timeout>0||t.timeout<0),u=function(){i(),Lw.hide(c)},s=ys(i_.sketch({text:t.text,level:j(["success","error","warning","warn","info"],t.type)?t.type:void 0,progress:!0===t.progressBar,icon:_.from(t.icon),closeButton:!a,onAction:u,iconProvider:r.shared.providers.icons,translationProvider:r.shared.providers.translate})),c=ys(Lw.sketch(h({dom:{tag:"div",classes:["tox-notifications-container"]},lazySink:e.backstage.shared.getSink,fireDismissalEventInstead:{}},r.shared.header.isPositionedAtTop()?{}:{fireRepositionEventInstead:{}})));return n.add(c),t.timeout>0&&Kw.setTimeout((function(){u()}),t.timeout),{close:u,moveTo:function(t,e){Lw.showAt(c,{anchor:"makeshift",x:t,y:e},ws(s))},moveRel:function(t,n){if("banner"!==n){var r=o(n),i={anchor:"node",root:$u(),node:_.some(er.fromDom(t)),layouts:{onRtl:function(){return[r]},onLtr:function(){return[r]}}};Lw.showAt(c,i,ws(s))}else Lw.showAt(c,e.backstage.shared.anchors.banner(),ws(s))},text:function(t){i_.updateText(s,t)},settings:t,getEl:function(){return s.element.dom},progressBar:{value:function(t){i_.updateProgress(s,t)}}}},c=function(t){t.close()},l=function(t){return t.settings};return{open:s,close:c,reposition:u,getArgs:l}}var u_,s_=function(t,e){var n=null,r=function(){null!==n&&(clearTimeout(n),n=null)},o=function(){for(var r=[],o=0;o',t.getDoc());return ea(n,er.fromDom(e.extractContents())),e.insertNode(n.dom),$i(n).each((function(t){return t.dom.normalize()})),Pd(n).map((function(e){t.selection.setCursorLocation(e.dom,Ad(e))})),n}))},m_=function(t){return mc(t,h_)},g_=function(t){return t.collapsed&&3===t.startContainer.nodeType},v_=function(t){return t.toString().replace(/\u00A0/g," ").replace(/\uFEFF/g,"")},b_=function(t){return""!==t&&-1!=="  \f\n\r\t\v".indexOf(t)},y_=function(t,e){return t.substring(e.length)},w_=function(t,e,n){var r;for(r=e-1;r>=0;r--){var o=t.charAt(r);if(b_(o))return _.none();if(o===n)break}return _.some(r)},__=function(t,e,n,r){if(void 0===r&&(r=0),!g_(e))return _.none();var o=function(t,e,r){return w_(r,e,n).getOr(e)},i=t.getParent(e.startContainer,t.isBlock)||t.getRoot();return d_(t,e.startContainer,e.startOffset,o,i).bind((function(t){var o=e.cloneRange();if(o.setStart(t.container,t.offset),o.setEnd(e.endContainer,e.endOffset),o.collapsed)return _.none();var i=v_(o),a=i.lastIndexOf(n);return 0!==a||y_(i,n).length0?E_(e[e.length-1]):T_(t,e.length)},A_=function(t,e){var n=t.childNodes;return n.length>0&&e0&&D_(t)&&n.length===e?E_(n[n.length-1]):T_(t,e)},M_=function(t,e){return d_(t,e.container,e.offset,(function(t,e){return 0===e?-1:e}),t.getRoot()).filter((function(t){var e=t.container.data.charAt(t.offset-1);return!b_(e)})).isSome()},N_=function(t){return function(e){var n=A_(e.startContainer,e.startOffset);return!M_(t,n)}},R_=function(t,e,n){return dt(n.triggerChars,(function(n){return x_(t,e,n)}))},P_=function(t,e){var n=e(),r=t.selection.getRng();return R_(t.dom,r,n).bind((function(n){return z_(t,e,n)}))},z_=function(t,e,n,r){void 0===r&&(r={});var o=e(),i=t.selection.getRng(),a=i.startContainer.nodeValue,u=K(o.lookupByChar(n.triggerChar),(function(e){return n.text.length>=e.minChars&&e.matches.getOrThunk((function(){return N_(t.dom)}))(n.range,a,n.text)}));if(0===u.length)return _.none();var s=S_.all($(u,(function(t){var e=t.fetch(n.text,t.maxResults,r);return e.then((function(e){return{matchText:n.text,items:e,columns:t.columns,onAction:t.onAction,highlightOn:t.highlightOn}}))})));return _.some({lookupData:s,context:n})},I_=Be([xn("type"),Rn("text")]),L_=function(t){return nn("separatormenuitem",I_,t)},B_=Be([Bn("type","autocompleteitem"),Bn("active",!1),Bn("disabled",!1),Bn("meta",{}),xn("value"),Rn("text"),Rn("icon")]),H_=Be([xn("type"),xn("ch"),Fn("minChars",1),Bn("columns",1),Fn("maxResults",10),Pn("matches"),Sn("fetch"),Sn("onAction"),Yn("highlightOn",[],hn)]),F_=function(t){return nn("Autocompleter.Separator",I_,t)},j_=function(t){return nn("Autocompleter.Item",B_,t)},V_=function(t){return nn("Autocompleter",H_,t)},W_=[Wn("disabled",!1),Rn("tooltip"),Rn("icon"),Rn("text"),Un("onSetup",(function(){return e}))],U_=Be([xn("type"),Sn("onAction")].concat(W_)),$_=function(t){return nn("toolbarbutton",U_,t)},Y_=[Wn("active",!1)].concat(W_),q_=Be(Y_.concat([xn("type"),Sn("onAction")])),G_=function(t){return nn("ToggleButton",q_,t)},K_=[Un("predicate",(function(){return!1})),Vn("scope","node",["node","editor"]),Vn("position","selection",["node","selection","line"])],X_=W_.concat([Bn("type","contextformbutton"),Bn("primary",!1),Sn("onAction"),Gn("original",a)]),J_=Y_.concat([Bn("type","contextformbutton"),Bn("primary",!1),Sn("onAction"),Gn("original",a)]),Q_=W_.concat([Bn("type","contextformbutton")]),Z_=Y_.concat([Bn("type","contextformtogglebutton")]),tx=sn("type",{contextformbutton:X_,contextformtogglebutton:J_}),ex=Be([Bn("type","contextform"),Un("initValue",(function(){return""})),Rn("label"),En("commands",tx),Mn("launch",sn("type",{contextformbutton:Q_,contextformtogglebutton:Z_}))].concat(K_)),nx=function(t){return nn("ContextForm",ex,t)},rx=Be([Bn("type","contexttoolbar"),xn("items")].concat(K_)),ox=function(t){return nn("ContextToolbar",rx,t)},ix=function(t){var e={};return Y(t,(function(t){e[t]={}})),Dt(e)},ax=function(t){var e=t.ui.registry.getAll().popups,n=Mt(e,(function(t){return V_(t).fold((function(t){throw new Error(an(t))}),(function(t){return t}))})),r=ix(It(n,(function(t){return t.ch}))),o=Bt(n),i=function(t){return K(o,(function(e){return e.ch===t}))};return{dataset:n,triggerChars:r,lookupByChar:i}};(function(t){t[t["CLOSE_ON_EXECUTE"]=0]="CLOSE_ON_EXECUTE",t[t["BUBBLE_TO_SANDBOX"]=1]="BUBBLE_TO_SANDBOX"})(u_||(u_={}));var ux,sx=u_,cx="tox-menu-nav__js",lx="tox-collection__item",fx="tox-swatch",dx={normal:cx,color:fx},hx="tox-collection__item--enabled",px="tox-collection__group-heading",mx="tox-collection__item-icon",gx="tox-collection__item-label",vx="tox-collection__item-accessory",bx="tox-collection__item-caret",yx="tox-collection__item-checkmark",wx="tox-collection__item--active",_x="tox-collection__item-icon-rtl",xx="tox-collection__item-container",Cx="tox-collection__item-container--column",kx="tox-collection__item-container--row",Sx="tox-collection__item-container--align-right",Tx="tox-collection__item-container--align-left",Ox="tox-collection__item-container--valign-top",Dx="tox-collection__item-container--valign-middle",Ex="tox-collection__item-container--valign-bottom",Ax=function(t){return Ht(dx,t).getOr(cx)},Mx=function(t){return"color"===t?"tox-swatches":"tox-menu"},Nx=function(t){return{backgroundMenu:"tox-background-menu",selectedMenu:"tox-selected-menu",selectedItem:"tox-collection__item--active",hasIcons:"tox-menu--has-icons",menu:Mx(t),tieredMenu:"tox-tiered-menu"}},Rx=function(t){var e=Nx(t);return{backgroundMenu:e.backgroundMenu,selectedMenu:e.selectedMenu,menu:e.menu,selectedItem:e.selectedItem,item:Ax(t)}},Px=function(t,e,n){var r=Nx(n);return{tag:"div",classes:et([[r.menu,"tox-menu-"+e+"-column"],t?[r.hasIcons]:[]])}},zx=[xw.parts.items({})],Ix=function(t,e,n){var r=Nx(n),o={tag:"div",classes:et([[r.tieredMenu]])};return{dom:o,markers:Rx(n)}},Lx=function(t,e){return function(n){var r=U(n,e);return $(r,(function(e){return{dom:t,components:e}}))}},Bx=function(t){return{dom:{tag:"div",classes:["tox-menu","tox-swatches-menu"]},components:[{dom:{tag:"div",classes:["tox-swatches"]},components:[xw.parts.items({preprocess:"auto"!==t?Lx({tag:"div",classes:["tox-swatches__row"]},t):a})]}]}},Hx=function(t){return{dom:{tag:"div",classes:["tox-menu","tox-collection","tox-collection--toolbar","tox-collection--toolbar-lg"]},components:[xw.parts.items({preprocess:Lx({tag:"div",classes:["tox-collection__group"]},t)})]}},Fx=function(t,e){var n=[],r=[];return Y(t,(function(t,o){e(t,o)?(r.length>0&&n.push(r),r=[],Ft(t.dom,"innerHtml")&&r.push(t)):r.push(t)})),r.length>0&&n.push(r),$(n,(function(t){return{dom:{tag:"div",classes:["tox-collection__group"]},components:t}}))},jx=function(t,e,n){return{dom:{tag:"div",classes:["tox-menu","tox-collection"].concat(1===t?["tox-collection--list"]:["tox-collection--grid"])},components:[xw.parts.items({preprocess:function(n){return"auto"!==t&&t>1?Lx({tag:"div",classes:["tox-collection__group"]},t)(n):Fx(n,(function(t,n){return"separator"===e[n].type}))}})]}},Vx=function(t,e){return{dom:{tag:"div",classes:["tox-collection","tox-collection--horizontal"]},components:[xw.parts.items({preprocess:function(e){return Fx(e,(function(e,n){return"separator"===t[n].type}))}})]}},Wx=function(t){return V(t,(function(t){return"icon"in t&&void 0!==t.icon}))},Ux=function(t){return _.none()},$x=function(t,e,n,r,o){var i=Vx(n);return{value:t,dom:i.dom,components:i.components,items:n}},Yx=function(t,e,n,r,o){if("color"===o){var i=Bx(r);return{value:t,dom:i.dom,components:i.components,items:n}}if("normal"===o&&"auto"===r){i=jx(r,n);return{value:t,dom:i.dom,components:i.components,items:n}}if("normal"===o&&1===r){i=jx(1,n);return{value:t,dom:i.dom,components:i.components,items:n}}if("normal"===o){i=jx(r,n);return{value:t,dom:i.dom,components:i.components,items:n}}if("listpreview"===o&&"auto"!==r){i=Hx(r);return{value:t,dom:i.dom,components:i.components,items:n}}return{value:t,dom:Px(e,r,o),components:zx,items:n}},qx=[xn("type"),xn("src"),Rn("alt"),Yn("classes",[],hn)],Gx=Be(qx),Kx=[xn("type"),xn("text"),Rn("name"),Yn("classes",["tox-collection__item-label"],hn)],Xx=Be(Kx),Jx=Qe((function(){return un("type",{cardimage:Gx,cardtext:Xx,cardcontainer:Qx})})),Qx=Be([xn("type"),jn("direction","horizontal"),jn("align","left"),jn("valign","middle"),En("items",Jx)]),Zx=[Wn("disabled",!1),Rn("text"),Rn("shortcut"),Ye("value","value",ne((function(){return Oa("menuitem-value")})),ln()),Bn("meta",{})],tC=Be([xn("type"),Rn("label"),En("items",Jx),Un("onSetup",(function(){return e})),Un("onAction",e)].concat(Zx)),eC=function(t){return nn("cardmenuitem",tC,t)},nC=Be([xn("type"),Wn("active",!1),Rn("icon")].concat(Zx)),rC=function(t){return nn("choicemenuitem",nC,t)},oC=["inserttable","colorswatch"],iC=Be([xn("type"),Cn("fancytype",oC),Un("onAction",e)]),aC=function(t){return nn("fancymenuitem",iC,t)},uC=Be([xn("type"),Un("onSetup",(function(){return e})),Un("onAction",e),Rn("icon")].concat(Zx)),sC=function(t){return nn("menuitem",uC,t)},cC=Be([xn("type"),Sn("getSubmenuItems"),Un("onSetup",(function(){return e})),Rn("icon")].concat(Zx)),lC=function(t){return nn("nestedmenuitem",cC,t)},fC=Be([xn("type"),Rn("icon"),Wn("active",!1),Un("onSetup",(function(){return e})),Sn("onAction")].concat(Zx)),dC=function(t){return nn("togglemenuitem",fC,t)},hC=function(t,e,n){var r=Id(t.element,"."+n);if(r.length>0){var o=tt(r,(function(t){var n=t.dom.getBoundingClientRect().top,o=r[0].dom.getBoundingClientRect().top;return Math.abs(n-o)>e})).getOr(r.length);return _.some({numColumns:o,numRows:Math.ceil(r.length/o)})}return _.none()},pC=function(t,e){return Fl([Cy(t,e)])},mC=function(t){return pC(Oa("unnamed-events"),t)},gC={namedEvents:pC,unnamedEvents:mC},vC=[yn("lazySink"),yn("tooltipDom"),Bn("exclusive",!0),Bn("tooltipComponents",[]),Bn("delay",300),Vn("mode","normal",["normal","follow-highlight"]),Bn("anchor",(function(t){return{anchor:"hotspot",hotspot:t,layouts:{onLtr:i([wl,yl,ml,vl,gl,bl]),onRtl:i([wl,yl,ml,vl,gl,bl])}}})),Bc("onHide"),Bc("onShow")],bC=function(){var t=Kn(_.none()),e=Kn(_.none()),n=function(){return e.get()},r=function(t){e.set(_.some(t))},o=function(){e.set(_.none())},a=function(){t.get().each((function(t){clearTimeout(t)}))},u=function(e,n){a(),t.set(_.some(setTimeout((function(){e()}),n)))},s=function(){return e.get().isSome()},c=i("not-implemented");return Ga({getTooltip:n,isShowing:s,setTooltip:r,clearTooltip:o,clearTimer:a,resetTimer:u,readState:c})},yC=Object.freeze({__proto__:null,init:bC}),wC=Oa("tooltip.exclusive"),_C=Oa("tooltip.show"),xC=Oa("tooltip.hide"),CC=function(t,e,n){t.getSystem().broadcastOn([wC],{})},kC=function(t,e,n,r){n.getTooltip().each((function(t){t.getSystem().isConnected()&&_y.set(t,r)}))},SC=Object.freeze({__proto__:null,hideAllExclusive:CC,setComponents:kC}),TC=function(t,e){var n=function(n){e.getTooltip().each((function(r){jh(r),t.onHide(n,r),e.clearTooltip()})),e.clearTimer()},r=function(n){if(!e.isShowing()){CC(n);var r=t.lazySink(n).getOrDie(),o=n.getSystem().build({dom:t.tooltipDom,components:t.tooltipComponents,events:gi("normal"===t.mode?[wi(Oo(),(function(t){li(n,_C)})),wi(So(),(function(t){li(n,xC)}))]:[]),behaviours:Fl([_y.config({})])});e.setTooltip(o),Bh(r,o),t.onShow(n,o),Nh.position(r,t.anchor(n),o)}};return gi(et([[wi(_C,(function(n){e.resetTimer((function(){r(n)}),t.delay)})),wi(xC,(function(r){e.resetTimer((function(){n(r)}),t.delay)})),wi(Vo(),(function(t,e){var r=e;r.universal||j(r.channels,wC)&&n(t)})),Mi((function(t){n(t)}))],"normal"===t.mode?[wi(Do(),(function(t){li(t,_C)})),wi(Fo(),(function(t){li(t,xC)})),wi(Oo(),(function(t){li(t,_C)})),wi(So(),(function(t){li(t,xC)}))]:[wi(si(),(function(t,e){li(t,_C)})),wi(ci(),(function(t){li(t,xC)}))]]))},OC=Object.freeze({__proto__:null,events:TC}),DC=Vl({fields:vC,name:"tooltipping",active:OC,state:yC,apis:SC}),EC=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),AC=tinymce.util.Tools.resolve("tinymce.util.I18n"),MC=["input","button","textarea","select"],NC=function(t,e,n){var r=e.disabled()?FC:jC;r(t,e)},RC=function(t,e){return!0===e.useNative&&j(MC,Pi(t.element))},PC=function(t){return va(t.element,"disabled")},zC=function(t){ha(t.element,"disabled","disabled")},IC=function(t){ba(t.element,"disabled")},LC=function(t){return"true"===ma(t.element,"aria-disabled")},BC=function(t){ha(t.element,"aria-disabled","true")},HC=function(t){ha(t.element,"aria-disabled","false")},FC=function(t,e,n){e.disableClass.each((function(e){Ou(t.element,e)}));var r=RC(t,e)?zC:BC;r(t),e.onDisabled(t)},jC=function(t,e,n){e.disableClass.each((function(e){Eu(t.element,e)}));var r=RC(t,e)?IC:HC;r(t),e.onEnabled(t)},VC=function(t,e){return RC(t,e)?PC(t):LC(t)},WC=function(t,e,n,r){var o=r?FC:jC;o(t,e)},UC=Object.freeze({__proto__:null,enable:jC,disable:FC,isDisabled:VC,onLoad:NC,set:WC}),$C=function(t,e){return Za({classes:e.disabled()?e.disableClass.toArray():[]})},YC=function(t,e){return gi([vi(Wo(),(function(e,n){return VC(e,t)})),Pl(t,e,NC)])},qC=Object.freeze({__proto__:null,exhibit:$C,events:YC}),GC=[Un("disabled",l),Bn("useNative",!0),An("disableClass"),Bc("onDisabled"),Bc("onEnabled")],KC=Vl({fields:GC,name:"disabling",active:qC,apis:UC}),XC=tinymce.util.Tools.resolve("tinymce.EditorManager"),JC=function(t){var e=t.getParam("skin"),n=t.getParam("skin_url");if(!1!==e){var r=e||"oxide";n=n?t.documentBaseURI.toAbsolute(n):XC.baseURL+"/skins/ui/"+r}return n},QC=function(t){return t.getParam("readonly",!1,"boolean")},ZC=function(t){return!1===t.getParam("skin")},tk=function(t){return t.getParam("height",Math.max(t.getElement().offsetHeight,200))},ek=function(t){return t.getParam("width",EC.DOM.getStyle(t.getElement(),"width"))},nk=function(t){return _.from(t.getParam("min_width")).filter(P)},rk=function(t){return _.from(t.getParam("min_height")).filter(P)},ok=function(t){return _.from(t.getParam("max_width")).filter(P)},ik=function(t){return _.from(t.getParam("max_height")).filter(P)},ak=function(t){return _.from(t.getParam("style_formats")).filter(D)},uk=function(t){return t.getParam("style_formats_merge",!1,"boolean")},sk=function(t){return t.getParam("lineheight_formats","1 1.1 1.2 1.3 1.4 1.5 2","string").split(" ")},ck=function(t){return t.getParam("removed_menuitems","")},lk=function(t){return!1!==t.getParam("menubar",!0,"boolean")},fk=function(t){var e=t.getParam("toolbar",!0),n=!0===e,r=T(e),o=D(e)&&e.length>0;return!hk(t)&&(o||r||n)},dk=function(t){var e=W(9,(function(e){return t.getParam("toolbar"+(e+1),!1,"string")})),n=K(e,(function(t){return"string"===typeof t}));return n.length>0?_.some(n):_.none()},hk=function(t){return dk(t).fold((function(){var e=t.getParam("toolbar",[],"string[]");return e.length>0}),(function(){return!0}))};(function(t){t["default"]="wrap",t["floating"]="floating",t["sliding"]="sliding",t["scrolling"]="scrolling"})(ux||(ux={}));var pk,mk=function(t){return t.getParam("toolbar_mode","","string")};(function(t){t["auto"]="auto",t["top"]="top",t["bottom"]="bottom"})(pk||(pk={}));var gk,vk=function(t){return t.getParam("toolbar_groups",{},"object")},bk=function(t){return t.getParam("toolbar_location",pk.auto,"string")},yk=function(t){return bk(t)===pk.bottom},wk=function(t){return t.getParam("fixed_toolbar_container","","string")},_k=function(t){return t.getParam("toolbar_persist",!1,"boolean")},xk=function(t){var e=wk(t);return e.length>0&&t.inline?pc($u(),e):_.none()},Ck=function(t){return t.inline&&xk(t).isSome()},kk=function(t){var e=xk(t);return e.getOrThunk((function(){return Bu(Lu(er.fromDom(t.getElement())))}))},Sk=function(t){return t.inline&&!lk(t)&&!fk(t)&&!hk(t)},Tk=function(t){var e=t.getParam("toolbar_sticky",!1,"boolean");return(e||t.inline)&&!Ck(t)&&!Sk(t)},Ok=function(t){return t.getParam("draggable_modal",!1,"boolean")},Dk=function(t){var e=t.getParam("menu");return e?Mt(e,(function(t){return h(h({},t),{items:t.items})})):{}},Ek=function(t){return t.getParam("menubar")},Ak=function(t){return t.getParam("toolbar",!0)},Mk=function(t){return t.getParam("file_picker_callback")},Nk=function(t){return t.getParam("file_picker_types")},Rk=function(t){return t.getParam("file_browser_callback_types")},Pk=function(t){return!1===t.getParam("typeahead_urls")},zk=function(t){return t.getParam("anchor_top","#top")},Ik=function(t){return t.getParam("anchor_bottom","#bottom")},Lk=function(t){var e=t.getParam("file_picker_validator_handler",void 0,"function");return void 0===e?t.getParam("filepicker_validator_handler",void 0,"function"):e},Bk="silver.readonly",Hk=Be([kn("readonly")]),Fk=function(t,e){var n=t.outerContainer,r=n.element;e&&(t.mothership.broadcastOn([hp()],{target:r}),t.uiMothership.broadcastOn([hp()],{target:r})),t.mothership.broadcastOn([Bk],{readonly:e}),t.uiMothership.broadcastOn([Bk],{readonly:e})},jk=function(t,e){t.on("init",(function(){t.mode.isReadOnly()&&Fk(e,!0)})),t.on("SwitchMode",(function(){return Fk(e,t.mode.isReadOnly())})),QC(t)&&t.setMode("readonly")},Vk=function(){var t;return Yl.config({channels:(t={},t[Bk]={schema:Hk,onReceive:function(t,e){KC.set(t,e.readonly)}},t)})},Wk=function(t){return KC.config({disabled:t,disableClass:"tox-collection__item--state-disabled"})},Uk=function(t){return KC.config({disabled:t})},$k=function(t){return KC.config({disabled:t,disableClass:"tox-tbtn--disabled"})},Yk=function(t){return KC.config({disabled:t,disableClass:"tox-tbtn--disabled",useNative:!1})},qk={item:Wk,button:Uk,splitButton:$k,toolbarButton:Yk},Gk=function(t,e){var n=t.getApi(e);return function(t){t(n)}},Kk=function(t,e){return Ai((function(n){var r=Gk(t,n);r((function(n){var r=t.onSetup(n);null!==r&&void 0!==r&&e.set(r)}))}))},Xk=function(t,e){return Mi((function(n){return Gk(t,n)(e.get())}))},Jk=function(t,e){return Ri((function(n,r){Gk(t,n)(t.onAction),t.triggersSubmenu||e!==sx.CLOSE_ON_EXECUTE||(li(n,qo()),r.stop())}))},Qk=(gk={},gk[Wo()]=["disabling","alloy.base.behaviour","toggling","item-events"],gk),Zk=function(t){return nt(t,(function(t){return t.toArray()}))},tS=function(t,n,r,o){var i=Kn(e);return{type:"item",dom:n.dom,components:Zk(n.optComponents),data:t.data,eventOrder:Qk,hasSubmenu:t.triggersSubmenu,itemBehaviours:Fl([Cy("item-events",[Jk(t,r),Kk(t,i),Xk(t,i)]),qk.item((function(){return t.disabled||o.isDisabled()})),Vk(),_y.config({})].concat(t.itemBehaviours))}},eS=function(t){return{value:t.value,meta:h({text:t.text.getOr("")},t.meta)}},nS=tinymce.util.Tools.resolve("tinymce.Env"),rS=function(t){var e={alt:"⌥",ctrl:"⌃",shift:"⇧",meta:"⌘",access:"⌃⌥"},n={meta:"Ctrl",access:"Shift+Alt"},r=nS.mac?e:n,o=t.split("+"),i=$(o,(function(t){var e=t.toLowerCase().trim();return Ft(r,e)?r[e]:t}));return nS.mac?i.join(""):i.join("+")},oS=function(t){return{dom:{tag:"div",classes:[mx],innerHtml:t}}},iS=function(t){return{dom:{tag:"div",classes:[gx]},components:[gs(AC.translate(t))]}},aS=function(t,e){return{dom:{tag:"div",classes:e,innerHtml:t}}},uS=function(t,e){return{dom:{tag:"div",classes:[gx]},components:[{dom:{tag:t.tag,styles:t.styles},components:[gs(AC.translate(e))]}]}},sS=function(t){return{dom:{tag:"div",classes:[vx],innerHtml:rS(t)}}},cS=function(t){return{dom:{tag:"div",classes:[yx],innerHtml:t_("checkmark",t)}}},lS=function(t){return{dom:{tag:"div",classes:[bx],innerHtml:t_("chevron-right",t)}}},fS=function(t){return{dom:{tag:"div",classes:[bx],innerHtml:t_("chevron-down",t)}}},dS=function(t,e){var n="vertical"===t.direction?Cx:kx,r="left"===t.align?Tx:Sx,o=function(){switch(t.valign){case"top":return Ox;case"middle":return Dx;case"bottom":return Ex}};return{dom:{tag:"div",classes:[xx,n,r,o()]},components:e}},hS=function(t,e,n){return{dom:{tag:"img",classes:e,attributes:{src:t,alt:n.getOr("")}}}},pS=function(t,e,n,r){var o="custom",i="remove",a=function(){var a=fx,u=n.getOr(""),s=t.map((function(t){return{title:r.translate(t)}})).getOr({}),c={tag:"div",attributes:s,classes:[a]};return h(h({},c),e===o?{tag:"button",classes:m(c.classes,["tox-swatches__picker-btn"]),innerHtml:u}:e===i?{classes:m(c.classes,["tox-swatch--remove"]),innerHtml:u}:{attributes:h(h({},c.attributes),{"data-mce-color":e}),styles:{"background-color":e}})};return{dom:a(),optComponents:[]}},mS=function(t,e){var n=e.map((function(t){return{attributes:{title:AC.translate(t)}}})).getOr({});return h({tag:"div",classes:[cx,lx].concat(t?[_x]:[])},n)},gS=function(t,e,n,r,o){var i=n?e.or(_.some("")).map(oS):_.none(),a=t.checkMark,u=t.htmlContent.fold((function(){return t.textContent.map(r)}),(function(t){return _.some(aS(t,[gx]))})),s={dom:mS(o,t.ariaLabel),optComponents:[i,u,t.shortcutContent.map(sS),a,t.caret]};return s},vS=["list-num-default","list-num-lower-alpha","list-num-lower-greek","list-num-lower-roman","list-num-upper-alpha","list-num-upper-roman"],bS=["list-bull-circle","list-bull-default","list-bull-square"],yS=function(t,e,n,r){void 0===r&&(r=_.none());var o=function(t){return t.map((function(t){return AC.isRtl()&&j(vS,t)?t+"-rtl":t}))},i=AC.isRtl()&&t.iconContent.exists((function(t){return j(bS,t)})),a=o(t.iconContent).map((function(t){return e_(t,e.icons,r)})),s=_.from(t.meta).fold((function(){return iS}),(function(t){return Ft(t,"style")?u(uS,t.style):iS}));return"color"===t.presets?pS(t.ariaLabel,t.value,a,e):gS(t,a,n,s,i)},wS=function(t,e){return Ht(t,"tooltipWorker").map((function(t){return[DC.config({lazySink:e.getSink,tooltipDom:{tag:"div",classes:["tox-tooltip-worker-container"]},tooltipComponents:[],anchor:function(t){return{anchor:"submenu",item:t,overrides:{maxHeightFunction:Af}}},mode:"follow-highlight",onShow:function(e,n){t((function(t){DC.setComponents(e,[vs({element:er.fromDom(t)})])}))}})]})).getOr([])},_S=function(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")},xS=function(t){return EC.DOM.encode(t)},CS=function(t,e){var n=AC.translate(t),r=xS(n);if(e.length>0){var o=new RegExp(_S(e),"gi");return r.replace(o,(function(t){return''+t+""}))}return r},kS=function(t,e,n,r,o,i,a,u){void 0===u&&(u=!0);var s=yS({presets:r,textContent:_.none(),htmlContent:n?t.text.map((function(t){return CS(t,e)})):_.none(),ariaLabel:t.text,iconContent:t.icon,shortcutContent:_.none(),checkMark:_.none(),caret:_.none(),value:t.value},a.providers,u,t.icon);return tS({data:eS(t),disabled:t.disabled,getApi:function(){return{}},onAction:function(e){return o(t.value,t.meta)},onSetup:function(){return function(){}},triggersSubmenu:!1,itemBehaviours:wS(t.meta,a)},s,i,a.providers)},SS=function(t,e,n,r,o,i,a,u){void 0===u&&(u=!0);var s=function(t){return{setActive:function(e){Jy.set(t,e)},isActive:function(){return Jy.isOn(t)},isDisabled:function(){return KC.isDisabled(t)},setDisabled:function(e){return KC.set(t,e)}}},c=yS({presets:n,textContent:e?t.text:_.none(),htmlContent:_.none(),ariaLabel:t.text,iconContent:t.icon,shortcutContent:e?t.shortcut:_.none(),checkMark:e?_.some(cS(a.icons)):_.none(),caret:_.none(),value:t.value},a,u);return Gt(tS({data:eS(t),disabled:t.disabled,getApi:s,onAction:function(e){return r(t.value)},onSetup:function(t){return t.setActive(o),function(){}},triggersSubmenu:!1,itemBehaviours:[]},c,i,a),{toggling:{toggleClass:hx,toggleOnExecute:!1,selected:t.active}})},TS=zm(lw(),fw()),OS=function(t){return{value:t}},DS=/^#?([a-f\d])([a-f\d])([a-f\d])$/i,ES=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i,AS=function(t){return DS.test(t)||ES.test(t)},MS=function(t){var e=t.value.replace(DS,(function(t,e,n,r){return e+e+n+n+r+r}));return{value:e}},NS=function(t){var e=MS(t),n=ES.exec(e.value);return null===n?["FFFFFF","FF","FF","FF"]:n},RS=function(t){var e=t.toString(16);return 1===e.length?"0"+e:e},PS=function(t){var e=RS(t.red)+RS(t.green)+RS(t.blue);return OS(e)},zS=Math.min,IS=Math.max,LS=Math.round,BS=/^rgb\((\d+),\s*(\d+),\s*(\d+)\)/,HS=/^rgba\((\d+),\s*(\d+),\s*(\d+),\s*(\d?(?:\.\d+)?)\)/,FS=function(t,e,n,r){return{red:t,green:e,blue:n,alpha:r}},jS=function(t){var e=parseInt(t,10);return e.toString()===t&&e>=0&&e<=255},VS=function(t){var e,n,r,o=(t.hue||0)%360,i=t.saturation/100,a=t.value/100;if(i=IS(0,zS(i,1)),a=IS(0,zS(a,1)),0===i)return e=n=r=LS(255*a),FS(e,n,r,1);var u=o/60,s=a*i,c=s*(1-Math.abs(u%2-1)),l=a-s;switch(Math.floor(u)){case 0:e=s,n=c,r=0;break;case 1:e=c,n=s,r=0;break;case 2:e=0,n=s,r=c;break;case 3:e=0,n=c,r=s;break;case 4:e=c,n=0,r=s;break;case 5:e=s,n=0,r=c;break;default:e=n=r=0}return e=LS(255*(e+l)),n=LS(255*(n+l)),r=LS(255*(r+l)),FS(e,n,r,1)},WS=function(t){var e=NS(t),n=parseInt(e[1],16),r=parseInt(e[2],16),o=parseInt(e[3],16);return FS(n,r,o,1)},US=function(t,e,n,r){var o=parseInt(t,10),i=parseInt(e,10),a=parseInt(n,10),u=parseFloat(r);return FS(o,i,a,u)},$S=function(t){if("transparent"===t)return _.some(FS(0,0,0,0));var e=BS.exec(t);if(null!==e)return _.some(US(e[1],e[2],e[3],"1"));var n=HS.exec(t);return null!==n?_.some(US(n[1],n[2],n[3],n[4])):_.none()},YS=function(t){return"rgba("+t.red+","+t.green+","+t.blue+","+t.alpha+")"},qS=FS(255,0,0,1),GS=function(t){return t.fire("SkinLoaded")},KS=function(t,e){return t.fire("SkinLoadError",e)},XS=function(t){return t.fire("ResizeEditor")},JS=function(t,e){return t.fire("ResizeContent",e)},QS=function(t,e){return t.fire("ScrollContent",e)},ZS=function(t,e){return t.fire("TextColorChange",e)},tT=tinymce.util.Tools.resolve("tinymce.util.LocalStorage"),eT="tinymce-custom-colors";function nT(t){void 0===t&&(t=10);var e=tT.getItem(eT),n=T(e)?JSON.parse(e):[],r=function(e){var n=t-e.length;return n<0?e.slice(0,t):e},o=r(n),i=function(e){F(o,e).each(a),o.unshift(e),o.length>t&&o.pop(),tT.setItem(eT,JSON.stringify(o))},a=function(t){o.splice(t,1)},u=function(){return o.slice(0)};return{add:i,state:u}}var rT="choiceitem",oT=[{type:rT,text:"Light Green",value:"#BFEDD2"},{type:rT,text:"Light Yellow",value:"#FBEEB8"},{type:rT,text:"Light Red",value:"#F8CAC6"},{type:rT,text:"Light Purple",value:"#ECCAFA"},{type:rT,text:"Light Blue",value:"#C2E0F4"},{type:rT,text:"Green",value:"#2DC26B"},{type:rT,text:"Yellow",value:"#F1C40F"},{type:rT,text:"Red",value:"#E03E2D"},{type:rT,text:"Purple",value:"#B96AD9"},{type:rT,text:"Blue",value:"#3598DB"},{type:rT,text:"Dark Turquoise",value:"#169179"},{type:rT,text:"Orange",value:"#E67E23"},{type:rT,text:"Dark Red",value:"#BA372A"},{type:rT,text:"Dark Purple",value:"#843FA1"},{type:rT,text:"Dark Blue",value:"#236FA1"},{type:rT,text:"Light Gray",value:"#ECF0F1"},{type:rT,text:"Medium Gray",value:"#CED4D9"},{type:rT,text:"Gray",value:"#95A5A6"},{type:rT,text:"Dark Gray",value:"#7E8C8D"},{type:rT,text:"Navy Blue",value:"#34495E"},{type:rT,text:"Black",value:"#000000"},{type:rT,text:"White",value:"#ffffff"}],iT=nT(10),aT=function(t){var e=[],n=document.createElement("canvas");n.height=1,n.width=1;for(var r=n.getContext("2d"),o=function(t,e){var n=255,r=e/255,o=Math.round(t*r+n*(1-r));return("0"+o.toString(16)).slice(-2).toUpperCase()},i=function(t){if(/^[0-9A-Fa-f]{6}$/.test(t))return"#"+t.toUpperCase();r.clearRect(0,0,n.width,n.height),r.fillStyle="#FFFFFF",r.fillStyle=t,r.fillRect(0,0,1,1);var e=r.getImageData(0,0,1,1).data,i=e[0],a=e[1],u=e[2],s=e[3];return"#"+o(i,s)+o(a,s)+o(u,s)},a=0;a0?d(n,r,e,o):r.text.length-n.matchLength>=10?s():u()}}))}))}))},m=c_((function(t){27!==t.which&&p()}),50),g={onKeypress:m,cancelIfNecessary:s,isMenuOpen:i,isActive:a,isProcessingAction:r.get,getView:function(){return Lw.getContent(o)}};!1===t.hasPlugin("rtc")&&k_.setup(g,t)},lO={register:cO},fO=f,dO=function(t,e,n){return js(t,e,fO,n)},hO=function(t,e,n){return Vs(t,e,fO,n)},pO=Bs,mO=function(t,e,n){return mc(t,e,n).isSome()};function gO(t,e){var n=null,r=function(){for(var r=[],o=0;ovO||r>vO},_O=function(t){var e=Kn(_.none()),n=Kn(!1),r=gO((function(e){t.triggerEvent(Yo(),e),n.set(!0)}),bO),o=function(t){return yO(t).each((function(o){r.cancel();var i={x:o.clientX,y:o.clientY,target:t.target};r.schedule(t),n.set(!1),e.set(_.some(i))})),_.none()},i=function(t){return r.cancel(),yO(t).each((function(t){e.get().each((function(n){wO(t,n)&&e.set(_.none())}))})),_.none()},a=function(o){r.cancel();var i=function(t){return oo(t.target,o.target)};return e.get().filter(i).map((function(e){return n.get()?(o.prevent(),!1):t.triggerEvent($o(),o)}))},u=le([{key:yo(),value:o},{key:wo(),value:i},{key:_o(),value:a}]),s=function(t,e){return Ht(u,e).bind((function(e){return e(t)}))};return{fireIfReady:s}},xO=function(t){var e=t.raw;return e.which===Fg[0]&&!j(["input","textarea"],Pi(t.target))&&!mO(t.target,'[contenteditable="true"]')},CO=function(){return qr().browser.isFirefox()},kO=Le([Sn("triggerEvent"),Bn("stopBackspace",!0)]),SO=function(t,e){return CO()?hO(t,"focus",e):dO(t,"focusin",e)},TO=function(t,e){return CO()?hO(t,"blur",e):dO(t,"focusout",e)},OO=function(t,e){var n=on("Getting GUI events settings",kO,e),r=["touchstart","touchmove","touchend","touchcancel","gesturestart","mousedown","mouseup","mouseover","mousemove","mouseout","click"],o=_O(n),i=$(r.concat(["selectstart","input","contextmenu","change","transitionend","drag","dragstart","dragend","dragenter","dragleave","dragover","drop","keyup"]),(function(e){return dO(t,e,(function(t){o.fireIfReady(t,e).each((function(e){e&&t.kill()}));var r=n.triggerEvent(e,t);r&&t.kill()}))})),a=Kn(_.none()),u=dO(t,"paste",(function(t){o.fireIfReady(t,"paste").each((function(e){e&&t.kill()}));var e=n.triggerEvent("paste",t);e&&t.kill(),a.set(_.some(setTimeout((function(){n.triggerEvent(jo(),t)}),0)))})),s=dO(t,"keydown",(function(t){var e=n.triggerEvent("keydown",t);e?t.kill():!0===n.stopBackspace&&xO(t)&&t.prevent()})),c=SO(t,(function(t){var e=n.triggerEvent("focusin",t);e&&t.kill()})),l=Kn(_.none()),f=TO(t,(function(t){var e=n.triggerEvent("focusout",t);e&&t.kill(),l.set(_.some(setTimeout((function(){n.triggerEvent(Fo(),t)}),0)))})),d=function(){Y(i,(function(t){t.unbind()})),s.unbind(),c.unbind(),f.unbind(),u.unbind(),a.get().each(clearTimeout),l.get().each(clearTimeout)};return{unbind:d}},DO=function(t,e){var n=Ht(t,"target").getOr(e);return Kn(n)},EO=function(t,e){var n=Kn(!1),r=Kn(!1),o=function(){n.set(!0)},i=function(){r.set(!0)};return{stop:o,cut:i,isStopped:n.get,isCut:r.get,event:t,setSource:e.set,getSource:e.get}},AO=function(t){var n=Kn(!1),r=function(){n.set(!0)};return{stop:r,cut:e,isStopped:n.get,isCut:l,event:t,setSource:c("Cannot set source of a broadcasted event"),getSource:c("Cannot get source of a broadcasted event")}},MO=Wt.generate([{stopped:[]},{resume:["element"]},{complete:[]}]),NO=function(t,e,n,r,o,i){var a=t(e,r),u=EO(n,o);return a.fold((function(){return i.logEventNoHandlers(e,r),MO.complete()}),(function(t){var n=t.descHandler,r=au(n);return r(u),u.isStopped()?(i.logEventStopped(e,t.element,n.purpose),MO.stopped()):u.isCut()?(i.logEventCut(e,t.element,n.purpose),MO.complete()):$i(t.element).fold((function(){return i.logNoParent(e,t.element,n.purpose),MO.complete()}),(function(r){return i.logEventResponse(e,t.element,n.purpose),MO.resume(r)}))}))},RO=function(t,e,n,r,o,i){return NO(t,e,n,r,o,i).fold((function(){return!0}),(function(r){return RO(t,e,n,r,o,i)}),(function(){return!1}))},PO=function(t,e,n,r,o){var i=DO(n,r);return NO(t,e,n,r,i,o)},zO=function(t,e,n){var r=AO(e);return Y(t,(function(t){var e=t.descHandler,n=au(e);n(r)})),r.isStopped()},IO=function(t,e,n,r){return LO(t,e,n,n.target,r)},LO=function(t,e,n,r,o){var i=DO(n,r);return RO(t,e,n,r,i,o)},BO=function(t,e){return{element:t,descHandler:e}},HO=function(t,e){return{id:t,descHandler:e}};function FO(){var t={},e=function(e,n,r){At(r,(function(r,o){var i=void 0!==t[o]?t[o]:{};i[n]=iu(r,e),t[o]=i}))},n=function(t,e){return Pa(e).fold((function(){return _.none()}),(function(n){return t.bind((function(t){return Ht(t,n)})).map((function(t){return BO(e,t)}))}))},r=function(e){return Ht(t,e).map((function(t){return It(t,(function(t,e){return HO(e,t)}))})).getOr([])},o=function(e,r,o){var i=Ht(t,r);return lo(o,(function(t){return n(i,t)}),e)},i=function(e){At(t,(function(t,n){t.hasOwnProperty(e)&&delete t[e]}))};return{registerId:e,unregisterId:i,filterByType:r,find:o}}function jO(){var t=FO(),e={},n=function(t){var e=t.element;return Pa(e).fold((function(){return Na("uid-",t.element)}),(function(t){return t}))},r=function(t,n){var r=e[n];if(r!==t)throw new Error('The tagId "'+n+'" is already used by: '+xa(r.element)+"\nCannot use it for: "+xa(t.element)+"\nThe conflicting element is"+(Uu(r.element)?" ":" not ")+"already in the DOM");i(t)},o=function(o){var i=n(o);jt(e,i)&&r(o,i);var a=[o];t.registerId(a,i,o.events),e[i]=o},i=function(n){Pa(n.element).each((function(n){delete e[n],t.unregisterId(n)}))},a=function(e){return t.filterByType(e)},u=function(e,n,r){return t.find(e,n,r)},s=function(t){return Ht(e,t)};return{find:u,filter:a,register:o,unregister:i,getById:s}}var VO=function(t){var e=t.dom,n=e.attributes,r=p(e,["attributes"]);return{uid:t.uid,dom:h({tag:"div",attributes:h({role:"presentation"},n)},r),components:t.components,behaviours:Xp(t.containerBehaviours),events:t.events,domModification:t.domModification,eventOrder:t.eventOrder}},WO=ug({name:"Container",factory:VO,configFields:[Bn("components",[]),Kp("containerBehaviours",[]),Bn("events",{}),Bn("domModification",{}),Bn("eventOrder",{})]}),UO=function(t){var n=function(e){return $i(t.element).fold((function(){return!0}),(function(t){return oo(e,t)}))},r=jO(),o=function(t,e){return r.find(n,t,e)},a=OO(t.element,{triggerEvent:function(t,e){return Dc(t,e.target,(function(n){return IO(o,t,e,n)}))}}),u={debugInfo:i("real"),triggerEvent:function(t,e,n){Dc(t,e,(function(r){return LO(o,t,n,e,r)}))},triggerFocus:function(t,n){Pa(t).fold((function(){Xl(t)}),(function(r){Dc(Ho(),t,(function(r){return PO(o,Ho(),{originator:n,kill:e,prevent:e,target:t},t,r),!1}))}))},triggerEscape:function(t,e){u.triggerEvent("keydown",t.element,e.event)},getByUid:function(t){return b(t)},getByDom:function(t){return y(t)},build:ys,addToGui:function(t){l(t)},removeFromGui:function(t){d(t)},addToWorld:function(t){s(t)},removeFromWorld:function(t){c(t)},broadcast:function(t){m(t)},broadcastOn:function(t,e){g(t,e)},broadcastEvent:function(t,e){v(t,e)},isConnected:f},s=function(t){t.connect(u),Bi(t.element)||(r.register(t),Y(t.components(),s),u.triggerEvent(Ko(),t.element,{target:t.element}))},c=function(t){Bi(t.element)||(Y(t.components(),c),r.unregister(t)),t.disconnect()},l=function(e){Bh(t,e)},d=function(t){jh(t)},h=function(){a.unbind(),aa(t.element)},p=function(t){var e=r.filter(Vo());Y(e,(function(e){var n=e.descHandler,r=au(n);r(t)}))},m=function(t){p({universal:!0,data:t})},g=function(t,e){p({universal:!1,channels:t,data:e})},v=function(t,e){var n=r.filter(t);return zO(n,e)},b=function(t){return r.getById(t).fold((function(){return gt.error(new Error('Could not find component with uid: "'+t+'" in system.'))}),gt.value)},y=function(t){var e=Pa(t).getOr("not found");return b(e)};return s(t),{root:t,element:t.element,destroy:h,add:l,remove:d,getByUid:b,getByDom:y,addToWorld:s,removeFromWorld:c,broadcast:m,broadcastOn:g,broadcastEvent:v}},$O=function(t,e){return{dom:{tag:"div",classes:["tox-bar","tox-form__controls-h-stack"]},components:$(t.items,e.interpreter)}},YO=i([Bn("prefix","form-field"),Kp("fieldBehaviours",[yg,Gp])]),qO=i([Em({schema:[yn("dom")],name:"label"}),Em({factory:{sketch:function(t){return{uid:t.uid,dom:{tag:"span",styles:{display:"none"},attributes:{"aria-hidden":"true"},innerHtml:t.text}}}},schema:[yn("text")],name:"aria-descriptor"}),Om({factory:{sketch:function(t){var e=se(t,["factory"]);return t.factory.sketch(e)}},schema:[yn("factory")],name:"field"})]),GO=function(t,e,n,r){var o=Jp(t.fieldBehaviours,[yg.config({find:function(e){return Vm(e,t,"field")}}),Gp.config({store:{mode:"manual",getValue:function(t){return yg.getCurrent(t).bind(Gp.getValue)},setValue:function(t,e){yg.getCurrent(t).each((function(t){Gp.setValue(t,e)}))}}})]),i=gi([Ai((function(e,n){var r=Um(e,t,["label","field","aria-descriptor"]);r.field().each((function(e){var n=Oa(t.prefix);r.label().each((function(t){ha(t.element,"for",n),ha(e.element,"id",n)})),r["aria-descriptor"]().each((function(n){var r=Oa(t.prefix);ha(n.element,"id",r),ha(e.element,"aria-describedby",r)}))}))}))]),a={getField:function(e){return Vm(e,t,"field")},getLabel:function(e){return Vm(e,t,"label")}};return{uid:t.uid,dom:t.dom,components:e,behaviours:o,events:i,apis:a}},KO=sg({name:"FormField",configFields:YO(),partFields:qO(),factory:GO,apis:{getField:function(t,e){return t.getField(e)},getLabel:function(t,e){return t.getLabel(e)}}}),XO=function(t,e){return Za({attributes:le([{key:e.tabAttr,value:"true"}])})},JO=Object.freeze({__proto__:null,exhibit:XO}),QO=[Bn("tabAttr","data-alloy-tabstop")],ZO=Vl({fields:QO,name:"tabstopping",active:JO}),tD=tinymce.util.Tools.resolve("tinymce.html.Entities"),eD=function(t,e,n,r){var o=rD(t,e,n,r);return KO.sketch(o)},nD=function(t,e){return eD(t,e,[],[])},rD=function(t,e,n,r){return{dom:iD(n),components:t.toArray().concat([e]),fieldBehaviours:Fl(r)}},oD=function(){return iD([])},iD=function(t){return{tag:"div",classes:["tox-form__group"].concat(t)}},aD=function(t,e){return KO.parts.label({dom:{tag:"label",classes:["tox-label"],innerHtml:e.translate(t)}})},uD=Oa("form-component-change"),sD=Oa("form-close"),cD=Oa("form-cancel"),lD=Oa("form-action"),fD=Oa("form-submit"),dD=Oa("form-block"),hD=Oa("form-unblock"),pD=Oa("form-tabchange"),mD=Oa("form-resize"),gD=function(t,e){var n,r=t.label.map((function(t){return aD(t,e)})),o=function(t){return function(e,n){mc(n.event.target,"[data-collection-item-value]").each((function(r){t(e,n,r,ma(r,"data-collection-item-value"))}))}},i=function(n,r){var o=$(r,(function(n){var r=AC.translate(n.text),o=1===t.columns?'

        '+r+"
        ":"",i='
        '+n.icon+"
        ",a={_:" "," - ":" ","-":" "},u=r.replace(/\_| \- |\-/g,(function(t){return a[t]})),s=e.isDisabled()?" tox-collection__item--state-disabled":"";return'
        '+i+o+"
        "})),i="auto"!==t.columns&&t.columns>1?U(o,t.columns):[o],a=$(i,(function(t){return'
        '+t.join("")+"
        "}));la(n.element,a.join(""))},u=o((function(n,r,o,i){r.stop(),e.isDisabled()||fi(n,lD,{name:t.name,value:i})})),s=[wi(Oo(),o((function(t,e,n){Xl(n)}))),wi(Po(),u),wi($o(),u),wi(Do(),o((function(t,e,n){pc(t.element,"."+wx).each((function(t){Eu(t,wx)})),Ou(n,wx)}))),wi(Eo(),o((function(t){pc(t.element,"."+wx).each((function(t){Eu(t,wx)}))}))),Ri(o((function(e,n,r,o){fi(e,lD,{name:t.name,value:o})})))],c=function(t,e){return $(Id(t.element,".tox-collection__item"),e)},l=KO.parts.field({dom:{tag:"div",classes:["tox-collection"].concat(1!==t.columns?["tox-collection--grid"]:["tox-collection--list"])},components:[],factory:{sketch:a},behaviours:Fl([KC.config({disabled:e.isDisabled,onDisabled:function(t){c(t,(function(t){Ou(t,"tox-collection__item--state-disabled"),ha(t,"aria-disabled",!0)}))},onEnabled:function(t){c(t,(function(t){Eu(t,"tox-collection__item--state-disabled"),ba(t,"aria-disabled")}))}}),Vk(),_y.config({}),Gp.config({store:{mode:"memory",initialValue:[]},onSetValue:function(e,n){i(e,n),"auto"===t.columns&&hC(e,5,"tox-collection__item").each((function(t){var n=t.numRows,r=t.numColumns;fy.setGridSize(e,n,r)})),li(e,mD)}}),ZO.config({}),fy.config(MT(t.columns,"normal")),Cy("collection-events",s)]),eventOrder:(n={},n[Wo()]=["disabling","alloy.base.behaviour","collection-events"],n)}),f=["tox-form__group--collection"];return eD(r,l,f,[])},vD=i([An("data"),Bn("inputAttributes",{}),Bn("inputStyles",{}),Bn("tag","input"),Bn("inputClasses",[]),Bc("onSetValue"),Bn("styles",{}),Bn("eventOrder",{}),Kp("inputBehaviours",[Gp,Ny]),Bn("selectOnFocus",!0)]),bD=function(t){return Fl([Ny.config({onFocus:t.selectOnFocus?function(t){var e=t.element,n=is(e);e.dom.setSelectionRange(0,n.length)}:e})])},yD=function(t){return h(h({},bD(t)),Jp(t.inputBehaviours,[Gp.config({store:h(h({mode:"manual"},t.data.map((function(t){return{initialValue:t}})).getOr({})),{getValue:function(t){return is(t.element)},setValue:function(t,e){var n=is(t.element);n!==e&&as(t.element,e)}}),onSetValue:t.onSetValue})]))},wD=function(t){return{tag:t.tag,attributes:h({type:"text"},t.inputAttributes),styles:t.inputStyles,classes:t.inputClasses}},_D=function(t,e){return{uid:t.uid,dom:wD(t),components:[],behaviours:yD(t),eventOrder:t.eventOrder}},xD=ug({name:"Input",configFields:vD(),factory:_D}),CD={},kD={exports:CD};(function(e,n,r,o){(function(o){if("object"===typeof n&&"undefined"!==typeof r)r.exports=o();else if("function"===typeof e&&e.amd)e([],o);else{var i;i="undefined"!==typeof window?window:"undefined"!==typeof t?t:"undefined"!==typeof self?self:this,i.EphoxContactWrapper=o()}})((function(){return function(){function t(e,n,r){function i(u,s){if(!n[u]){if(!e[u]){var c="function"==typeof o&&o;if(!s&&c)return c(u,!0);if(a)return a(u,!0);var l=new Error("Cannot find module '"+u+"'");throw l.code="MODULE_NOT_FOUND",l}var f=n[u]={exports:{}};e[u][0].call(f.exports,(function(t){var n=e[u][1][t];return i(n||t)}),f,f.exports,t,e,n,r)}return n[u].exports}for(var a="function"==typeof o&&o,u=0;u1)for(var n=1;n=0&&(t._idleTimeoutId=setTimeout((function(){t._onTimeout&&t._onTimeout()}),e))},n.setImmediate="function"===typeof e?e:function(t){var e=s++,r=!(arguments.length<2)&&a.call(arguments,1);return u[e]=!0,o((function(){u[e]&&(r?t.apply(null,r):t.call(null),n.clearImmediate(e))})),e},n.clearImmediate="function"===typeof r?r:function(t){delete u[t]}}).call(this,t("timers").setImmediate,t("timers").clearImmediate)},{"process/browser.js":1,timers:3}],4:[function(t,e,n){var r=t("promise-polyfill"),o=function(){return"undefined"!==typeof window?window:Function("return this;")()}();e.exports={boltExport:o.Promise||r}},{"promise-polyfill":2}]},{},[4])(4)}))})(void 0,CD,kD,void 0);var SD,TD=kD.exports.boltExport,OD=function(t){var e=_.none(),n=[],r=function(t){return OD((function(e){o((function(n){e(t(n))}))}))},o=function(t){a()?s(t):n.push(t)},i=function(t){a()||(e=_.some(t),u(n),n=[])},a=function(){return e.isSome()},u=function(t){Y(t,s)},s=function(t){e.each((function(e){setTimeout((function(){t(e)}),0)}))};return t(i),{get:o,map:r,isReady:a}},DD=function(t){return OD((function(e){e(t)}))},ED={nu:OD,pure:DD},AD=function(t){setTimeout((function(){throw t}),0)},MD=function(t){var e=function(e){t().then(e,AD)},n=function(e){return MD((function(){return t().then(e)}))},r=function(e){return MD((function(){return t().then((function(t){return e(t).toPromise()}))}))},o=function(e){return MD((function(){return t().then((function(){return e.toPromise()}))}))},i=function(){return ED.nu(e)},a=function(){var e=null;return MD((function(){return null===e&&(e=t()),e}))},u=t;return{map:n,bind:r,anonBind:o,toLazy:i,toCached:a,toPromise:u,get:e}},ND=function(t){return MD((function(){return new TD(t)}))},RD=function(t){return MD((function(){return TD.resolve(t)}))},PD={nu:ND,pure:RD},zD=["input","textarea"],ID=function(t){var e=Pi(t);return j(zD,e)},LD=function(t,e){var n=e.getRoot(t).getOr(t.element);Eu(n,e.invalidClass),e.notify.each((function(e){ID(t.element)&&ha(t.element,"aria-invalid",!1),e.getContainer(t).each((function(t){la(t,e.validHtml)})),e.onValid(t)}))},BD=function(t,e,n,r){var o=e.getRoot(t).getOr(t.element);Ou(o,e.invalidClass),e.notify.each((function(e){ID(t.element)&&ha(t.element,"aria-invalid",!0),e.getContainer(t).each((function(t){la(t,r)})),e.onInvalid(t,r)}))},HD=function(t,e,n){return e.validator.fold((function(){return PD.pure(gt.value(!0))}),(function(e){return e.validate(t)}))},FD=function(t,e,n){return e.notify.each((function(e){e.onValidate(t)})),HD(t,e).map((function(r){return t.getSystem().isConnected()?r.fold((function(r){return BD(t,e,n,r),gt.error(r)}),(function(n){return LD(t,e),gt.value(n)})):gt.error("No longer in system")}))},jD=function(t,e){var n=e.getRoot(t).getOr(t.element);return Au(n,e.invalidClass)},VD=Object.freeze({__proto__:null,markValid:LD,markInvalid:BD,query:HD,run:FD,isInvalid:jD}),WD=function(t,n){return t.validator.map((function(r){return gi([wi(r.onEvent,(function(e){FD(e,t,n).get(a)}))].concat(r.validateOnLoad?[Ai((function(r){FD(r,t,n).get(e)}))]:[]))})).getOr({})},UD=Object.freeze({__proto__:null,events:WD}),$D=[yn("invalidClass"),Bn("getRoot",_.none),In("notify",[Bn("aria","alert"),Bn("getContainer",_.none),Bn("validHtml",""),Bc("onValid"),Bc("onInvalid"),Bc("onValidate")]),In("validator",[yn("validate"),Bn("onEvent","input"),Bn("validateOnLoad",!0)])],YD=Vl({fields:$D,name:"invalidating",active:UD,apis:VD,extra:{validation:function(t){return function(e){var n=Gp.getValue(e);return PD.pure(t(n))}}}}),qD=function(t,e,n,r){return n.getOrCreate(t,e,r)},GD=Object.freeze({__proto__:null,getCoupled:qD}),KD=[wn("others",tn(gt.value,ln()))],XD=function(){var t={},e=function(e,n,r){var o=Dt(n.others);if(o)return Ht(t,r).getOrThunk((function(){var o=Ht(n.others,r).getOrDie("No information found for coupled component: "+r),i=o(e),a=e.getSystem().build(i);return t[r]=a,a}));throw new Error("Cannot find coupled component: "+r+". Known coupled components: "+JSON.stringify(o,null,2))},n=i({});return Ga({readState:n,getOrCreate:e})},JD=Object.freeze({__proto__:null,init:XD}),QD=Vl({fields:KD,name:"coupling",apis:GD,state:JD}),ZD=i("sink"),tE=i(Em({name:ZD(),overrides:i({dom:{tag:"div"},behaviours:Fl([Nh.config({useFixed:f})]),events:gi([Oi(Ao()),Oi(Co()),Oi(Po())])})}));(function(t){t[t["HighlightFirst"]=0]="HighlightFirst",t[t["HighlightNone"]=1]="HighlightNone"})(SD||(SD={}));var eE=function(t,e){var n=t.getHotspot(e).getOr(e),r="hotspot",o=t.getAnchorOverrides();return t.layouts.fold((function(){return{anchor:r,hotspot:n,overrides:o}}),(function(t){return{anchor:r,hotspot:n,overrides:o,layouts:t}}))},nE=function(t,e,n){var r=t.fetch;return r(n).map(e)},rE=function(t,e,n,r,o,i,a){var u=nE(t,e,r),s=sE(r,t);return u.map((function(t){return t.bind((function(t){return _.from(Pw.sketch(h(h({},i.menu()),{uid:za(""),data:t,highlightImmediately:a===SD.HighlightFirst,onOpenMenu:function(t,e){var r=s().getOrDie();Nh.position(r,n,e),dp.decloak(o)},onOpenSubmenu:function(t,e,n){var r=s().getOrDie();Nh.position(r,{anchor:"submenu",item:e},n),dp.decloak(o)},onRepositionMenu:function(t,e,r){var o=s().getOrDie();Nh.position(o,n,e),Y(r,(function(t){Nh.position(o,{anchor:"submenu",item:t.triggeringItem},t.triggeredMenu)}))},onEscape:function(){return Ny.focus(r),dp.close(o),_.some(!0)}})))}))}))},oE=function(t,e,n,r,o,i,a){var u=eE(t,n),s=rE(t,e,u,n,r,o,a);return s.map((function(t){return t.fold((function(){dp.isOpen(r)&&dp.close(r)}),(function(t){dp.cloak(r),dp.open(r,t),i(r)})),r}))},iE=function(t,e,n,r,o,i,a){return dp.close(r),PD.pure(r)},aE=function(t,e,n,r,o,i){var a=QD.getCoupled(n,"sandbox"),u=dp.isOpen(a),s=u?iE:oE;return s(t,e,n,a,r,o,i)},uE=function(t,e,n){var r=yg.getCurrent(e).getOr(e),o=Ps(t.element);n?Ku(r.element,"min-width",o+"px"):Rs(r.element,o)},sE=function(t,e){return t.getSystem().getByUid(e.uid+"-"+ZD()).map((function(t){return function(){return gt.value(t)}})).getOrThunk((function(){return e.lazySink.fold((function(){return function(){return gt.error(new Error("No internal sink is specified, nor could an external sink be found"))}}),(function(e){return function(){return e(t)}}))}))},cE=function(t){dp.getState(t).each((function(t){Pw.repositionMenus(t)}))},lE=function(t,e,n){var r=vc(),o=function(o,i){var a=eE(t,e);r.link(e.element),t.matchWidth&&uE(a.hotspot,i,t.useMinWidth),t.onOpen(a,o,i),void 0!==n&&void 0!==n.onOpen&&n.onOpen(o,i)},i=function(t,o){r.unlink(e.element),void 0!==n&&void 0!==n.onClose&&n.onClose(t,o)},a=sE(e,t);return{dom:{tag:"div",classes:t.sandboxClasses,attributes:{id:r.id,role:"listbox"}},behaviours:Qp.augment(t.sandboxBehaviours,[Gp.config({store:{mode:"memory",initialValue:e}}),dp.config({onOpen:o,onClose:i,isPartOf:function(t,n,r){return yc(n,r)||yc(e,r)},getAttachPoint:function(){return a().getOrDie()}}),yg.config({find:function(t){return dp.getState(t).bind((function(t){return yg.getCurrent(t)}))}}),Yl.config({channels:h(h({},vp({isExtraPart:l})),yp({doReposition:cE}))})])}},fE=function(t){var e=QD.getCoupled(t,"sandbox");cE(e)},dE=function(){return[Bn("sandboxClasses",[]),Qp.field("sandboxBehaviours",[yg,Yl,dp,Gp])]},hE=i([yn("dom"),yn("fetch"),Bc("onOpen"),Hc("onExecute"),Bn("getHotspot",_.some),Bn("getAnchorOverrides",i({})),Vf(),Kp("dropdownBehaviours",[Jy,QD,fy,Ny]),yn("toggleClass"),Bn("eventOrder",{}),An("lazySink"),Bn("matchWidth",!1),Bn("useMinWidth",!1),An("role")].concat(dE())),pE=i([Dm({schema:[zc()],name:"menu",defaults:function(t){return{onExecute:t.onExecute}}}),tE()]),mE=function(t,n,r,o){var i,a=function(e){return Ht(t.dom,"attributes").bind((function(t){return Ht(t,e)}))},u=function(t){dp.getState(t).each((function(t){Pw.highlightPrimary(t)}))},s=function(n){var r=u;aE(t,(function(t){return t}),n,o,r,SD.HighlightFirst).get(e)},c={expand:function(n){Jy.isOn(n)||aE(t,(function(t){return t}),n,o,e,SD.HighlightNone).get(e)},open:function(n){Jy.isOn(n)||aE(t,(function(t){return t}),n,o,e,SD.HighlightFirst).get(e)},isOpen:Jy.isOn,close:function(n){Jy.isOn(n)&&aE(t,(function(t){return t}),n,o,e,SD.HighlightFirst).get(e)},repositionMenus:function(t){Jy.isOn(t)&&fE(t)}},l=function(t,e){return di(t),_.some(!0)};return{uid:t.uid,dom:t.dom,components:n,behaviours:Jp(t.dropdownBehaviours,[Jy.config({toggleClass:t.toggleClass,aria:{mode:"expanded"}}),QD.config({others:{sandbox:function(e){return lE(t,e,{onOpen:function(){Jy.on(e)},onClose:function(){Jy.off(e)}})}}}),fy.config({mode:"special",onSpace:l,onEnter:l,onDown:function(t,e){if(gE.isOpen(t)){var n=QD.getCoupled(t,"sandbox");u(n)}else gE.open(t);return _.some(!0)},onEscape:function(t,e){return gE.isOpen(t)?(gE.close(t),_.some(!0)):_.none()}}),Ny.config({})]),events:Zy(_.some(s)),eventOrder:h(h({},t.eventOrder),(i={},i[Wo()]=["disabling","toggling","alloy.base.behaviour"],i)),apis:c,domModification:{attributes:h(h({"aria-haspopup":"true"},t.role.fold((function(){return{}}),(function(t){return{role:t}}))),"button"===t.dom.tag?{type:a("type").getOr("button")}:{})}}},gE=sg({name:"Dropdown",configFields:hE(),partFields:pE(),factory:mE,apis:{open:function(t,e){return t.open(e)},expand:function(t,e){return t.expand(e)},close:function(t,e){return t.close(e)},isOpen:function(t,e){return t.isOpen(e)},repositionMenus:function(t,e){return t.repositionMenus(e)}}}),vE=function(){return Za({styles:{"-webkit-user-select":"none","user-select":"none","-ms-user-select":"none","-moz-user-select":"-moz-none"},attributes:{unselectable:"on"}})},bE=function(){return gi([vi(Io(),f)])},yE=Object.freeze({__proto__:null,events:bE,exhibit:vE}),wE=Vl({fields:[],name:"unselecting",active:yE}),_E=function(t,e){return gE.sketch({dom:t.dom,components:t.components,toggleClass:"mce-active",dropdownBehaviours:Fl([qk.button(e.providers.isDisabled),Vk(),wE.config({}),ZO.config({})]),layouts:t.layouts,sandboxClasses:["tox-dialog__popups"],lazySink:e.getSink,fetch:function(n){return PD.nu((function(e){return t.fetch(e)})).map((function(r){return _.from(uO(Gt(DT(Oa("menu-value"),r,(function(e){t.onItemAction(n,e)}),t.columns,t.presets,sx.CLOSE_ON_EXECUTE,(function(){return!1}),e.providers),{movement:AT(t.columns,t.presets)})))}))},parts:{menu:Ix(!1,1,t.presets)}})},xE=Oa("color-input-change"),CE=Oa("color-swatch-change"),kE=Oa("color-picker-cancel"),SE=function(t,e,n){var r=KO.parts.field({factory:xD,inputClasses:["tox-textfield"],onSetValue:function(t){return YD.run(t).get((function(){}))},inputBehaviours:Fl([KC.config({disabled:e.providers.isDisabled}),Vk(),ZO.config({}),YD.config({invalidClass:"tox-textbox-field-invalid",getRoot:function(t){return $i(t.element)},notify:{onValid:function(t){var e=Gp.getValue(t);fi(t,xE,{color:e})}},validator:{validateOnLoad:!1,validate:function(t){var e=Gp.getValue(t);if(0===e.length)return PD.pure(gt.value(!0));var n=er.fromTag("span");Ku(n,"background-color",e);var r=ts(n,"background-color").fold((function(){return gt.error("blah")}),(function(t){return gt.value(e)}));return PD.pure(r)}}})]),selectOnFocus:!1}),o=t.label.map((function(t){return aD(t,e.providers)})),i=function(t,e){fi(t,CE,{value:e})},a=function(t,e){u.getOpt(t).each((function(t){"custom"===e?n.colorPicker((function(e){e.fold((function(){return li(t,kE)}),(function(e){i(t,e),dT(e)}))}),"#ffffff"):i(t,"remove"===e?"":e)}))},u=Qw(_E({dom:{tag:"span",attributes:{"aria-label":e.providers.translate("Color swatch")}},layouts:{onRtl:function(){return[gl,ml,wl]},onLtr:function(){return[ml,gl,wl]}},components:[],fetch:xT(n.getColors(),n.hasCustomColors()),columns:n.getColorCols(),presets:"color",onItemAction:a},e));return KO.sketch({dom:{tag:"div",classes:["tox-form__group"]},components:o.toArray().concat([{dom:{tag:"div",classes:["tox-color-input"]},components:[r,u.asSpec()]}]),fieldBehaviours:Fl([Cy("form-field-events",[wi(xE,(function(e,n){u.getOpt(e).each((function(t){Ku(t.element,"background-color",n.event.color)})),fi(e,uD,{name:t.name})})),wi(CE,(function(t,e){KO.getField(t).each((function(n){Gp.setValue(n,e.event.value),yg.getCurrent(t).each(Ny.focus)}))})),wi(kE,(function(t,e){KO.getField(t).each((function(e){yg.getCurrent(t).each(Ny.focus)}))}))])])})},TE=function(t,e,n){return{hue:t,saturation:e,value:n}},OE=function(t){var e=0,n=0,r=0,o=t.red/255,i=t.green/255,a=t.blue/255,u=Math.min(o,Math.min(i,a)),s=Math.max(o,Math.max(i,a));if(u===s)return r=u,TE(0,0,100*r);var c=o===u?i-a:a===u?o-i:a-o;return e=o===u?3:a===u?1:5,e=60*(e-c/(s-u)),n=(s-u)/s,r=s,TE(Math.round(e),Math.round(100*n),Math.round(100*r))},DE=function(t){var e=(100-t)/100*360,n=TE(e,100,100),r=VS(n);return PS(r)},EE=Oa("rgb-hex-update"),AE=Oa("slider-update"),ME=Oa("palette-update"),NE=Em({schema:[yn("dom")],name:"label"}),RE=function(t){return Em({name:t+"-edge",overrides:function(e){var n=e.model.manager.edgeActions[t];return n.fold((function(){return{}}),(function(t){return{events:gi([_i(yo(),(function(e,n,r){return t(e,r)}),[e]),_i(Co(),(function(e,n,r){return t(e,r)}),[e]),_i(ko(),(function(e,n,r){r.mouseIsDown.get()&&t(e,r)}),[e])])}}))}})},PE=RE("top-left"),zE=RE("top"),IE=RE("top-right"),LE=RE("right"),BE=RE("bottom-right"),HE=RE("bottom"),FE=RE("bottom-left"),jE=RE("left"),VE=Om({name:"thumb",defaults:i({dom:{styles:{position:"absolute"}}}),overrides:function(t){return{events:gi([Si(yo(),t,"spectrum"),Si(wo(),t,"spectrum"),Si(_o(),t,"spectrum"),Si(Co(),t,"spectrum"),Si(ko(),t,"spectrum"),Si(To(),t,"spectrum")])}}}),WE=Om({schema:[Gn("mouseIsDown",(function(){return Kn(!1)}))],name:"spectrum",overrides:function(t){var e=t.model,n=e.manager,r=function(e,r){return n.getValueFromEvent(r).map((function(r){return n.setValueFrom(e,t,r)}))};return{behaviours:Fl([fy.config({mode:"special",onLeft:function(e){return n.onLeft(e,t)},onRight:function(e){return n.onRight(e,t)},onUp:function(e){return n.onUp(e,t)},onDown:function(e){return n.onDown(e,t)}}),Ny.config({})]),events:gi([wi(yo(),r),wi(wo(),r),wi(Co(),r),wi(ko(),(function(e,n){t.mouseIsDown.get()&&r(e,n)}))])}}}),UE=[NE,jE,LE,zE,HE,PE,IE,FE,BE,VE,WE],$E="slider.change.value",YE=i($E),qE=function(t){return-1!==t.type.indexOf("touch")},GE=function(t){var e=t.event.raw;if(qE(e)){var n=e;return void 0!==n.touches&&1===n.touches.length?_.some(n.touches[0]).map((function(t){return Os(t.clientX,t.clientY)})):_.none()}var r=e;return void 0!==r.clientX?_.some(r).map((function(t){return Os(t.clientX,t.clientY)})):_.none()},KE="top",XE="right",JE="bottom",QE="left",ZE=function(t){return t.model.minX},tA=function(t){return t.model.minY},eA=function(t){return t.model.minX-1},nA=function(t){return t.model.minY-1},rA=function(t){return t.model.maxX},oA=function(t){return t.model.maxY},iA=function(t){return t.model.maxX+1},aA=function(t){return t.model.maxY+1},uA=function(t,e,n){return e(t)-n(t)},sA=function(t){return uA(t,rA,ZE)},cA=function(t){return uA(t,oA,tA)},lA=function(t){return sA(t)/2},fA=function(t){return cA(t)/2},dA=function(t){return t.stepSize},hA=function(t){return t.snapToGrid},pA=function(t){return t.snapStart},mA=function(t){return t.rounded},gA=function(t,e){return void 0!==t[e+"-edge"]},vA=function(t){return gA(t,QE)},bA=function(t){return gA(t,XE)},yA=function(t){return gA(t,KE)},wA=function(t){return gA(t,JE)},_A=function(t){return t.model.value.get()},xA=function(t){return{x:t}},CA=function(t){return{y:t}},kA=function(t,e){return{x:t,y:e}},SA=function(t,e){fi(t,YE(),{value:e})},TA=function(t,e){SA(t,kA(eA(e),nA(e)))},OA=function(t,e){SA(t,CA(nA(e)))},DA=function(t,e){SA(t,kA(lA(e),nA(e)))},EA=function(t,e){SA(t,kA(iA(e),nA(e)))},AA=function(t,e){SA(t,xA(iA(e)))},MA=function(t,e){SA(t,kA(iA(e),fA(e)))},NA=function(t,e){SA(t,kA(iA(e),aA(e)))},RA=function(t,e){SA(t,CA(aA(e)))},PA=function(t,e){SA(t,kA(lA(e),aA(e)))},zA=function(t,e){SA(t,kA(eA(e),aA(e)))},IA=function(t,e){SA(t,xA(eA(e)))},LA=function(t,e){SA(t,kA(eA(e),fA(e)))},BA=function(t,e,n,r){return tn?n:t===e?e-1:Math.max(e,t-r)},HA=function(t,e,n,r){return t>n?t:td)return m;var g=VA(o,f,d),v=FA(g/h*r+e,p,m);return a&&v>=e&&v<=n?jA(v,e,n,i,u):s?Math.round(v):v},UA=function(t){var e=t.min,n=t.max,r=t.range,o=t.value,i=t.hasMinEdge,a=t.hasMaxEdge,u=t.maxBound,s=t.maxOffset,c=t.centerMinEdge,l=t.centerMaxEdge;return on?a?u:l:(o-e)/r*s},$A="top",YA="right",qA="bottom",GA="left",KA="width",XA="height",JA=function(t){return t.element.dom.getBoundingClientRect()},QA=function(t,e){return t[e]},ZA=function(t){var e=JA(t);return QA(e,GA)},tM=function(t){var e=JA(t);return QA(e,YA)},eM=function(t){var e=JA(t);return QA(e,$A)},nM=function(t){var e=JA(t);return QA(e,qA)},rM=function(t){var e=JA(t);return QA(e,KA)},oM=function(t){var e=JA(t);return QA(e,XA)},iM=function(t,e,n){return(t+e)/2-n},aM=function(t,e){var n=JA(t),r=JA(e),o=QA(n,GA),i=QA(n,YA),a=QA(r,GA);return iM(o,i,a)},uM=function(t,e){var n=JA(t),r=JA(e),o=QA(n,$A),i=QA(n,qA),a=QA(r,$A);return iM(o,i,a)},sM=function(t,e){fi(t,YE(),{value:e})},cM=function(t){return{x:t}},lM=function(t,e,n){var r={min:ZE(e),max:rA(e),range:sA(e),value:n,step:dA(e),snap:hA(e),snapStart:pA(e),rounded:mA(e),hasMinEdge:vA(e),hasMaxEdge:bA(e),minBound:ZA(t),maxBound:tM(t),screenRange:rM(t)};return WA(r)},fM=function(t,e,n){var r=lM(t,e,n),o=cM(r);return sM(t,o),r},dM=function(t,e){var n=ZE(e);sM(t,cM(n))},hM=function(t,e){var n=rA(e);sM(t,cM(n))},pM=function(t,e,n){var r=t>0?HA:BA,o=r(_A(n).x,ZE(n),rA(n),dA(n));return sM(e,cM(o)),_.some(o)},mM=function(t){return function(e,n){return pM(t,e,n).map((function(){return!0}))}},gM=function(t){var e=GE(t);return e.map((function(t){return t.left}))},vM=function(t,e,n,r,o){var i=0,a=rM(t),u=r.bind((function(e){return _.some(aM(e,t))})).getOr(i),s=o.bind((function(e){return _.some(aM(e,t))})).getOr(a),c={min:ZE(e),max:rA(e),range:sA(e),value:n,hasMinEdge:vA(e),hasMaxEdge:bA(e),minBound:ZA(t),minOffset:i,maxBound:tM(t),maxOffset:a,centerMinEdge:u,centerMaxEdge:s};return UA(c)},bM=function(t,e,n,r,o,i){var a=vM(e,i,n,r,o);return ZA(e)-ZA(t)+a},yM=function(t,e,n,r){var o=_A(n),i=bM(t,r.getSpectrum(t),o.x,r.getLeftEdge(t),r.getRightEdge(t),n),a=Ps(e.element)/2;Ku(e.element,"left",i-a+"px")},wM=mM(-1),_M=mM(1),xM=_.none,CM=_.none,kM={"top-left":_.none(),top:_.none(),"top-right":_.none(),right:_.some(AA),"bottom-right":_.none(),bottom:_.none(),"bottom-left":_.none(),left:_.some(IA)},SM=Object.freeze({__proto__:null,setValueFrom:fM,setToMin:dM,setToMax:hM,findValueOfOffset:lM,getValueFromEvent:gM,findPositionOfValue:bM,setPositionFromValue:yM,onLeft:wM,onRight:_M,onUp:xM,onDown:CM,edgeActions:kM}),TM=function(t,e){fi(t,YE(),{value:e})},OM=function(t){return{y:t}},DM=function(t,e,n){var r={min:tA(e),max:oA(e),range:cA(e),value:n,step:dA(e),snap:hA(e),snapStart:pA(e),rounded:mA(e),hasMinEdge:yA(e),hasMaxEdge:wA(e),minBound:eM(t),maxBound:nM(t),screenRange:oM(t)};return WA(r)},EM=function(t,e,n){var r=DM(t,e,n),o=OM(r);return TM(t,o),r},AM=function(t,e){var n=tA(e);TM(t,OM(n))},MM=function(t,e){var n=oA(e);TM(t,OM(n))},NM=function(t,e,n){var r=t>0?HA:BA,o=r(_A(n).y,tA(n),oA(n),dA(n));return TM(e,OM(o)),_.some(o)},RM=function(t){return function(e,n){return NM(t,e,n).map((function(){return!0}))}},PM=function(t){var e=GE(t);return e.map((function(t){return t.top}))},zM=function(t,e,n,r,o){var i=0,a=oM(t),u=r.bind((function(e){return _.some(uM(e,t))})).getOr(i),s=o.bind((function(e){return _.some(uM(e,t))})).getOr(a),c={min:tA(e),max:oA(e),range:cA(e),value:n,hasMinEdge:yA(e),hasMaxEdge:wA(e),minBound:eM(t),minOffset:i,maxBound:nM(t),maxOffset:a,centerMinEdge:u,centerMaxEdge:s};return UA(c)},IM=function(t,e,n,r,o,i){var a=zM(e,i,n,r,o);return eM(e)-eM(t)+a},LM=function(t,e,n,r){var o=_A(n),i=IM(t,r.getSpectrum(t),o.y,r.getTopEdge(t),r.getBottomEdge(t),n),a=Cs(e.element)/2;Ku(e.element,"top",i-a+"px")},BM=_.none,HM=_.none,FM=RM(-1),jM=RM(1),VM={"top-left":_.none(),top:_.some(OA),"top-right":_.none(),right:_.none(),"bottom-right":_.none(),bottom:_.some(RA),"bottom-left":_.none(),left:_.none()},WM=Object.freeze({__proto__:null,setValueFrom:EM,setToMin:AM,setToMax:MM,findValueOfOffset:DM,getValueFromEvent:PM,findPositionOfValue:IM,setPositionFromValue:LM,onLeft:BM,onRight:HM,onUp:FM,onDown:jM,edgeActions:VM}),UM=function(t,e){fi(t,YE(),{value:e})},$M=function(t,e){return{x:t,y:e}},YM=function(t,e,n){var r=lM(t,e,n.left),o=DM(t,e,n.top),i=$M(r,o);return UM(t,i),i},qM=function(t,e,n,r){var o=t>0?HA:BA,i=e?_A(r).x:o(_A(r).x,ZE(r),rA(r),dA(r)),a=e?o(_A(r).y,tA(r),oA(r),dA(r)):_A(r).y;return UM(n,$M(i,a)),_.some(i)},GM=function(t,e){return function(n,r){return qM(t,e,n,r).map((function(){return!0}))}},KM=function(t,e){var n=ZE(e),r=tA(e);UM(t,$M(n,r))},XM=function(t,e){var n=rA(e),r=oA(e);UM(t,$M(n,r))},JM=function(t){return GE(t)},QM=function(t,e,n,r){var o=_A(n),i=bM(t,r.getSpectrum(t),o.x,r.getLeftEdge(t),r.getRightEdge(t),n),a=IM(t,r.getSpectrum(t),o.y,r.getTopEdge(t),r.getBottomEdge(t),n),u=Ps(e.element)/2,s=Cs(e.element)/2;Ku(e.element,"left",i-u+"px"),Ku(e.element,"top",a-s+"px")},ZM=GM(-1,!1),tN=GM(1,!1),eN=GM(-1,!0),nN=GM(1,!0),rN={"top-left":_.some(TA),top:_.some(DA),"top-right":_.some(EA),right:_.some(MA),"bottom-right":_.some(NA),bottom:_.some(PA),"bottom-left":_.some(zA),left:_.some(LA)},oN=Object.freeze({__proto__:null,setValueFrom:YM,setToMin:KM,setToMax:XM,getValueFromEvent:JM,setPositionFromValue:QM,onLeft:ZM,onRight:tN,onUp:eN,onDown:nN,edgeActions:rN}),iN=[Bn("stepSize",1),Bn("onChange",e),Bn("onChoose",e),Bn("onInit",e),Bn("onDragStart",e),Bn("onDragEnd",e),Bn("snapToGrid",!1),Bn("rounded",!0),An("snapStart"),wn("model",sn("mode",{x:[Bn("minX",0),Bn("maxX",100),Gn("value",(function(t){return Kn(t.mode.minX)})),yn("getInitialValue"),Vc("manager",SM)],y:[Bn("minY",0),Bn("maxY",100),Gn("value",(function(t){return Kn(t.mode.minY)})),yn("getInitialValue"),Vc("manager",WM)],xy:[Bn("minX",0),Bn("maxX",100),Bn("minY",0),Bn("maxY",100),Gn("value",(function(t){return Kn({x:t.mode.minX,y:t.mode.minY})})),yn("getInitialValue"),Vc("manager",oN)]})),Kp("sliderBehaviours",[fy,Gp]),Gn("mouseIsDown",(function(){return Kn(!1)}))],aN=function(t,e,n,r){var o,i=function(e){return Wm(e,t,"thumb")},a=function(e){return Wm(e,t,"spectrum")},u=function(e){return Vm(e,t,"left-edge")},s=function(e){return Vm(e,t,"right-edge")},c=function(e){return Vm(e,t,"top-edge")},l=function(e){return Vm(e,t,"bottom-edge")},d=t.model,h=d.manager,p=function(e,n){h.setPositionFromValue(e,n,t,{getLeftEdge:u,getRightEdge:s,getTopEdge:c,getBottomEdge:l,getSpectrum:a})},m=function(e,n){d.value.set(n);var r=i(e);return p(e,r),t.onChange(e,r,n),_.some(!0)},g=function(e){h.setToMin(e,t)},v=function(e){h.setToMax(e,t)},b=function(e){var n=function(){Vm(e,t,"thumb").each((function(n){var r=d.value.get();t.onChoose(e,n,r)}))},r=t.mouseIsDown.get();t.mouseIsDown.set(!1),r&&n()},y=function(e,n){n.stop(),t.mouseIsDown.set(!0),t.onDragStart(e,i(e))},w=function(e,n){n.stop(),t.onDragEnd(e,i(e)),b(e)};return{uid:t.uid,dom:t.dom,components:e,behaviours:Jp(t.sliderBehaviours,[fy.config({mode:"special",focusIn:function(e){return Vm(e,t,"spectrum").map(fy.focusIn).map(f)}}),Gp.config({store:{mode:"manual",getValue:function(t){return d.value.get()}}}),Yl.config({channels:(o={},o[mp()]={onReceive:b},o)})]),events:gi([wi(YE(),(function(t,e){m(t,e.event.value)})),Ai((function(e,n){var r=d.getInitialValue();d.value.set(r);var o=i(e);p(e,o);var u=a(e);t.onInit(e,o,u,d.value.get())})),wi(yo(),y),wi(_o(),w),wi(Co(),y),wi(To(),w)]),apis:{resetToMin:g,resetToMax:v,changeValue:m,refresh:p},domModification:{styles:{position:"relative"}}}},uN=sg({name:"Slider",configFields:iN,partFields:UE,factory:aN,apis:{resetToMin:function(t,e){t.resetToMin(e)},resetToMax:function(t,e){t.resetToMax(e)},refresh:function(t,e){t.refresh(e)}}}),sN=function(t,e){var n=uN.parts.spectrum({dom:{tag:"div",classes:[e("hue-slider-spectrum")],attributes:{role:"presentation"}}}),r=uN.parts.thumb({dom:{tag:"div",classes:[e("hue-slider-thumb")],attributes:{role:"presentation"}}});return uN.sketch({dom:{tag:"div",classes:[e("hue-slider")],attributes:{role:"presentation"}},rounded:!1,model:{mode:"y",getInitialValue:i({y:0})},components:[n,r],sliderBehaviours:Fl([Ny.config({})]),onChange:function(t,e,n){fi(t,AE,{value:n})}})},cN="form",lN=[Kp("formBehaviours",[Gp])],fN=function(t){return""},dN=function(t){var e=function(){var t=[],e=function(e,n){return t.push(e),Lm(cN,fN(e),n)};return{field:e,record:function(){return t}}}(),n=t(e),r=e.record(),o=$(r,(function(t){return Om({name:t,pname:fN(t)})}));return tg(cN,lN,o,pN,n)},hN=function(t,e){return t.fold((function(){return gt.error(e)}),gt.value)},pN=function(t,e){return{uid:t.uid,dom:t.dom,components:e,behaviours:Jp(t.formBehaviours,[Gp.config({store:{mode:"manual",getValue:function(e){var n=$m(e,t);return Mt(n,(function(t,e){return t().bind((function(t){var n=yg.getCurrent(t);return hN(n,new Error("Cannot find a current component to extract the value from for form part '"+e+"': "+xa(t.element)))})).map(Gp.getValue)}))},setValue:function(e,n){At(n,(function(n,r){Vm(e,t,r).each((function(t){yg.getCurrent(t).each((function(t){Gp.setValue(t,n)}))}))}))}}})]),apis:{getField:function(e,n){return Vm(e,t,n).bind(yg.getCurrent)}}}},mN={getField:Ya((function(t,e,n){return t.getField(e,n)})),sketch:dN},gN=Oa("valid-input"),vN=Oa("invalid-input"),bN=Oa("validating-input"),yN="colorcustom.rgb.",wN=function(t,n,r,o){var i=function(e,r){return YD.config({invalidClass:n("invalid"),notify:{onValidate:function(t){fi(t,bN,{type:e})},onValid:function(t){fi(t,gN,{type:e,value:Gp.getValue(t)})},onInvalid:function(t){fi(t,vN,{type:e,value:Gp.getValue(t)})}},validator:{validate:function(e){var n=Gp.getValue(e),o=r(n)?gt.value(!0):gt.error(t("aria.input.invalid"));return PD.pure(o)},validateOnLoad:!1}})},a=function(r,o,a,u,s){var c=t(yN+"range"),l=KO.parts.label({dom:{tag:"label",innerHtml:a,attributes:{"aria-label":u}}}),f=KO.parts.field({data:s,factory:xD,inputAttributes:h({type:"text"},"hex"===o?{"aria-live":"polite"}:{}),inputClasses:[n("textfield")],inputBehaviours:Fl([i(o,r),ZO.config({})]),onSetValue:function(t){if(YD.isInvalid(t)){var n=YD.run(t);n.get(e)}}}),d=[l,f],p="hex"!==o?[KO.parts["aria-descriptor"]({text:c})]:[],m=d.concat(p);return{dom:{tag:"div",attributes:{role:"presentation"}},components:m}},u=function(t,e){var n=PS(e);return mN.getField(t,"hex").each((function(e){Ny.isFocused(e)||Gp.setValue(t,{hex:n.value})})),n},s=function(t,e){var n=e.red,r=e.green,o=e.blue;Gp.setValue(t,{red:n,green:r,blue:o})},c=Qw({dom:{tag:"div",classes:[n("rgba-preview")],styles:{"background-color":"white"},attributes:{role:"presentation"}}}),l=function(t,e){c.getOpt(t).each((function(t){Ku(t.element,"background-color","#"+e.value)}))},f=function(){var e={red:Kn(_.some(255)),green:Kn(_.some(255)),blue:Kn(_.some(255)),hex:Kn(_.some("ffffff"))},i=function(t,e){var n=WS(e);s(t,n),p(n)},f=function(t){return e[t].get()},d=function(t,n){e[t].set(n)},h=function(){return f("red").bind((function(t){return f("green").bind((function(e){return f("blue").map((function(n){return FS(t,e,n,1)}))}))}))},p=function(t){var e=t.red,n=t.green,r=t.blue;d("red",_.some(e)),d("green",_.some(n)),d("blue",_.some(r))},m=function(t,e){var n=e.event;"hex"!==n.type?d(n.type,_.none()):o(t)},g=function(t,e){r(t);var n=OS(e);d("hex",_.some(e));var o=WS(n);s(t,o),p(o),fi(t,EE,{hex:n}),l(t,n)},v=function(t,e,n){var r=parseInt(n,10);d(e,_.some(r)),h().each((function(e){var n=u(t,e);l(t,n)}))},b=function(t){return"hex"===t.type},y=function(t,e){var n=e.event;b(n)?g(t,n.value):v(t,n.type,n.value)},w=function(e){return{label:t(yN+e+".label"),description:t(yN+e+".description")}},x=w("red"),C=w("green"),k=w("blue"),S=w("hex");return Gt(mN.sketch((function(e){return{dom:{tag:"form",classes:[n("rgb-form")],attributes:{"aria-label":t("aria.color.picker")}},components:[e.field("red",KO.sketch(a(jS,"red",x.label,x.description,255))),e.field("green",KO.sketch(a(jS,"green",C.label,C.description,255))),e.field("blue",KO.sketch(a(jS,"blue",k.label,k.description,255))),e.field("hex",KO.sketch(a(AS,"hex",S.label,S.description,"ffffff"))),c.asSpec()],formBehaviours:Fl([YD.config({invalidClass:n("form-invalid")}),Cy("rgb-form-events",[wi(gN,y),wi(vN,m),wi(bN,m)])])}})),{apis:{updateHex:function(t,e){Gp.setValue(t,{hex:e.value}),i(t,e),l(t,e)}}})},d=ug({factory:f,name:"RgbForm",configFields:[],apis:{updateHex:function(t,e,n){t.updateHex(e,n)}},extraApis:{}});return d},_N=function(t,e){var n=uN.parts.spectrum({dom:{tag:"canvas",attributes:{role:"presentation"},classes:[e("sv-palette-spectrum")]}}),r=uN.parts.thumb({dom:{tag:"div",attributes:{role:"presentation"},classes:[e("sv-palette-thumb")],innerHtml:"'}}),o=function(t,e){var n=t.width,r=t.height,o=t.getContext("2d");if(null!==o){o.fillStyle=e,o.fillRect(0,0,n,r);var i=o.createLinearGradient(0,0,n,0);i.addColorStop(0,"rgba(255,255,255,1)"),i.addColorStop(1,"rgba(255,255,255,0)"),o.fillStyle=i,o.fillRect(0,0,n,r);var a=o.createLinearGradient(0,0,0,r);a.addColorStop(0,"rgba(0,0,0,0)"),a.addColorStop(1,"rgba(0,0,0,1)"),o.fillStyle=a,o.fillRect(0,0,n,r)}},a=function(t,e){var n=t.components()[0].element.dom;o(n,YS(e))},u=function(t){var a=i({x:0,y:0}),u=function(t,e,n){fi(t,ME,{value:n})},s=function(t,e,n,r){o(n.element.dom,YS(qS))},c=Fl([yg.config({find:_.some}),Ny.config({})]);return uN.sketch({dom:{tag:"div",attributes:{role:"presentation"},classes:[e("sv-palette")]},model:{mode:"xy",getInitialValue:a},rounded:!1,components:[n,r],onChange:u,onInit:s,sliderBehaviours:c})},s=ug({factory:u,name:"SaturationBrightnessPalette",configFields:[],apis:{setRgba:function(t,e,n){a(e,n)}},extraApis:{}});return s},xN=function(t,n){var r=function(e){var r=wN(t,n,e.onValidHex,e.onInvalidHex),o=_N(t,n),i={paletteRgba:Kn(qS)},a=Qw(o.sketch({})),u=Qw(r.sketch({})),s=function(t,e){a.getOpt(t).each((function(t){var n=WS(e);i.paletteRgba.set(n),o.setRgba(t,n)}))},c=function(t,e){u.getOpt(t).each((function(t){r.updateHex(t,e)}))},l=function(t,e,n){Y(n,(function(n){n(t,e)}))},f=function(){var t=[c];return function(e,n){var r=n.event.value,o=i.paletteRgba.get(),a=OE(o),u=TE(a.hue,r.x,100-r.y),s=VS(u),c=PS(s);l(e,c,t)}},d=function(){var t=[s,c];return function(e,n){var r=n.event.value,o=DE(r.y);l(e,o,t)}};return{uid:e.uid,dom:e.dom,components:[a.asSpec(),sN(t,n),u.asSpec()],behaviours:Fl([Cy("colour-picker-events",[wi(ME,f()),wi(AE,d())]),yg.config({find:function(t){return u.getOpt(t)}}),fy.config({mode:"acyclic"})])}},o=ug({name:"ColourPicker",configFields:[yn("dom"),Bn("onValidHex",e),Bn("onInvalidHex",e)],factory:r});return o},CN=function(){return yg.config({find:_.some})},kN=function(t){return yg.config({find:t.getOpt})},SN=function(t){return yg.config({find:function(e){return Xi(e.element,t).bind((function(t){return e.getSystem().getByDom(t).toOptional()}))}})},TN={self:CN,memento:kN,childAt:SN},ON={"colorcustom.rgb.red.label":"R","colorcustom.rgb.red.description":"Red component","colorcustom.rgb.green.label":"G","colorcustom.rgb.green.description":"Green component","colorcustom.rgb.blue.label":"B","colorcustom.rgb.blue.description":"Blue component","colorcustom.rgb.hex.label":"#","colorcustom.rgb.hex.description":"Hex color code","colorcustom.rgb.range":"Range 0 to 255","colorcustom.sb.saturation":"Saturation","colorcustom.sb.brightness":"Brightness","colorcustom.sb.picker":"Saturation and Brightness Picker","colorcustom.sb.palette":"Saturation and Brightness Palette","colorcustom.sb.instructions":"Use arrow keys to select saturation and brightness, on x and y axes","colorcustom.hue.hue":"Hue","colorcustom.hue.slider":"Hue Slider","colorcustom.hue.palette":"Hue Palette","colorcustom.hue.instructions":"Use arrow keys to select a hue","aria.color.picker":"Color Picker","aria.input.invalid":"Invalid input"},DN=function(t){return ON[t]},EN=function(t){return DN(t)},AN=function(t){var e=function(t){return"tox-"+t},n=xN(EN,e),r=function(t){fi(t,lD,{name:"hex-valid",value:!0})},o=function(t){fi(t,lD,{name:"hex-valid",value:!1})},i=Qw(n.sketch({dom:{tag:"div",classes:[e("color-picker-container")],attributes:{role:"presentation"}},onValidHex:r,onInvalidHex:o}));return{dom:{tag:"div"},components:[i.asSpec()],behaviours:Fl([Gp.config({store:{mode:"manual",getValue:function(t){var e=i.get(t),n=yg.getCurrent(e),r=n.bind((function(t){var e=Gp.getValue(t);return e.hex}));return r.map((function(t){return"#"+t})).getOr("")},setValue:function(t,e){var n=/^#([a-fA-F0-9]{3}(?:[a-fA-F0-9]{3})?)/,r=n.exec(e),o=i.get(t),a=yg.getCurrent(o);a.fold((function(){}),(function(t){Gp.setValue(t,{hex:_.from(r[1]).getOr("")}),mN.getField(t,"hex").each((function(t){li(t,No())}))}))}}}),TN.self()])}},MN=tinymce.util.Tools.resolve("tinymce.Resource"),NN=function(t){return Object.prototype.hasOwnProperty.call(t,"init")},RN=function(t){var e=Kn(_.none()),n=Qw({dom:{tag:t.tag}}),r=Kn(_.none());return{dom:{tag:"div",classes:["tox-custom-editor"]},behaviours:Fl([Cy("custom-editor-events",[Ai((function(o){n.getOpt(o).each((function(n){(NN(t)?t.init(n.element.dom):MN.load(t.scriptId,t.scriptUrl).then((function(e){return e(n.element.dom,t.settings)}))).then((function(t){r.get().each((function(e){t.setValue(e)})),r.set(_.none()),e.set(_.some(t))}))}))}))]),Gp.config({store:{mode:"manual",getValue:function(){return e.get().fold((function(){return r.get().getOr("")}),(function(t){return t.getValue()}))},setValue:function(t,n){e.get().fold((function(){r.set(_.some(n))}),(function(t){return t.setValue(n)}))}}}),TN.self()]),components:[n.asSpec()]}},PN=tinymce.util.Tools.resolve("tinymce.util.Tools"),zN=Be([Bn("preprocess",a),Bn("postprocess",a)]),IN=function(t,e){var n=on("RepresentingConfigs.memento processors",zN,e);return Gp.config({store:{mode:"manual",getValue:function(e){var r=t.get(e),o=Gp.getValue(r);return n.postprocess(o)},setValue:function(e,r){var o=n.preprocess(r),i=t.get(e);Gp.setValue(i,o)}}})},LN=function(t,e,n){return Gp.config(Gt({store:{mode:"manual",getValue:e,setValue:n}},t.map((function(t){return{store:{initialValue:t}}})).getOr({})))},BN=function(t,e,n){return LN(t,(function(t){return e(t.element)}),(function(t,e){return n(t.element,e)}))},HN=function(t){return BN(t,is,as)},FN=function(t){return BN(t,ca,la)},jN=function(t){return Gp.config({store:{mode:"memory",initialValue:t}})},VN={memento:IN,withElement:BN,withComp:LN,domValue:HN,domHtml:FN,memory:jN},WN="jpeg,jpg,jpe,jfi,jif,jfif,png,gif,bmp,webp",UN=function(t,e){var n=PN.explode(e.getSetting("images_file_types",WN,"string")),r=function(t){return V(n,(function(e){return mr(t.name,"."+e)}))};return K(ft(t),r)},$N=function(t,e){var n=function(t,e){e.stop()},r=function(t){return function(e,n){Y(t,(function(t){t(e,n)}))}},o=function(t,e){if(!KC.isDisabled(t)){var n=e.event.raw;a(t,n.dataTransfer.files)}},i=function(t,e){var n=e.event.raw.target;a(t,n.files)},a=function(n,r){Gp.setValue(n,UN(r,e)),fi(n,uD,{name:t.name})},u=Qw({dom:{tag:"input",attributes:{type:"file",accept:"image/*"},styles:{display:"none"}},behaviours:Fl([Cy("input-file-events",[Oi(Po()),Oi($o())])])}),s=function(t){return{uid:t.uid,dom:{tag:"div",classes:["tox-dropzone-container"]},behaviours:Fl([VN.memory([]),TN.self(),KC.config({}),Jy.config({toggleClass:"dragenter",toggleOnExecute:!1}),Cy("dropzone-events",[wi("dragenter",r([n,Jy.toggle])),wi("dragleave",r([n,Jy.toggle])),wi("dragover",n),wi("drop",r([n,o])),wi(Ro(),i)])]),components:[{dom:{tag:"div",classes:["tox-dropzone"],styles:{}},components:[{dom:{tag:"p",innerHtml:e.translate("Drop an image here")}},Jw.sketch({dom:{tag:"button",innerHtml:e.translate("Browse for an image"),styles:{position:"relative"},classes:["tox-button","tox-button--secondary"]},components:[u.asSpec()],action:function(t){var e=u.get(t);e.element.dom.click()},buttonBehaviours:Fl([ZO.config({}),qk.button(e.isDisabled),Vk()])})]}]}},c=t.label.map((function(t){return aD(t,e)})),l=KO.parts.field({factory:{sketch:s}});return eD(c,l,["tox-form__group--stretched"],[])},YN=function(t,e){return{dom:{tag:"div",classes:["tox-form__grid","tox-form__grid--"+t.columns+"col"]},components:$(t.items,e.interpreter)}},qN=Oa("alloy-fake-before-tabstop"),GN=Oa("alloy-fake-after-tabstop"),KN=function(t){return{dom:{tag:"div",styles:{width:"1px",height:"1px",outline:"none"},attributes:{tabindex:"0"},classes:t},behaviours:Fl([Ny.config({ignore:!0}),ZO.config({})])}},XN=function(t){return{dom:{tag:"div",classes:["tox-navobj"]},components:[KN([qN]),t,KN([GN])],behaviours:Fl([TN.childAt(1)])}},JN=function(t,e){fi(t,Ao(),{raw:{which:9,shiftKey:e}})},QN=function(t,e){var n=e.element;Au(n,qN)?JN(t,!0):Au(n,GN)&&JN(t,!1)},ZN=function(t){return mO(t,["."+qN,"."+GN].join(","),l)},tR=!(qr().browser.isIE()||qr().browser.isEdge()),eR=function(t){var e=Kn("");return{getValue:function(t){return e.get()},setValue:function(n,r){if(t)ha(n.element,"srcdoc",r);else{ha(n.element,"src","javascript:''");var o=n.element.dom.contentWindow.document;o.open(),o.write(r),o.close()}e.set(r)}}},nR=function(t,e){var n=tR&&t.sandboxed,r=h(h({},t.label.map((function(t){return{title:t}})).getOr({})),n?{sandbox:"allow-scripts allow-same-origin"}:{}),o=eR(n),i=t.label.map((function(t){return aD(t,e)})),a=function(t){return XN({uid:t.uid,dom:{tag:"iframe",attributes:r},behaviours:Fl([ZO.config({}),Ny.config({}),VN.withComp(_.none(),o.getValue,o.setValue)])})},u=KO.parts.field({factory:{sketch:a}});return eD(i,u,["tox-form__group--stretched"],[])};function rR(t,e){return aR(document.createElement("canvas"),t,e)}function oR(t){var e=rR(t.width,t.height),n=iR(e);return n.drawImage(t,0,0),e}function iR(t){return t.getContext("2d")}function aR(t,e,n){return t.width=e,t.height=n,t}function uR(t){return t.naturalWidth||t.width}function sR(t){return t.naturalHeight||t.height}var cR=function(){var t=function(t){if("object"!==typeof this)throw new TypeError("Promises must be constructed via new");if("function"!==typeof t)throw new TypeError("not a function");this._state=null,this._value=null,this._deferreds=[],l(t,r(a,this),r(u,this))},e=window,n=t.immediateFn||"function"===typeof e.setImmediate&&e.setImmediate||function(t){setTimeout(t,1)};function r(t,e){return function(){return t.apply(e,arguments)}}var o=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)};function i(t){var e=this;null!==this._state?n((function(){var n=e._state?t.onFulfilled:t.onRejected;if(null!==n){var r;try{r=n(e._value)}catch(o){return void t.reject(o)}t.resolve(r)}else(e._state?t.resolve:t.reject)(e._value)})):this._deferreds.push(t)}function a(t){try{if(t===this)throw new TypeError("A promise cannot be resolved with itself.");if(t&&("object"===typeof t||"function"===typeof t)){var e=t.then;if("function"===typeof e)return void l(r(e,t),r(a,this),r(u,this))}this._state=!0,this._value=t,s.call(this)}catch(n){u.call(this,n)}}function u(t){this._state=!1,this._value=t,s.call(this)}function s(){for(var t=0,e=this._deferreds;tn?r=n:rn?t=n:t2)&&(i=i<.5?.5:2,u=!0),(a<.5||a>2)&&(a=a<.5?.5:2,u=!0);var s=$R(t,i,a);return u?s.then((function(t){return UR(t,e,n)})):s}function $R(t,e,n){return new lR((function(r){var o=uR(t),i=sR(t),a=Math.floor(o*e),u=Math.floor(i*n),s=rR(a,u),c=iR(s);c.drawImage(t,0,0,o,i,0,0,a,u),r(s)}))}function YR(t,e){return t.toCanvas().then((function(n){return qR(n,t.getType(),e)}))}function qR(t,e,n){var r=rR(t.width,t.height),o=iR(r),i=0,a=0;return n=n<0?360+n:n,90!==n&&270!==n||aR(r,r.height,r.width),90!==n&&180!==n||(i=r.width),270!==n&&180!==n||(a=r.height),o.translate(i,a),o.rotate(n*Math.PI/180),o.drawImage(t,0,0),_R(r,e)}function GR(t,e){return t.toCanvas().then((function(n){return KR(n,t.getType(),e)}))}function KR(t,e,n){var r=rR(t.width,t.height),o=iR(r);return"v"===n?(o.scale(1,-1),o.drawImage(t,0,-r.height)):(o.scale(-1,1),o.drawImage(t,-r.width,0)),_R(r,e)}function XR(t,e,n,r,o){return t.toCanvas().then((function(i){return JR(i,t.getType(),e,n,r,o)}))}function JR(t,e,n,r,o,i){var a=rR(o,i),u=iR(a);return u.drawImage(t,-n,-r),_R(a,e)}function QR(t,e,n){return t.toCanvas().then((function(r){return UR(r,e,n).then((function(e){return _R(e,t.getType())}))}))}var ZR,tP=function(t){return BR(t)},eP=function(t){return VR(t)},nP=function(t,e){return WR(t,e)},rP=function(t,e,n,r){return jR(t,e,n,r)},oP=function(t,e){return HR(t,e)},iP=function(t,e){return FR(t,e)},aP=function(t,e){return GR(t,e)},uP=function(t,e,n,r,o){return XR(t,e,n,r,o)},sP=function(t,e,n){return QR(t,e,n)},cP=function(t,e){return YR(t,e)},lP=function(t,e){return h({dom:{tag:"span",innerHtml:t,classes:["tox-icon","tox-tbtn__icon-wrap"]}},e)},fP=function(t,e){return lP(t_(t,e),{})},dP=function(t,e){return lP(t_(t,e),{behaviours:Fl([_y.config({})])})},hP=function(t,e,n){return{dom:{tag:"span",innerHtml:n.translate(t),classes:[e+"__select-label"]},behaviours:Fl([_y.config({})])}},pP=Oa("toolbar.button.execute"),mP=function(t){return Ri((function(e,n){Gk(t,e)((function(n){fi(e,pP,{buttonApi:n}),t.onAction(n)}))}))},gP=(ZR={},ZR[Wo()]=["disabling","alloy.base.behaviour","toggling","toolbar-button-events"],ZR),vP=Oa("update-menu-text"),bP=Oa("update-menu-icon"),yP=function(t,n,r){var o=Kn(e),i=t.text.map((function(t){return Qw(hP(t,n,r.providers))})),a=t.icon.map((function(t){return Qw(dP(t,r.providers.icons))})),s=function(t,e){var n=Gp.getValue(t);return Ny.focus(n),fi(n,"keydown",{raw:e.event.raw}),gE.close(n),_.some(!0)},c=t.role.fold((function(){return{}}),(function(t){return{role:t}})),l=t.tooltip.fold((function(){return{}}),(function(t){var e=r.providers.translate(t);return{title:e,"aria-label":e}})),f=Qw(gE.sketch(h(h(h({},t.uid?{uid:t.uid}:{}),c),{dom:{tag:"button",classes:[n,n+"--select"].concat($(t.classes,(function(t){return n+"--"+t}))),attributes:h({},l)},components:Zk([a.map((function(t){return t.asSpec()})),i.map((function(t){return t.asSpec()})),_.some({dom:{tag:"div",classes:[n+"__select-chevron"],innerHtml:t_("chevron-down",r.providers.icons)}})]),matchWidth:!0,useMinWidth:!0,dropdownBehaviours:Fl(m(t.dropdownBehaviours,[qk.button((function(){return t.disabled||r.providers.isDisabled()})),Vk(),wE.config({}),_y.config({}),Cy("dropdown-events",[Kk(t,o),Xk(t,o)]),Cy("menubutton-update-display-text",[wi(vP,(function(t,e){i.bind((function(e){return e.getOpt(t)})).each((function(t){_y.set(t,[gs(r.providers.translate(e.event.text))])}))})),wi(bP,(function(t,e){a.bind((function(e){return e.getOpt(t)})).each((function(t){_y.set(t,[dP(e.event.icon,r.providers.icons)])}))}))])])),eventOrder:Gt(gP,{mousedown:["focusing","alloy.base.behaviour","item-type-events","normal-dropdown-events"]}),sandboxBehaviours:Fl([fy.config({mode:"special",onLeft:s,onRight:s})]),lazySink:r.getSink,toggleClass:n+"--active",parts:{menu:Ix(!1,t.columns,t.presets)},fetch:function(e){return PD.nu(u(t.fetch,e))}})));return f.asSpec()},wP=function(t){return T(t)},_P=function(t){return"separator"===t.type},xP=function(t){return Ft(t,"getSubmenuItems")},CP={type:"separator"},kP=function(t,e){var n=J(t,(function(t,n){return wP(n)?""===n?t:"|"===n?t.length>0&&!_P(t[t.length-1])?t.concat([CP]):t:Ft(e,n.toLowerCase())?t.concat([e[n.toLowerCase()]]):t:t.concat([n])}),[]);return n.length>0&&_P(n[n.length-1])&&n.pop(),n},SP=function(t,e){var n=t.getSubmenuItems(),r=DP(n,e),o=Gt(r.menus,ce(t.value,r.items)),i=Gt(r.expansions,ce(t.value,t.value));return{item:t,menus:o,expansions:i}},TP=function(t,e){return xP(t)?SP(t,e):{item:t,menus:{},expansions:{}}},OP=function(t){if(_P(t))return t;var e=Ht(t,"value").getOrThunk((function(){return Oa("generated-menu-item")}));return Gt({value:e},t)},DP=function(t,e){var n=kP(T(t)?t.split(" "):t,e);return X(n,(function(t,n){var r=OP(n),o=TP(r,e);return{menus:Gt(t.menus,o.menus),items:[o.item].concat(t.items),expansions:Gt(t.expansions,o.expansions)}}),{menus:{},expansions:{},items:[]})},EP=function(t,e,n,r){var o=Oa("primary-menu"),i=DP(t,n.shared.providers.menuItems());if(0===i.items.length)return _.none();var a=aO(o,i.items,e,n,r),u=Mt(i.menus,(function(t,r){return aO(r,t,e,n,!1)})),s=Gt(u,ce(o,a));return _.from(Pw.tieredData(o,s,i.expansions))},AP=function(t){return{isDisabled:function(){return KC.isDisabled(t)},setDisabled:function(e){return KC.set(t,e)},setActive:function(e){var n=t.element;e?(Ou(n,"tox-tbtn--enabled"),ha(n,"aria-pressed",!0)):(Eu(n,"tox-tbtn--enabled"),ba(n,"aria-pressed"))},isActive:function(){return Au(t.element,"tox-tbtn--enabled")}}},MP=function(t,e,n,r){return yP({text:t.text,icon:t.icon,tooltip:t.tooltip,role:r,fetch:function(e,r){t.fetch((function(t){r(EP(t,sx.CLOSE_ON_EXECUTE,n,!1))}))},onSetup:t.onSetup,getApi:AP,columns:1,presets:"normal",classes:[],dropdownBehaviours:[ZO.config({})]},e,n.shared)},NP=function(t,e,n){var r=function(t){return function(r){var o=!r.isActive();r.setActive(o),t.storage.set(o),n.shared.getSink().each((function(n){e().getOpt(n).each((function(e){Xl(e.element),fi(e,lD,{name:t.name,value:t.storage.get()})}))}))}},o=function(t){return function(e){e.setActive(t.storage.get())}};return function(e){e($(t,(function(t){var e=t.text.fold((function(){return{}}),(function(t){return{text:t}}));return h(h({type:t.type,active:!1},e),{onAction:r(t),onSetup:o(t)})})))}},RP=function(t,e,n,r,o,i){void 0===n&&(n=[]);var a=e.fold((function(){return{}}),(function(t){return{action:t}})),u=h({buttonBehaviours:Fl([qk.button((function(){return t.disabled||i.isDisabled()})),Vk(),ZO.config({}),Cy("button press",[yi("click"),yi("mousedown")])].concat(n)),eventOrder:{click:["button press","alloy.base.behaviour"],mousedown:["button press","alloy.base.behaviour"]}},a),s=Gt(u,{dom:r});return Gt(s,{components:o})},PP=function(t,e,n,r){void 0===r&&(r=[]);var o=t.tooltip.map((function(t){return{"aria-label":n.translate(t),title:n.translate(t)}})).getOr({}),i={tag:"button",classes:["tox-tbtn"],attributes:o},a=t.icon.map((function(t){return fP(t,n.icons)})),u=Zk([a]);return RP(t,e,r,i,u,n)},zP=function(t,e,n,r){void 0===r&&(r=[]);var o=PP(t,_.some(e),n,r);return Jw.sketch(o)},IP=function(t,e,n,r,o){void 0===r&&(r=[]),void 0===o&&(o=[]);var i=n.translate(t.text),a=t.icon?t.icon.map((function(t){return fP(t,n.icons)})):_.none(),u=a.isSome()?Zk([a]):[],s=a.isSome()?{}:{innerHtml:i},c=m(t.primary||t.borderless?["tox-button"]:["tox-button","tox-button--secondary"],a.isSome()?["tox-button--icon"]:[],t.borderless?["tox-button--naked"]:[],o),l=h(h({tag:"button",classes:c},s),{attributes:{title:i}});return RP(t,e,r,l,u,n)},LP=function(t,e,n,r,o){void 0===r&&(r=[]),void 0===o&&(o=[]);var i=IP(t,_.some(e),n,r,o);return Jw.sketch(i)},BP=function(t,e){return function(n){"custom"===e?fi(n,lD,{name:t,value:{}}):"submit"===e?li(n,fD):"cancel"===e&&li(n,cD)}},HP=function(t,e){return"menu"===e},FP=function(t,e){return"custom"===e||"cancel"===e||"submit"===e},jP=function(t,n,r){if(HP(t,n)){var o=function(){return u},i=t,a=h(h({},t),{onSetup:function(n){return n.setDisabled(t.disabled),e},fetch:NP(i.items,o,r)}),u=Qw(MP(a,"tox-tbtn",r,_.none()));return u.asSpec()}if(FP(t,n)){var s=BP(t.name,n),c=h(h({},t),{borderless:!1});return LP(c,s,r.shared.providers,[])}},VP=function(t,e){var n=BP(t.name,"custom");return nD(_.none(),KO.parts.field(h({factory:Jw},IP(t,_.some(n),e,[VN.memory(""),TN.self()]))))},WP=i([Bn("field1Name","field1"),Bn("field2Name","field2"),Fc("onLockedChange"),Ic(["lockClass"]),Bn("locked",!1),Qp.field("coupledFieldBehaviours",[yg,Gp])]),UP=function(t,e,n){return Vm(t,e,n).bind(yg.getCurrent)},$P=function(t,e){return Om({factory:KO,name:t,overrides:function(t){return{fieldBehaviours:Fl([Cy("coupled-input-behaviour",[wi(No(),(function(n){UP(n,t,e).each((function(e){Vm(n,t,"lock").each((function(r){Jy.isOn(r)&&t.onLockedChange(n,e,r)}))}))}))])])}}})},YP=i([$P("field1","field2"),$P("field2","field1"),Om({factory:Jw,schema:[yn("dom")],name:"lock",overrides:function(t){return{buttonBehaviours:Fl([Jy.config({selected:t.locked,toggleClass:t.markers.lockClass,aria:{mode:"pressed"}})])}}})]),qP=function(t,e,n,r){return{uid:t.uid,dom:t.dom,components:e,behaviours:Qp.augment(t.coupledFieldBehaviours,[yg.config({find:_.some}),Gp.config({store:{mode:"manual",getValue:function(e){var n,r=qm(e,t,["field1","field2"]);return n={},n[t.field1Name]=Gp.getValue(r.field1()),n[t.field2Name]=Gp.getValue(r.field2()),n},setValue:function(e,n){var r=qm(e,t,["field1","field2"]);jt(n,t.field1Name)&&Gp.setValue(r.field1(),n[t.field1Name]),jt(n,t.field2Name)&&Gp.setValue(r.field2(),n[t.field2Name])}}})]),apis:{getField1:function(e){return Vm(e,t,"field1")},getField2:function(e){return Vm(e,t,"field2")},getLock:function(e){return Vm(e,t,"lock")}}}},GP=sg({name:"FormCoupledInputs",configFields:WP(),partFields:YP(),factory:qP,apis:{getField1:function(t,e){return t.getField1(e)},getField2:function(t,e){return t.getField2(e)},getLock:function(t,e){return t.getLock(e)}}}),KP=function(t){var e={"":0,px:0,pt:1,mm:1,pc:2,ex:2,em:2,ch:2,rem:2,cm:3,in:4,"%":4},n=function(t){return t in e?e[t]:1},r=t.value.toFixed(n(t.unit));return-1!==r.indexOf(".")&&(r=r.replace(/\.?0*$/,"")),r+t.unit},XP=function(t){var e=/^\s*(\d+(?:\.\d+)?)\s*(|cm|mm|in|px|pt|pc|em|ex|ch|rem|vw|vh|vmin|vmax|%)\s*$/,n=e.exec(t);if(null!==n){var r=parseFloat(n[1]),o=n[2];return gt.value({value:r,unit:o})}return gt.error(t)},JP=function(t,e){var n={"":96,px:96,pt:72,cm:2.54,pc:12,mm:25.4,in:1},r=function(t){return Object.prototype.hasOwnProperty.call(n,t)};return t.unit===e?_.some(t.value):r(t.unit)&&r(e)?n[t.unit]===n[e]?_.some(t.value):_.some(t.value/n[t.unit]*n[e]):_.none()},QP=function(t){return _.none()},ZP=function(t,e){return function(n){return JP(n,e).map((function(n){return{value:n*t,unit:e}}))}},tz=function(t,e){var n=XP(t).toOptional(),r=XP(e).toOptional();return fg(n,r,(function(t,e){return JP(t,e.unit).map((function(t){return e.value/t})).map((function(t){return ZP(t,e.unit)})).getOr(QP)})).getOr(QP)},ez=function(t,e){var n=QP,r=Oa("ratio-event"),o=GP.parts.lock({dom:{tag:"button",classes:["tox-lock","tox-button","tox-button--naked","tox-button--icon"],attributes:{title:e.translate(t.label.getOr("Constrain proportions"))}},components:[{dom:{tag:"span",classes:["tox-icon","tox-lock-icon__lock"],innerHtml:t_("lock",e.icons)}},{dom:{tag:"span",classes:["tox-icon","tox-lock-icon__unlock"],innerHtml:t_("unlock",e.icons)}}],buttonBehaviours:Fl([KC.config({disabled:function(){return t.disabled||e.isDisabled()}}),Vk(),ZO.config({})])}),i=function(t){return{dom:{tag:"div",classes:["tox-form__group"]},components:t}},a=function(n){return KO.parts.field({factory:xD,inputClasses:["tox-textfield"],inputBehaviours:Fl([KC.config({disabled:function(){return t.disabled||e.isDisabled()}}),Vk(),ZO.config({}),Cy("size-input-events",[wi(Do(),(function(t,e){fi(t,r,{isField1:n})})),wi(Ro(),(function(e,n){fi(e,uD,{name:t.name})}))])]),selectOnFocus:!1})},u=function(t){return{dom:{tag:"label",classes:["tox-label"],innerHtml:e.translate(t)}}},s=GP.parts.field1(i([KO.parts.label(u("Width")),a(!0)])),c=GP.parts.field2(i([KO.parts.label(u("Height")),a(!1)]));return GP.sketch({dom:{tag:"div",classes:["tox-form__group"]},components:[{dom:{tag:"div",classes:["tox-form__controls-h-stack"]},components:[s,c,i([u(" "),o])]}],field1Name:"width",field2Name:"height",locked:!0,markers:{lockClass:"tox-locked"},onLockedChange:function(t,e,r){XP(Gp.getValue(t)).each((function(t){n(t).each((function(t){Gp.setValue(e,KP(t))}))}))},coupledFieldBehaviours:Fl([KC.config({disabled:function(){return t.disabled||e.isDisabled()},onDisabled:function(t){GP.getField1(t).bind(KO.getField).each(KC.disable),GP.getField2(t).bind(KO.getField).each(KC.disable),GP.getLock(t).each(KC.disable)},onEnabled:function(t){GP.getField1(t).bind(KO.getField).each(KC.enable),GP.getField2(t).bind(KO.getField).each(KC.enable),GP.getLock(t).each(KC.enable)}}),Vk(),Cy("size-input-events2",[wi(r,(function(t,e){var r=e.event.isField1,o=r?GP.getField1(t):GP.getField2(t),i=r?GP.getField2(t):GP.getField1(t),a=o.map(Gp.getValue).getOr(""),u=i.map(Gp.getValue).getOr("");n=tz(a,u)}))])])})},nz=i(Oa("undo")),rz=i(Oa("redo")),oz=i(Oa("zoom")),iz=i(Oa("back")),az=i(Oa("apply")),uz=i(Oa("swap")),sz=i(Oa("transform")),cz=i(Oa("temp-transform")),lz=i(Oa("transform-apply")),fz={undo:nz,redo:rz,zoom:oz,back:iz,apply:az,swap:uz,transform:sz,tempTransform:cz,transformApply:lz},dz=i("save-state"),hz=i("disable"),pz=i("enable"),mz={formActionEvent:lD,saveState:dz,disable:hz,enable:pz},gz=function(t,n){var r=function(t,e,r,o){return Qw(LP({name:t,text:t,disabled:r,primary:o,icon:_.none(),borderless:!1},e,n))},o=function(t,e,r,o){return Qw(zP({name:t,icon:_.some(t),tooltip:_.some(e),disabled:o,primary:!1,borderless:!1},r,n))},a=function(t,e){t.map((function(t){var n=t.get(e);n.hasConfigured(KC)&&KC.disable(n)}))},u=function(t,e){t.map((function(t){var n=t.get(e);n.hasConfigured(KC)&&KC.enable(n)}))},s={tag:"div",classes:["tox-image-tools__toolbar","tox-image-tools-edit-panel"]},c=e,l=function(t,e,n){fi(t,e,n)},f=function(t){return li(t,mz.disable())},d=function(t){return li(t,mz.enable())},h=function(t,e){f(t),l(t,fz.transform(),{transform:e}),d(t)},p=function(t,e){f(t),l(t,fz.tempTransform(),{transform:e}),d(t)},m=function(t){return function(){at.getOpt(t).each((function(t){_y.set(t,[ot])}))}},g=function(t,e){f(t),l(t,fz.transformApply(),{transform:e,swap:m(t)}),d(t)},v=function(){return r("Back",(function(t){return l(t,fz.back(),{swap:m(t)})}),!1,!1)},b=function(){return Qw({dom:{tag:"div",classes:["tox-spacer"]},behaviours:Fl([KC.config({})])})},y=function(){return r("Apply",(function(t){return l(t,fz.apply(),{swap:m(t)})}),!0,!0)},w=function(){return function(e){var n=t.getRect();return uP(e,n.x,n.y,n.w,n.h)}},x=[v(),b(),r("Apply",(function(e){var n=w();g(e,n),t.hideCrop()}),!1,!0)],C=WO.sketch({dom:s,components:x.map((function(t){return t.asSpec()})),containerBehaviours:Fl([Cy("image-tools-crop-buttons-events",[wi(mz.disable(),(function(t,e){a(x,t)})),wi(mz.enable(),(function(t,e){u(x,t)}))])])}),k=Qw(ez({name:"size",label:_.none(),constrain:!0,disabled:!1},n)),S=function(t,e){return function(n){return sP(n,t,e)}},T=[v(),b(),k,b(),r("Apply",(function(t){k.getOpt(t).each((function(e){var n=Gp.getValue(e),r=parseInt(n.width,10),o=parseInt(n.height,10),i=S(r,o);g(t,i)}))}),!1,!0)],O=WO.sketch({dom:s,components:T.map((function(t){return t.asSpec()})),containerBehaviours:Fl([Cy("image-tools-resize-buttons-events",[wi(mz.disable(),(function(t,e){a(T,t)})),wi(mz.enable(),(function(t,e){u(T,t)}))])])}),D=function(t,e){return function(n){return t(n,e)}},E=D(aP,"h"),A=D(aP,"v"),M=D(cP,-90),N=D(cP,90),R=function(t,e){p(t,e)},P=[v(),b(),o("flip-horizontally","Flip horizontally",(function(t){R(t,E)}),!1),o("flip-vertically","Flip vertically",(function(t){R(t,A)}),!1),o("rotate-left","Rotate counterclockwise",(function(t){R(t,M)}),!1),o("rotate-right","Rotate clockwise",(function(t){R(t,N)}),!1),b(),y()],z=WO.sketch({dom:s,components:P.map((function(t){return t.asSpec()})),containerBehaviours:Fl([Cy("image-tools-fliprotate-buttons-events",[wi(mz.disable(),(function(t,e){a(P,t)})),wi(mz.enable(),(function(t,e){u(P,t)}))])])}),I=function(t,e,r,o,a){var u=uN.parts.label({dom:{tag:"label",classes:["tox-label"],innerHtml:n.translate(t)}}),s=uN.parts.spectrum({dom:{tag:"div",classes:["tox-slider__rail"],attributes:{role:"presentation"}}}),c=uN.parts.thumb({dom:{tag:"div",classes:["tox-slider__handle"],attributes:{role:"presentation"}}});return Qw(uN.sketch({dom:{tag:"div",classes:["tox-slider"],attributes:{role:"presentation"}},model:{mode:"x",minX:r,maxX:a,getInitialValue:i({x:o})},components:[u,s,c],sliderBehaviours:Fl([Ny.config({})]),onChoose:e}))},L=function(t,e,n,r,o){var i=function(t,n,r){var o=D(e,r.x/100);h(t,o)};return I(t,i,n,r,o)},B=function(t,e,n,r,o){return[v(),L(t,e,n,r,o),y()]},H=function(t,e,n,r,o){var i=B(t,e,n,r,o);return WO.sketch({dom:s,components:i.map((function(t){return t.asSpec()})),containerBehaviours:Fl([Cy("image-tools-filter-panel-buttons-events",[wi(mz.disable(),(function(t,e){a(i,t)})),wi(mz.enable(),(function(t,e){u(i,t)}))])])})},F=[v(),b(),y()],j=WO.sketch({dom:s,components:F.map((function(t){return t.asSpec()}))}),V=H("Brightness",oP,-100,0,100),W=H("Contrast",iP,-100,0,100),U=H("Gamma",nP,-100,0,100),$=function(t,e,n){return function(r){return rP(r,t,e,n)}},Y=function(t){var e=function(t,e,n){var r=q.getOpt(t),o=K.getOpt(t),i=G.getOpt(t);r.each((function(e){o.each((function(n){i.each((function(r){var o=Gp.getValue(e).x/100,i=Gp.getValue(r).x/100,a=Gp.getValue(n).x/100,u=$(o,i,a);h(t,u)}))}))}))};return I(t,e,0,100,200)},q=Y("R"),G=Y("G"),K=Y("B"),X=[v(),q,G,K,y()],J=WO.sketch({dom:s,components:X.map((function(t){return t.asSpec()}))}),Q=function(t,e,n){return function(r){var o=function(){at.getOpt(r).each((function(e){_y.set(e,[t]),n(e)}))};l(r,fz.swap(),{transform:e,swap:o})}},Z=function(e){t.showCrop()},tt=function(e){k.getOpt(e).each((function(e){var n=t.getMeasurements(),r=n.width,o=n.height;Gp.setValue(e,{width:r,height:o})}))},et=_.some(eP),nt=_.some(tP),rt=[o("crop","Crop",Q(C,_.none(),Z),!1),o("resize","Resize",Q(O,_.none(),tt),!1),o("orientation","Orientation",Q(z,_.none(),c),!1),o("brightness","Brightness",Q(V,_.none(),c),!1),o("sharpen","Sharpen",Q(j,et,c),!1),o("contrast","Contrast",Q(W,_.none(),c),!1),o("color-levels","Color levels",Q(J,_.none(),c),!1),o("gamma","Gamma",Q(U,_.none(),c),!1),o("invert","Invert",Q(j,nt,c),!1)],ot=WO.sketch({dom:s,components:rt.map((function(t){return t.asSpec()}))}),it=WO.sketch({dom:{tag:"div"},components:[ot],containerBehaviours:Fl([_y.config({})])}),at=Qw(it),ut=function(t){return at.getOpt(t).map((function(t){var e=t.components()[0];return e.components()[e.components().length-1]}))};return{memContainer:at,getApplyButton:ut}},vz=tinymce.util.Tools.resolve("tinymce.geom.Rect"),bz=tinymce.util.Tools.resolve("tinymce.dom.DomQuery"),yz=tinymce.util.Tools.resolve("tinymce.util.Observable"),wz=tinymce.util.Tools.resolve("tinymce.util.VK");function _z(t){var e=Math.max,n=t.documentElement,r=t.body,o=e(n.scrollWidth,r.scrollWidth),i=e(n.clientWidth,r.clientWidth),a=e(n.offsetWidth,r.offsetWidth),u=e(n.scrollHeight,r.scrollHeight),s=e(n.clientHeight,r.clientHeight),c=e(n.offsetHeight,r.offsetHeight);return{width:o
    ").css({position:"absolute",top:0,left:0,width:f.width,height:f.height,zIndex:2147483647,opacity:1e-4,cursor:s}).appendTo(a.body),bz(a).on("mousemove touchmove",c).on("mouseup touchend",l),e.start(t)},c=function(t){if(xz(t),t.button!==r)return l(t);t.deltaX=t.screenX-o,t.deltaY=t.screenY-i,t.preventDefault(),e.drag(t)},l=function(t){xz(t),bz(a).off("mousemove touchmove",c).off("mouseup touchend",l),n.remove(),e.stop&&e.stop(t)};this.destroy=function(){bz(u).off()},bz(u).on("mousedown touchstart",s)}var kz=0,Sz=function(t,e,n,r,o){var i,a="tox-",u=a+"crid-"+kz++,s=[{name:"move",xMul:0,yMul:0,deltaX:1,deltaY:1,deltaW:0,deltaH:0,label:"Crop Mask"},{name:"nw",xMul:0,yMul:0,deltaX:1,deltaY:1,deltaW:-1,deltaH:-1,label:"Top Left Crop Handle"},{name:"ne",xMul:1,yMul:0,deltaX:0,deltaY:1,deltaW:1,deltaH:-1,label:"Top Right Crop Handle"},{name:"sw",xMul:0,yMul:1,deltaX:1,deltaY:0,deltaW:-1,deltaH:1,label:"Bottom Left Crop Handle"},{name:"se",xMul:1,yMul:1,deltaX:0,deltaY:0,deltaW:1,deltaH:1,label:"Bottom Right Crop Handle"}],c=["top","right","bottom","left"],l=function(t,e){return{x:e.x+t.x,y:e.y+t.y,w:e.w,h:e.h}},f=function(t,e){return{x:e.x-t.x,y:e.y-t.y,w:e.w,h:e.h}},d=function(){return f(n,t)};function h(e,r,o,i){var a,u,s,c,l;a=r.x,u=r.y,s=r.w,c=r.h,a+=o*e.deltaX,u+=i*e.deltaY,s+=o*e.deltaW,c+=i*e.deltaH,s<20&&(s=20),c<20&&(c=20),l=t=vz.clamp({x:a,y:u,w:s,h:c},n,"move"===e.name),l=f(n,l),x.fire("updateRect",{rect:l}),y(l)}function p(){function e(e){var n;return new Cz(u,{document:r.ownerDocument,handle:u+"-"+e.name,start:function(){n=t},drag:function(t){h(e,n,t.deltaX,t.deltaY)}})}bz('
    ').appendTo(r),PN.each(c,(function(t){bz("#"+u,r).append('
    @@ -226,7 +243,7 @@ {% block webpack_loader_js %} {% render_chunk_vendors 'js' %} - {% render_bundle 'global' 'js' %} + {% render_bundle 'global' 'js' %} {% endblock webpack_loader_js %} {% block webpack_loader_chunks_js %} diff --git a/sapl/templates/base/AppConfig.html b/sapl/templates/base/AppConfig.html new file mode 100644 index 000000000..6865a8500 --- /dev/null +++ b/sapl/templates/base/AppConfig.html @@ -0,0 +1,6 @@ +{% extends "base.html" %} +{% load i18n crispy_forms_tags menus%} + +{% block base_content %} +{% crispy form %} +{% endblock base_content %} diff --git a/sapl/templates/base/RelatorioMateriasAnoAssunto.html b/sapl/templates/base/RelatorioMateriasAnoAssunto.html new file mode 100644 index 000000000..49858beae --- /dev/null +++ b/sapl/templates/base/RelatorioMateriasAnoAssunto.html @@ -0,0 +1,60 @@ +{% extends "crud/list.html" %} +{% load i18n %} +{% load crispy_forms_tags %} +{% block base_content %} +
    + +

    Matérias com assunto cadastrado

    + {% if not object_list %} +

    {{ NO_ENTRIES_MSG }}

    + {% else %} + + + + + + + + + + {% for o in object_list %} + + + + + + {% endfor %} + +
    AnoAssuntoTotal
    + {{o.ano}} + {{o.assunto_materia}}{{o.total}}
    + {% endif %} +
    +

    Matérias sem assunto cadastrado

    + + + + + + + + + {% for o in materias_sem_assunto %} + + + + + {% endfor %} + +
    AnoTotal
    + {{o.ano}} + {{o.total}}
    +
    + {% include 'paginacao.html'%} +{% endblock %} \ No newline at end of file diff --git a/sapl/templates/base/RelatorioMateriasPorTramitacao_filter.html b/sapl/templates/base/RelatorioMateriasPorTramitacao_filter.html index 497b3a53e..b26c04924 100644 --- a/sapl/templates/base/RelatorioMateriasPorTramitacao_filter.html +++ b/sapl/templates/base/RelatorioMateriasPorTramitacao_filter.html @@ -55,8 +55,8 @@ {{ materia_em_tramitacao.materia.ementa }} - {{ materia_em_tramitacao.materia.tramitacao_set.last.unidade_tramitacao_destino }} - {{ materia_em_tramitacao.materia.tramitacao_set.last.status }} + {{ materia_em_tramitacao.materia.tramitacao_set.first.unidade_tramitacao_destino }} + {{ materia_em_tramitacao.materia.tramitacao_set.first.status }} {% for autor in materia_em_tramitacao.materia.autores.all %}

    {{autor}}

    {% endfor %} {% endfor %} diff --git a/sapl/templates/base/RelatorioPresencaSessao_filter.html b/sapl/templates/base/RelatorioPresencaSessao_filter.html index c3ad733af..9688ab33f 100644 --- a/sapl/templates/base/RelatorioPresencaSessao_filter.html +++ b/sapl/templates/base/RelatorioPresencaSessao_filter.html @@ -46,12 +46,12 @@ {% for p in parlamentares %} - {{p.parlamentar}} / {{p.parlamentar|filiacao_intervalo_filter:date_range|default:"Sem Partido"}} + {{p.parlamentar}} / {{p.parlamentar|filiacao_intervalo_filter:date_range|default:"Sem Partido"}} {% if p.titular %} Sim {% else %} Não {% endif %} {% if p.parlamentar.ativo %} Sim {% else %} Não {% endif %} {{p.sessao_count}} {{p.sessao_porc}} - {% if exibir_ordem %} + {% if exibir_ordem %} {{p.ordemdia_count}} {{p.ordemdia_porc}} {% endif %} diff --git a/sapl/templates/base/autor_detail.html b/sapl/templates/base/autor_detail.html deleted file mode 100644 index c9938e372..000000000 --- a/sapl/templates/base/autor_detail.html +++ /dev/null @@ -1,14 +0,0 @@ -{% extends "crud/detail.html" %} -{% load i18n %} -{% load crispy_forms_tags staticfiles %} - -{% block sub_actions %} - -{% endblock sub_actions %} diff --git a/sapl/templates/base/autor_filter.html b/sapl/templates/base/autor_filter.html deleted file mode 100644 index 5e1a05542..000000000 --- a/sapl/templates/base/autor_filter.html +++ /dev/null @@ -1,51 +0,0 @@ -{% extends "crud/list.html" %} -{% load i18n %} -{% load crispy_forms_tags staticfiles %} - -{% block base_content %} - {% if not show_results %} - {% crispy filter.form %} - {% else %} -
    - {% trans 'Fazer nova pesquisa' %} - {% if not request.user.is_anonymous %} - Cadastrar Autor - {% endif %} -
    -
    - {% if numero_res > 0 %} - {% if numero_res == 1 %} -

    Foi encontrado {{ numero_res }} resultado

    - {% else %} -

    Foram encontrados {{ numero_res }} resultados

    - {% endif %} - - - - - - - - - - {% for autor in page_obj %} - - - - - - {% endfor %} - -
    Tipo do AutorNome do AutorUsuário
    {{ autor.tipo }} - - {% if autor.nome %} {{ autor.nome }} {% else %} - {% endif %} - - {% if autor.user %} {{ autor.user }} {% else %} - {% endif %}
    - {% else %} -

    {{ NO_ENTRIES_MSG }}

    - {% endif %} - {% endif %} -
    - {% include 'paginacao.html'%} -


    -{% endblock base_content %} diff --git a/sapl/templates/base/autor_form.html b/sapl/templates/base/autor_form.html index 49007257d..492cb6da7 100644 --- a/sapl/templates/base/autor_form.html +++ b/sapl/templates/base/autor_form.html @@ -87,58 +87,12 @@ $(document).ready(function(){ update_search(pk); }); - $('input[name=action_user]').change(function(event) { - if (!this.checked) - return; - - $('#div_id_username input').prop('readonly', ''); - - if (event.target.value == 'N') { - $('.new_user_fields').addClass('hidden'); - if ($('input[name=username]').attr('data') != '') - $('.radiogroup-status').removeClass('hidden'); - - if (flag_create) { - $('#div_id_username').addClass('hidden'); - } - else { - $('#div_id_username input').prop('readonly', 'readonly'); - } - } - else { - $('.radiogroup-status').addClass('hidden'); - $('#div_id_username').removeClass('hidden'); - $('.new_user_fields').addClass('hidden'); - } - if (!flag_create) { - var username = $('input[name=username]'); - if (username.length == 1) { - if ((event.target.value == 'A' && username.attr('data') != '' && username[0].value != username.attr('data')) - || (event.target.value == 'C' && username.attr('data') != '')) - $('.radiogroup-status').removeClass('hidden'); - } - } - }); - - $('input[name=username]').keyup(function(event) { - if (!flag_create) - if (this.getAttribute('data') != '' && this.value != this.getAttribute('data')) - $('.radiogroup-status').removeClass('hidden'); - else - $('.radiogroup-status').addClass('hidden'); - }); - - $('input[name=action_user]:checked').trigger('change'); if (flag_create) $('input[name=autor_related]').closest('.radio').remove(); var pk = $('#id_tipo').val(); if (pk) update_search(pk, $('#id_q').val().length > 0) - }); - - - {% endblock %} diff --git a/sapl/templates/base/layouts.yaml b/sapl/templates/base/layouts.yaml index b3b0daca0..658eb8e17 100644 --- a/sapl/templates/base/layouts.yaml +++ b/sapl/templates/base/layouts.yaml @@ -10,37 +10,60 @@ CasaLegislativa: - email - informacao_geral +UserDetail: + {% trans 'Usuário' %}: + - usuario username:3 is_active:2 + - auth_token votante_set__parlamentar|m2m_urlize_for_detail operadorautor_set__autor|m2m_urlize_for_detail + - groups + - user_permissions + AppConfig: - {% trans 'Configurações da Aplicação' %}: - - documentos_administrativos - {% trans 'Norma Jurídica' %}: - - esfera_federacao + {% trans 'Configurações Gerais' %}: + - esfera_federacao documentos_administrativos sapl_as_sapn + + #{% trans 'Módulo Parlamentares' %}: + + #{% trans 'Módulo Mesa Diretora' %}: + + #{% trans 'Módulo Comissões' %}: - {% trans 'Proposições e Protocolo' %}: - - sequencia_numeracao_proposicao sequencia_numeracao_protocolo + #{% trans 'Módulo Bancadas Parlamentares' %}: + + # {% trans 'Módulo Normas Jurídicas' %}: + + {% trans 'Módulo Proposições' %}: + - sequencia_numeracao_proposicao sequencia_numeracao_protocolo inicio_numeracao_protocolo - protocolo_manual receber_recibo_proposicao - proposicao_incorporacao_obrigatoria escolher_numero_materia_proposicao - {% trans 'Tramitações' %}: + {% trans 'Módulo Matéria Legislativa' %}: - tramitacao_materia tramitacao_documento - {% trans 'Textos Articulados' %}: + {% trans 'Módulo Textos Articulados' %}: - texto_articulado_proposicao texto_articulado_materia texto_articulado_norma + #{% trans 'Módulo Sessão Plenária' %}: + + #{% trans 'Módulo LexML' %}: + + #{% trans 'Módulo Administrativo' %}: + + {% trans 'Estatísticas de acesso' %}: - estatisticas_acesso_normas - + {% trans 'Assinaturas' %}: - assinatura_ata - {% trans 'Cronômetros do Painel' %}: - - cronometro_discurso cronometro_aparte + {% trans 'Módulo Painel' %}: + - cronometro_discurso cronometro_aparte - cronometro_ordem cronometro_consideracoes - - {% trans 'Configurações do Painel' %}: - mostrar_brasao_painel + {% trans 'Segurança' %}: + - google_recaptcha_site_key google_recaptcha_secret_key + TipoAutor: {% trans 'Tipo Autor' %}: - descricao @@ -49,7 +72,12 @@ Autor: {% trans 'Autor' %}: - tipo:3 nome - cargo + - operadores AutorCreate: {% trans 'Cadastro de Usuários Autores' %}: - tipo:3 search_autor + +OperadorAutor: + {% trans 'Operador de Autor' %}: + - user diff --git a/sapl/templates/base/login.html b/sapl/templates/base/login.html index 93e974e2b..1c9abbb9d 100644 --- a/sapl/templates/base/login.html +++ b/sapl/templates/base/login.html @@ -1,12 +1,12 @@ {% extends "crud/detail.html" %} {% load i18n %} {% block base_content %} - + + - + @@ -445,7 +445,7 @@ var resultado_votacao_upper = $("#resultado_votacao").text().toUpperCase(); console.log(resultado_votacao_upper, data['tipo_resultado']); if (resultado_votacao_upper.search("APROV") != -1){ - $("#resultado_votacao").css("color", "green"); + $("#resultado_votacao").css("color", "#7CFC00"); $("#mat_em_votacao").text("Matéria Votada"); } else if (resultado_votacao_upper.search("REJEIT") != -1){ diff --git a/sapl/templates/painel/mensagem.html b/sapl/templates/painel/mensagem.html index 99b32dcad..da8e355d4 100644 --- a/sapl/templates/painel/mensagem.html +++ b/sapl/templates/painel/mensagem.html @@ -4,9 +4,9 @@ {% load webpack_static from webpack_loader %} - + - + diff --git a/sapl/templates/painel/parlamentares.html b/sapl/templates/painel/parlamentares.html index 583f4886f..3dbe6e740 100644 --- a/sapl/templates/painel/parlamentares.html +++ b/sapl/templates/painel/parlamentares.html @@ -5,9 +5,9 @@ {% load webpack_static from webpack_loader %} - + - + diff --git a/sapl/templates/painel/votacao.html b/sapl/templates/painel/votacao.html index 7f55d6e04..e73551160 100644 --- a/sapl/templates/painel/votacao.html +++ b/sapl/templates/painel/votacao.html @@ -3,9 +3,9 @@ {% load webpack_static from webpack_loader %} - + - + diff --git a/sapl/templates/parlamentares/bloco_detail.html b/sapl/templates/parlamentares/bloco_detail.html new file mode 100644 index 000000000..347b1d162 --- /dev/null +++ b/sapl/templates/parlamentares/bloco_detail.html @@ -0,0 +1,9 @@ +{% extends "crud/detail.html" %} +{% load i18n %} +{% load crispy_forms_tags cropping %} +{% block actions %} + {{ block.super }} + +{% endblock actions %} \ No newline at end of file diff --git a/sapl/templates/parlamentares/blocomembro_list.html b/sapl/templates/parlamentares/blocomembro_list.html new file mode 100644 index 000000000..495886f3e --- /dev/null +++ b/sapl/templates/parlamentares/blocomembro_list.html @@ -0,0 +1,9 @@ +{% extends "crud/list.html" %} +{% load i18n %} +{% load common_tags %} + +{% block more_buttons %} + + Bloco Parlamentar + +{% endblock more_buttons %} \ No newline at end of file diff --git a/sapl/templates/parlamentares/coligacao_detail.html b/sapl/templates/parlamentares/coligacao_detail.html new file mode 100644 index 000000000..5002901e7 --- /dev/null +++ b/sapl/templates/parlamentares/coligacao_detail.html @@ -0,0 +1,13 @@ +{% extends "crud/detail.html" %} +{% load i18n %} +{% load crispy_forms_tags cropping %} +{% block actions %} + +
    + Editar + Excluir +
    +{% endblock actions %} \ No newline at end of file diff --git a/sapl/templates/parlamentares/coligacao_filter.html b/sapl/templates/parlamentares/coligacao_filter.html new file mode 100644 index 000000000..ba3a82c33 --- /dev/null +++ b/sapl/templates/parlamentares/coligacao_filter.html @@ -0,0 +1,51 @@ +{% extends "crud/list.html" %} +{% load i18n %} +{% load crispy_forms_tags staticfiles %} + +{% block base_content %} + {% if not show_results %} + {% crispy filter.form %} + {% else %} +
    + {% trans 'Fazer nova pesquisa' %} + {% if not request.user.is_anonymous %} + Adicionar Coligação + {% endif %} +
    +
    + {% if numero_res > 0 %} + {% if numero_res == 1 %} +

    Foi encontrado {{ numero_res }} resultado.

    + {% else %} +

    Foram encontrados {{ numero_res }} resultados.

    + {% endif %} + + + + + + + + + + {% for coligacao in page_obj %} + + + + + + {% endfor %} + +
    Nome da ColigaçãoLegislaturaNúmero de Votos
    + {{coligacao.nome}} + + {{coligacao.legislatura}} + {% if coligacao.numero_votos %} {{ coligacao.numero_votos }} {% else %} - {% endif %}
    + {% else %} +

    {{ NO_ENTRIES_MSG }}

    + {% endif %} + {% endif %} +
    + {% include 'paginacao.html'%} +


    +{% endblock base_content %} diff --git a/sapl/templates/parlamentares/frente_detail.html b/sapl/templates/parlamentares/frente_detail.html new file mode 100644 index 000000000..7f8a52f23 --- /dev/null +++ b/sapl/templates/parlamentares/frente_detail.html @@ -0,0 +1,9 @@ +{% extends "crud/detail.html" %} +{% load i18n %} +{% load crispy_forms_tags cropping %} +{% block actions %} + {{ block.super }} + +{% endblock actions %} diff --git a/sapl/templates/parlamentares/frente_form.html b/sapl/templates/parlamentares/frente_form.html index 2e6bdca3e..cb0523070 100644 --- a/sapl/templates/parlamentares/frente_form.html +++ b/sapl/templates/parlamentares/frente_form.html @@ -22,24 +22,6 @@
    -
    -
    -
    -
    -
    -
    -
    - -
    -
    - {{ form.parlamentares|as_crispy_field }} -
    -
    -
    -
    {{ form.descricao|as_crispy_field }} @@ -50,79 +32,4 @@ -{% endblock base_content %} - -{% block extra_js %} - -{% endblock %} +{% endblock base_content %} \ No newline at end of file diff --git a/sapl/templates/parlamentares/frenteparlamentar_list.html b/sapl/templates/parlamentares/frenteparlamentar_list.html new file mode 100644 index 000000000..308578415 --- /dev/null +++ b/sapl/templates/parlamentares/frenteparlamentar_list.html @@ -0,0 +1,9 @@ +{% extends "crud/list.html" %} +{% load i18n %} +{% load common_tags %} + +{% block more_buttons %} + + Frente Parlamentar + +{% endblock more_buttons %} \ No newline at end of file diff --git a/sapl/templates/parlamentares/layouts.yaml b/sapl/templates/parlamentares/layouts.yaml index 7c3e59908..0064d8bfd 100644 --- a/sapl/templates/parlamentares/layouts.yaml +++ b/sapl/templates/parlamentares/layouts.yaml @@ -117,12 +117,27 @@ ComposicaoColigacao: - partido Frente: - {% trans 'Frente' %}: + {% trans 'Frente Parlamentar' %}: - nome - data_criacao data_extincao - - parlamentares - descricao +FrenteCargo: + {% trans 'Cargo' %}: + - nome_cargo cargo_unico:4 + +FrenteParlamentar: + {% trans 'Parlamentar'%}: + - frente + - cargo:4 parlamentar + - data_entrada data_saida + +FrenteParlamentarList: + {% trans 'Parlamentares'%}: + - id + - cargo:4 parlamentar + - data_entrada data_saida + Votante: {% trans 'Votante' %}: - parlamentar user @@ -133,4 +148,20 @@ Bloco: - nome - data_criacao data_extincao - partidos - - descricao \ No newline at end of file + - descricao + +BlocoCargo: + {% trans 'Cargo' %}: + - nome_cargo cargo_unico:4 + +BlocoMembro: + {% trans 'Membro'%}: + - bloco + - cargo:4 parlamentar + - data_entrada data_saida + +BlocoMembroList: + {% trans 'Membros'%}: + - id + - cargo:4 parlamentar + - data_entrada data_saida diff --git a/sapl/templates/parlamentares/parlamentar_frentes_list.html b/sapl/templates/parlamentares/parlamentar_frentes_list.html new file mode 100644 index 000000000..d756e6444 --- /dev/null +++ b/sapl/templates/parlamentares/parlamentar_frentes_list.html @@ -0,0 +1,42 @@ +{% extends "crud/list.html" %} +{% load i18n %} +{% load common_tags %} + +{% block actions %} + {{ block.super }} +{% endblock actions %} + +{% block base_content %} + {% if not frentes %} +

    O {{ nome_parlamentar }} não têm participações em Frentes Parlamentares.

    + {% else %} +

    Frentes ({{ nome_parlamentar }})

    +
    + Total de Frentes: {{ num_frentes }} + + + + + + + + + + + {% for frente in frentes %} + + + + + + + {% endfor %} + +
    Frent{{ num_frentes|pluralize:"e,es" }}CargoData de EntradaData de Saída
    + {{ frente.frente }} + {{ frente.cargo.nome_cargo }}{{ frente.data_entrada }}{% if frente.data_saida %} {{ frente.data_saida }} {% else %} - {% endif %}
    + {% endif %} +
    + {% include 'paginacao.html'%} +


    +{% endblock base_content %} \ No newline at end of file diff --git a/sapl/templates/parlamentares/parlamentares_list.html b/sapl/templates/parlamentares/parlamentares_list.html index 0285fa173..4c9d281c6 100644 --- a/sapl/templates/parlamentares/parlamentares_list.html +++ b/sapl/templates/parlamentares/parlamentares_list.html @@ -54,7 +54,7 @@ - + @@ -63,9 +63,7 @@ - {% else %} Não existem Matérias de Expediente para essa Sessão Plenária {% endif %}

    Matérias da Ordem do Dia

    {% if materias_ordem %} - + {% for m in materias_ordem %} - - - - + + + + + {% endfor %}
    MatériaEmenta
    MatériaEmentaSituação
    - {{m.numero}} - {{m.titulo}}
    - Autor{{ m.autor|length|pluralize:"es" }}: {{ m.autor|join:', ' }} -
    {{m.ementa|safe}}
    {{m.observacao|linebreaksbr|safe}}
    + {{m.numero}} - {{m.titulo}}
    + Processo: {{ m.processo }}
    + Autor{{ m.autor|length|pluralize:"es" }}: {{ m.autor|join:', ' }} +
    + {{m.ementa|safe}} + {% if m.observacao %}

    Obs.: {{m.observacao}} {% endif %} +
    {{m.situacao|linebreaksbr|safe}}
    {% else %} diff --git a/sapl/templates/robots.txt b/sapl/templates/robots.txt new file mode 100644 index 000000000..b91cf694b --- /dev/null +++ b/sapl/templates/robots.txt @@ -0,0 +1,1193 @@ +User-agent: semrushbot +Disallow: / + +User-agent: BLEXBot +Disallow: / + +User-agent: SemrushBot +Disallow: / + +User-agent: AhrefsBot +Disallow: / + +User-agent: spbot +Disallow: / + +User-agent: dotbot +Disallow: / + +User-agent: ahrefsbot +Disallow: / + +User-agent: mojeekbot +Disallow: / + +User-agent: yandex +Disallow: / + +User-agent: baiduspider +Disallow: / + +## Crawlers Adicionais + +User-agent: 404checker +Disallow:/ +User-agent: 404enemy +Disallow:/ +User-agent: 80legs +Disallow:/ +User-agent: Abonti +Disallow:/ +User-agent: Aboundex +Disallow:/ +User-agent: Aboundexbot +Disallow:/ +User-agent: Acunetix +Disallow:/ +User-agent: ADmantX +Disallow:/ +User-agent: AfD-Verbotsverfahren +Disallow:/ +User-agent: AhrefsBot +Disallow:/ +User-agent: AIBOT +Disallow:/ +User-agent: AiHitBot +Disallow:/ +User-agent: Aipbot +Disallow:/ +User-agent: Alexibot +Disallow:/ +User-agent: Alligator +Disallow:/ +User-agent: AllSubmitter +Disallow:/ +User-agent: AlphaBot +Disallow:/ +User-agent: Anarchie +Disallow:/ +User-agent: Ankit +Disallow:/ +User-agent: Apexoo +Disallow:/ +User-agent: archive.org_bot +Disallow:/ +User-agent: arquivo.pt +Disallow:/ +User-agent: arquivo-web-crawler +Disallow:/ +User-agent: Aspiegel +Disallow:/ +User-agent: ASPSeek +Disallow:/ +User-agent: Asterias +Disallow:/ +User-agent: Attach +Disallow:/ +User-agent: autoemailspider +Disallow:/ +User-agent: AwarioRssBot +Disallow:/ +User-agent: AwarioSmartBot +Disallow:/ +User-agent: BackDoorBot +Disallow:/ +User-agent: Backlink-Ceck +Disallow:/ +User-agent: backlink-check +Disallow:/ +User-agent: BacklinkCrawler +Disallow:/ +User-agent: BackStreet +Disallow:/ +User-agent: BackWeb +Disallow:/ +User-agent: Badass +Disallow:/ +User-agent: Bandit +Disallow:/ +User-agent: Barkrowler +Disallow:/ +User-agent: BatchFTP +Disallow:/ +User-agent: Battleztar Bazinga +Disallow:/ +User-agent: BBBike +Disallow:/ +User-agent: BDCbot +Disallow:/ +User-agent: BDFetch +Disallow:/ +User-agent: BetaBot +Disallow:/ +User-agent: Bigfoot +Disallow:/ +User-agent: Bitacle +Disallow:/ +User-agent: Blackboard +Disallow:/ +User-agent: Black Hole +Disallow:/ +User-agent: BlackWidow +Disallow:/ +User-agent: BLEXBot +Disallow:/ +User-agent: Blow +Disallow:/ +User-agent: BlowFish +Disallow:/ +User-agent: Boardreader +Disallow:/ +User-agent: Bolt +Disallow:/ +User-agent: BotALot +Disallow:/ +User-agent: Brandprotect +Disallow:/ +User-agent: Brandwatch +Disallow:/ +User-agent: Buddy +Disallow:/ +User-agent: BuiltBotTough +Disallow:/ +User-agent: BuiltWith +Disallow:/ +User-agent: Bullseye +Disallow:/ +User-agent: BunnySlippers +Disallow:/ +User-agent: BuzzSumo +Disallow:/ +User-agent: Calculon +Disallow:/ +User-agent: CATExplorador +Disallow:/ +User-agent: CazoodleBot +Disallow:/ +User-agent: CCBot +Disallow:/ +User-agent: Cegbfeieh +Disallow:/ +User-agent: CheeseBot +Disallow:/ +User-agent: CherryPicker +Disallow:/ +User-agent: CheTeam +Disallow:/ +User-agent: ChinaClaw +Disallow:/ +User-agent: Chlooe +Disallow:/ +User-agent: Claritybot +Disallow:/ +User-agent: Cliqzbot +Disallow:/ +User-agent: Cloud mapping +Disallow:/ +User-agent: coccocbot-web +Disallow:/ +User-agent: Cogentbot +Disallow:/ +User-agent: cognitiveseo +Disallow:/ +User-agent: Collector +Disallow:/ +User-agent: com.plumanalytics +Disallow:/ +User-agent: Copier +Disallow:/ +User-agent: CopyRightCheck +Disallow:/ +User-agent: Copyscape +Disallow:/ +User-agent: Cosmos +Disallow:/ +User-agent: Craftbot +Disallow:/ +User-agent: crawler4j +Disallow:/ +User-agent: crawler.feedback +Disallow:/ +User-agent: crawl.sogou.com +Disallow:/ +User-agent: CrazyWebCrawler +Disallow:/ +User-agent: Crescent +Disallow:/ +User-agent: CrunchBot +Disallow:/ +User-agent: CSHttp +Disallow:/ +User-agent: Curious +Disallow:/ +User-agent: Custo +Disallow:/ +User-agent: DatabaseDriverMysqli +Disallow:/ +User-agent: DataCha0s +Disallow:/ +User-agent: DBLBot +Disallow:/ +User-agent: demandbase-bot +Disallow:/ +User-agent: Demon +Disallow:/ +User-agent: Deusu +Disallow:/ +User-agent: Devil +Disallow:/ +User-agent: Digincore +Disallow:/ +User-agent: DigitalPebble +Disallow:/ +User-agent: DIIbot +Disallow:/ +User-agent: Dirbuster +Disallow:/ +User-agent: Disco +Disallow:/ +User-agent: Discobot +Disallow:/ +User-agent: Discoverybot +Disallow:/ +User-agent: Dispatch +Disallow:/ +User-agent: DittoSpyder +Disallow:/ +User-agent: DnyzBot +Disallow:/ +User-agent: DomainAppender +Disallow:/ +User-agent: DomainCrawler +Disallow:/ +User-agent: DomainSigmaCrawler +Disallow:/ +User-agent: Domains Project +Disallow:/ +User-agent: domainsproject.org +Disallow:/ +User-agent: DomainStatsBot +Disallow:/ +User-agent: Dotbot +Disallow:/ +User-agent: Download Wonder +Disallow:/ +User-agent: Dragonfly +Disallow:/ +User-agent: Drip +Disallow:/ +User-agent: DSearch +Disallow:/ +User-agent: DTS Agent +Disallow:/ +User-agent: EasyDL +Disallow:/ +User-agent: Ebingbong +Disallow:/ +User-agent: eCatch +Disallow:/ +User-agent: ECCP/1.0 +Disallow:/ +User-agent: Ecxi +Disallow:/ +User-agent: EirGrabber +Disallow:/ +User-agent: EMail Siphon +Disallow:/ +User-agent: EMail Wolf +Disallow:/ +User-agent: EroCrawler +Disallow:/ +User-agent: evc-batch +Disallow:/ +User-agent: Evil +Disallow:/ +User-agent: Exabot +Disallow:/ +User-agent: Express WebPictures +Disallow:/ +User-agent: ExtLinksBot +Disallow:/ +User-agent: Extractor +Disallow:/ +User-agent: ExtractorPro +Disallow:/ +User-agent: Extreme Picture Finder +Disallow:/ +User-agent: EyeNetIE +Disallow:/ +User-agent: Ezooms +Disallow:/ +User-agent: facebookscraper +Disallow:/ +User-agent: FDM +Disallow:/ +User-agent: FemtosearchBot +Disallow:/ +User-agent: FHscan +Disallow:/ +User-agent: Fimap +Disallow:/ +User-agent: Firefox/7.0 +Disallow:/ +User-agent: FlashGet +Disallow:/ +User-agent: Flunky +Disallow:/ +User-agent: Foobot +Disallow:/ +User-agent: Freeuploader +Disallow:/ +User-agent: FrontPage +Disallow:/ +User-agent: FyberSpider +Disallow:/ +User-agent: Fyrebot +Disallow:/ +User-agent: GalaxyBot +Disallow:/ +User-agent: Genieo +Disallow:/ +User-agent: GermCrawler +Disallow:/ +User-agent: Getintent +Disallow:/ +User-agent: GetRight +Disallow:/ +User-agent: GetWeb +Disallow:/ +User-agent: Gigablast +Disallow:/ +User-agent: Gigabot +Disallow:/ +User-agent: G-i-g-a-b-o-t +Disallow:/ +User-agent: Go-Ahead-Got-It +Disallow:/ +User-agent: Gotit +Disallow:/ +User-agent: GoZilla +Disallow:/ +User-agent: Go!Zilla +Disallow:/ +User-agent: Grabber +Disallow:/ +User-agent: GrabNet +Disallow:/ +User-agent: Grafula +Disallow:/ +User-agent: GrapeFX +Disallow:/ +User-agent: GrapeshotCrawler +Disallow:/ +User-agent: GridBot +Disallow:/ +User-agent: GT::WWW +Disallow:/ +User-agent: Haansoft +Disallow:/ +User-agent: HaosouSpider +Disallow:/ +User-agent: Harvest +Disallow:/ +User-agent: Havij +Disallow:/ +User-agent: HEADMasterSEO +Disallow:/ +User-agent: heritrix +Disallow:/ +User-agent: Heritrix +Disallow:/ +User-agent: Hloader +Disallow:/ +User-agent: HMView +Disallow:/ +User-agent: HTMLparser +Disallow:/ +User-agent: HTTP::Lite +Disallow:/ +User-agent: HTTrack +Disallow:/ +User-agent: Humanlinks +Disallow:/ +User-agent: HybridBot +Disallow:/ +User-agent: Iblog +Disallow:/ +User-agent: IDBot +Disallow:/ +User-agent: Id-search +Disallow:/ +User-agent: IlseBot +Disallow:/ +User-agent: Image Fetch +Disallow:/ +User-agent: Image Sucker +Disallow:/ +User-agent: IndeedBot +Disallow:/ +User-agent: Indy Library +Disallow:/ +User-agent: InfoNaviRobot +Disallow:/ +User-agent: InfoTekies +Disallow:/ +User-agent: instabid +Disallow:/ +User-agent: Intelliseek +Disallow:/ +User-agent: InterGET +Disallow:/ +User-agent: Internet Ninja +Disallow:/ +User-agent: InternetSeer +Disallow:/ +User-agent: internetVista monitor +Disallow:/ +User-agent: ips-agent +Disallow:/ +User-agent: Iria +Disallow:/ +User-agent: IRLbot +Disallow:/ +User-agent: isitwp.com +Disallow:/ +User-agent: Iskanie +Disallow:/ +User-agent: IstellaBot +Disallow:/ +User-agent: JamesBOT +Disallow:/ +User-agent: Jbrofuzz +Disallow:/ +User-agent: JennyBot +Disallow:/ +User-agent: JetCar +Disallow:/ +User-agent: Jetty +Disallow:/ +User-agent: JikeSpider +Disallow:/ +User-agent: JOC Web Spider +Disallow:/ +User-agent: Joomla +Disallow:/ +User-agent: Jorgee +Disallow:/ +User-agent: JustView +Disallow:/ +User-agent: Jyxobot +Disallow:/ +User-agent: Kenjin Spider +Disallow:/ +User-agent: Keyword Density +Disallow:/ +User-agent: Kinza +Disallow:/ +User-agent: Kozmosbot +Disallow:/ +User-agent: Lanshanbot +Disallow:/ +User-agent: Larbin +Disallow:/ +User-agent: LeechFTP +Disallow:/ +User-agent: LeechGet +Disallow:/ +User-agent: LexiBot +Disallow:/ +User-agent: Lftp +Disallow:/ +User-agent: LibWeb +Disallow:/ +User-agent: Libwhisker +Disallow:/ +User-agent: LieBaoFast +Disallow:/ +User-agent: Lightspeedsystems +Disallow:/ +User-agent: Likse +Disallow:/ +User-agent: Linkdexbot +Disallow:/ +User-agent: LinkextractorPro +Disallow:/ +User-agent: LinkpadBot +Disallow:/ +User-agent: LinkScan +Disallow:/ +User-agent: LinksManager +Disallow:/ +User-agent: LinkWalker +Disallow:/ +User-agent: LinqiaMetadataDownloaderBot +Disallow:/ +User-agent: LinqiaRSSBot +Disallow:/ +User-agent: LinqiaScrapeBot +Disallow:/ +User-agent: Lipperhey +Disallow:/ +User-agent: Lipperhey Spider +Disallow:/ +User-agent: Litemage_walker +Disallow:/ +User-agent: Lmspider +Disallow:/ +User-agent: LNSpiderguy +Disallow:/ +User-agent: Ltx71 +Disallow:/ +User-agent: lwp-request +Disallow:/ +User-agent: LWP::Simple +Disallow:/ +User-agent: lwp-trivial +Disallow:/ +User-agent: Magnet +Disallow:/ +User-agent: Mag-Net +Disallow:/ +User-agent: magpie-crawler +Disallow:/ +User-agent: Mail.RU_Bot +Disallow:/ +User-agent: Majestic12 +Disallow:/ +User-agent: Majestic SEO +Disallow:/ +User-agent: Majestic-SEO +Disallow:/ +User-agent: MarkMonitor +Disallow:/ +User-agent: MarkWatch +Disallow:/ +User-agent: Masscan +Disallow:/ +User-agent: Mass Downloader +Disallow:/ +User-agent: Mata Hari +Disallow:/ +User-agent: MauiBot +Disallow:/ +User-agent: Mb2345Browser +Disallow:/ +User-agent: meanpathbot +Disallow:/ +User-agent: Meanpathbot +Disallow:/ +User-agent: MeanPath Bot +Disallow:/ +User-agent: Mediatoolkitbot +Disallow:/ +User-agent: mediawords +Disallow:/ +User-agent: MegaIndex.ru +Disallow:/ +User-agent: Metauri +Disallow:/ +User-agent: MFC_Tear_Sample +Disallow:/ +User-agent: MicroMessenger +Disallow:/ +User-agent: Microsoft Data Access +Disallow:/ +User-agent: Microsoft URL Control +Disallow:/ +User-agent: MIDown tool +Disallow:/ +User-agent: MIIxpc +Disallow:/ +User-agent: Mister PiX +Disallow:/ +User-agent: MJ12bot +Disallow:/ +User-agent: Mojeek +Disallow:/ +User-agent: Mojolicious +Disallow:/ +User-agent: Morfeus Fucking Scanner +Disallow:/ +User-agent: Mozlila +Disallow:/ +User-agent: MQQBrowser +Disallow:/ +User-agent: Mr.4x3 +Disallow:/ +User-agent: MSFrontPage +Disallow:/ +User-agent: MSIECrawler +Disallow:/ +User-agent: Msrabot +Disallow:/ +User-agent: muhstik-scan +Disallow:/ +User-agent: Musobot +Disallow:/ +User-agent: Name Intelligence +Disallow:/ +User-agent: Nameprotect +Disallow:/ +User-agent: Navroad +Disallow:/ +User-agent: NearSite +Disallow:/ +User-agent: Needle +Disallow:/ +User-agent: Nessus +Disallow:/ +User-agent: NetAnts +Disallow:/ +User-agent: Netcraft +Disallow:/ +User-agent: netEstate NE Crawler +Disallow:/ +User-agent: NetLyzer +Disallow:/ +User-agent: NetMechanic +Disallow:/ +User-agent: NetSpider +Disallow:/ +User-agent: Nettrack +Disallow:/ +User-agent: Net Vampire +Disallow:/ +User-agent: Netvibes +Disallow:/ +User-agent: NetZIP +Disallow:/ +User-agent: NextGenSearchBot +Disallow:/ +User-agent: Nibbler +Disallow:/ +User-agent: NICErsPRO +Disallow:/ +User-agent: Niki-bot +Disallow:/ +User-agent: Nikto +Disallow:/ +User-agent: NimbleCrawler +Disallow:/ +User-agent: Nimbostratus +Disallow:/ +User-agent: Ninja +Disallow:/ +User-agent: Nmap +Disallow:/ +User-agent: NPbot +Disallow:/ +User-agent: Nutch +Disallow:/ +User-agent: oBot +Disallow:/ +User-agent: Octopus +Disallow:/ +User-agent: Offline Explorer +Disallow:/ +User-agent: Offline Navigator +Disallow:/ +User-agent: OnCrawl +Disallow:/ +User-agent: Openfind +Disallow:/ +User-agent: OpenLinkProfiler +Disallow:/ +User-agent: Openvas +Disallow:/ +User-agent: OpenVAS +Disallow:/ +User-agent: OPPO A33 +Disallow:/ +User-agent: OrangeBot +Disallow:/ +User-agent: OrangeSpider +Disallow:/ +User-agent: OutclicksBot +Disallow:/ +User-agent: OutfoxBot +Disallow:/ +User-agent: PageAnalyzer +Disallow:/ +User-agent: Page Analyzer +Disallow:/ +User-agent: PageGrabber +Disallow:/ +User-agent: page scorer +Disallow:/ +User-agent: PageScorer +Disallow:/ +User-agent: Pandalytics +Disallow:/ +User-agent: Panscient +Disallow:/ +User-agent: Papa Foto +Disallow:/ +User-agent: Pavuk +Disallow:/ +User-agent: pcBrowser +Disallow:/ +User-agent: PECL::HTTP +Disallow:/ +User-agent: PeoplePal +Disallow:/ +User-agent: PHPCrawl +Disallow:/ +User-agent: Picscout +Disallow:/ +User-agent: Picsearch +Disallow:/ +User-agent: PictureFinder +Disallow:/ +User-agent: Pimonster +Disallow:/ +User-agent: Pi-Monster +Disallow:/ +User-agent: Pixray +Disallow:/ +User-agent: PleaseCrawl +Disallow:/ +User-agent: plumanalytics +Disallow:/ +User-agent: Pockey +Disallow:/ +User-agent: POE-Component-Client-HTTP +Disallow:/ +User-agent: polaris version +Disallow:/ +User-agent: Probethenet +Disallow:/ +User-agent: ProPowerBot +Disallow:/ +User-agent: ProWebWalker +Disallow:/ +User-agent: Psbot +Disallow:/ +User-agent: Pump +Disallow:/ +User-agent: PxBroker +Disallow:/ +User-agent: PyCurl +Disallow:/ +User-agent: QueryN Metasearch +Disallow:/ +User-agent: Quick-Crawler +Disallow:/ +User-agent: RankActive +Disallow:/ +User-agent: RankActiveLinkBot +Disallow:/ +User-agent: RankFlex +Disallow:/ +User-agent: RankingBot +Disallow:/ +User-agent: RankingBot2 +Disallow:/ +User-agent: Rankivabot +Disallow:/ +User-agent: RankurBot +Disallow:/ +User-agent: RealDownload +Disallow:/ +User-agent: Reaper +Disallow:/ +User-agent: RebelMouse +Disallow:/ +User-agent: Recorder +Disallow:/ +User-agent: RedesScrapy +Disallow:/ +User-agent: ReGet +Disallow:/ +User-agent: RepoMonkey +Disallow:/ +User-agent: Ripper +Disallow:/ +User-agent: RocketCrawler +Disallow:/ +User-agent: Rogerbot +Disallow:/ +User-agent: RSSingBot +Disallow:/ +User-agent: s1z.ru +Disallow:/ +User-agent: SalesIntelligent +Disallow:/ +User-agent: satoristudio.net +Disallow:/ +User-agent: SBIder +Disallow:/ +User-agent: ScanAlert +Disallow:/ +User-agent: Scanbot +Disallow:/ +User-agent: scan.lol +Disallow:/ +User-agent: ScoutJet +Disallow:/ +User-agent: Scrapy +Disallow:/ +User-agent: Screaming +Disallow:/ +User-agent: ScreenerBot +Disallow:/ +User-agent: Searchestate +Disallow:/ +User-agent: SearchmetricsBot +Disallow:/ +User-agent: Semrush +Disallow:/ +User-agent: SemrushBot +Disallow:/ +User-agent: SEOkicks +Disallow:/ +User-agent: SEOkicks-Robot +Disallow:/ +User-agent: SEOlyticsCrawler +Disallow:/ +User-agent: Seomoz +Disallow:/ +User-agent: SEOprofiler +Disallow:/ +User-agent: seoscanners +Disallow:/ +User-agent: SeoSiteCheckup +Disallow:/ +User-agent: SEOstats +Disallow:/ +User-agent: serpstatbot +Disallow:/ +User-agent: sexsearcher +Disallow:/ +User-agent: Shodan +Disallow:/ +User-agent: Siphon +Disallow:/ +User-agent: SISTRIX +Disallow:/ +User-agent: Sitebeam +Disallow:/ +User-agent: SiteCheckerBotCrawler +Disallow:/ +User-agent: sitechecker.pro +Disallow:/ +User-agent: SiteExplorer +Disallow:/ +User-agent: Siteimprove +Disallow:/ +User-agent: SiteLockSpider +Disallow:/ +User-agent: SiteSnagger +Disallow:/ +User-agent: SiteSucker +Disallow:/ +User-agent: Site Sucker +Disallow:/ +User-agent: Sitevigil +Disallow:/ +User-agent: SlySearch +Disallow:/ +User-agent: SmartDownload +Disallow:/ +User-agent: SMTBot +Disallow:/ +User-agent: Snake +Disallow:/ +User-agent: Snapbot +Disallow:/ +User-agent: Snoopy +Disallow:/ +User-agent: SocialRankIOBot +Disallow:/ +User-agent: Sociscraper +Disallow:/ +User-agent: sogouspider +Disallow:/ +User-agent: Sogou web spider +Disallow:/ +User-agent: Sosospider +Disallow:/ +User-agent: Sottopop +Disallow:/ +User-agent: SpaceBison +Disallow:/ +User-agent: Spammen +Disallow:/ +User-agent: SpankBot +Disallow:/ +User-agent: Spanner +Disallow:/ +User-agent: sp_auditbot +Disallow:/ +User-agent: Spbot +Disallow:/ +User-agent: Spinn3r +Disallow:/ +User-agent: SputnikBot +Disallow:/ +User-agent: spyfu +Disallow:/ +User-agent: Sqlmap +Disallow:/ +User-agent: Sqlworm +Disallow:/ +User-agent: Sqworm +Disallow:/ +User-agent: Steeler +Disallow:/ +User-agent: Stripper +Disallow:/ +User-agent: Sucker +Disallow:/ +User-agent: Sucuri +Disallow:/ +User-agent: SuperBot +Disallow:/ +User-agent: SuperHTTP +Disallow:/ +User-agent: Surfbot +Disallow:/ +User-agent: SurveyBot +Disallow:/ +User-agent: Suzuran +Disallow:/ +User-agent: Swiftbot +Disallow:/ +User-agent: sysscan +Disallow:/ +User-agent: Szukacz +Disallow:/ +User-agent: T0PHackTeam +Disallow:/ +User-agent: T8Abot +Disallow:/ +User-agent: tAkeOut +Disallow:/ +User-agent: Teleport +Disallow:/ +User-agent: TeleportPro +Disallow:/ +User-agent: Telesoft +Disallow:/ +User-agent: Telesphoreo +Disallow:/ +User-agent: Telesphorep +Disallow:/ +User-agent: The Intraformant +Disallow:/ +User-agent: TheNomad +Disallow:/ +User-agent: Thumbor +Disallow:/ +User-agent: TightTwatBot +Disallow:/ +User-agent: Titan +Disallow:/ +User-agent: Toata +Disallow:/ +User-agent: Toweyabot +Disallow:/ +User-agent: Tracemyfile +Disallow:/ +User-agent: Trendiction +Disallow:/ +User-agent: Trendictionbot +Disallow:/ +User-agent: trendiction.com +Disallow:/ +User-agent: trendiction.de +Disallow:/ +User-agent: True_Robot +Disallow:/ +User-agent: Turingos +Disallow:/ +User-agent: Turnitin +Disallow:/ +User-agent: TurnitinBot +Disallow:/ +User-agent: TwengaBot +Disallow:/ +User-agent: Twice +Disallow:/ +User-agent: Typhoeus +Disallow:/ +User-agent: UnisterBot +Disallow:/ +User-agent: Upflow +Disallow:/ +User-agent: URLy Warning +Disallow:/ +User-agent: URLy.Warning +Disallow:/ +User-agent: Vacuum +Disallow:/ +User-agent: Vagabondo +Disallow:/ +User-agent: VB Project +Disallow:/ +User-agent: VCI +Disallow:/ +User-agent: VeriCiteCrawler +Disallow:/ +User-agent: VidibleScraper +Disallow:/ +User-agent: Virusdie +Disallow:/ +User-agent: VoidEYE +Disallow:/ +User-agent: Voil +Disallow:/ +User-agent: Voltron +Disallow:/ +User-agent: Wallpapers/3.0 +Disallow:/ +User-agent: WallpapersHD +Disallow:/ +User-agent: WASALive-Bot +Disallow:/ +User-agent: WBSearchBot +Disallow:/ +User-agent: Webalta +Disallow:/ +User-agent: WebAuto +Disallow:/ +User-agent: Web Auto +Disallow:/ +User-agent: WebBandit +Disallow:/ +User-agent: WebCollage +Disallow:/ +User-agent: Web Collage +Disallow:/ +User-agent: WebCopier +Disallow:/ +User-agent: WEBDAV +Disallow:/ +User-agent: WebEnhancer +Disallow:/ +User-agent: Web Enhancer +Disallow:/ +User-agent: WebFetch +Disallow:/ +User-agent: Web Fetch +Disallow:/ +User-agent: WebFuck +Disallow:/ +User-agent: Web Fuck +Disallow:/ +User-agent: WebGo IS +Disallow:/ +User-agent: WebImageCollector +Disallow:/ +User-agent: WebLeacher +Disallow:/ +User-agent: WebmasterWorldForumBot +Disallow:/ +User-agent: webmeup-crawler +Disallow:/ +User-agent: WebPix +Disallow:/ +User-agent: Web Pix +Disallow:/ +User-agent: WebReaper +Disallow:/ +User-agent: WebSauger +Disallow:/ +User-agent: Web Sauger +Disallow:/ +User-agent: Webshag +Disallow:/ +User-agent: WebsiteExtractor +Disallow:/ +User-agent: WebsiteQuester +Disallow:/ +User-agent: Website Quester +Disallow:/ +User-agent: Webster +Disallow:/ +User-agent: WebStripper +Disallow:/ +User-agent: WebSucker +Disallow:/ +User-agent: Web Sucker +Disallow:/ +User-agent: WebWhacker +Disallow:/ +User-agent: WebZIP +Disallow:/ +User-agent: WeSEE +Disallow:/ +User-agent: Whack +Disallow:/ +User-agent: Whacker +Disallow:/ +User-agent: Whatweb +Disallow:/ +User-agent: Who.is Bot +Disallow:/ +User-agent: Widow +Disallow:/ +User-agent: WinHTTrack +Disallow:/ +User-agent: WiseGuys Robot +Disallow:/ +User-agent: WISENutbot +Disallow:/ +User-agent: Wonderbot +Disallow:/ +User-agent: Woobot +Disallow:/ +User-agent: Wotbox +Disallow:/ +User-agent: Wprecon +Disallow:/ +User-agent: WPScan +Disallow:/ +User-agent: WWW-Collector-E +Disallow:/ +User-agent: WWW-Mechanize +Disallow:/ +User-agent: WWW::Mechanize +Disallow:/ +User-agent: WWWOFFLE +Disallow:/ +User-agent: x09Mozilla +Disallow:/ +User-agent: x22Mozilla +Disallow:/ +User-agent: Xaldon WebSpider +Disallow:/ +User-agent: Xaldon_WebSpider +Disallow:/ +User-agent: Xenu +Disallow:/ +User-agent: xpymep1.exe +Disallow:/ +User-agent: YoudaoBot +Disallow:/ +User-agent: Zade +Disallow:/ +User-agent: Zauba +Disallow:/ +User-agent: zauba.io +Disallow:/ +User-agent: Zermelo +Disallow:/ +User-agent: Zeus +Disallow:/ +User-agent: zgrab +Disallow:/ +User-agent: Zitebot +Disallow:/ +User-agent: ZmEu +Disallow:/ +User-agent: ZumBot +Disallow:/ +User-agent: ZyBorg +Disallow:/ + +# Outros crawlers +User-agent: * +# Crawl Delay 60 seg. +Crawl-delay: 60 +Disallow: /materia/docacessorio/pdf/* +Disallow: /materia/docacessorio/zip/* \ No newline at end of file diff --git a/sapl/templates/search/search.html b/sapl/templates/search/search.html index d6c31da0a..302a666ef 100644 --- a/sapl/templates/search/search.html +++ b/sapl/templates/search/search.html @@ -12,19 +12,22 @@
    -
    -
    -

    Em quais tipos de documento deseja pesquisar?

    -
    -
    - + {% if not sapl_as_sapn %} + +
    +
    +

    Em quais tipos de documento deseja pesquisar?

    +
    +
    + +
    +
    + {{ form.models }}
    -
    - {{ form.models }}
    -
    + {% endif %}
    @@ -117,8 +120,8 @@ function checkAll(elem) { let checkboxes = document.getElementsByName('models'); for (let i = 0; i < checkboxes.length; i++) { - if (checkboxes[i].type == 'checkbox') - checkboxes[i].checked = elem.checked; + if (checkboxes[i].type == 'checkbox') + checkboxes[i].checked = elem.checked; } } diff --git a/sapl/templates/sessao/adicionar_varias_materias_expediente.html b/sapl/templates/sessao/adicionar_varias_materias_expediente.html index c9ce0cab1..76cf600b4 100644 --- a/sapl/templates/sessao/adicionar_varias_materias_expediente.html +++ b/sapl/templates/sessao/adicionar_varias_materias_expediente.html @@ -4,19 +4,16 @@ {% block actions %}{% endblock %} {% block detail_content %} - {% block buttons %} + {% block buttons %} {% if filter_url and not filter.form.errors %} - - - - + + {% endif %} - {% endblock %} {% if filter.form.errors %} @@ -29,77 +26,105 @@

    {% if filter_url and not filter.form.errors %} - - {% if paginator.count %} -
    - {% csrf_token %} - - - - - - - - {% if paginator.count > 1 %} -

    {% blocktrans with paginator.count as total_materias %}Pesquisa concluída com sucesso! Foram encontradas {{total_materias}} matérias.{% endblocktrans %}

    - {% elif paginator.count == 1 %} -

    {% trans 'Pesquisa concluída com sucesso! Foi encontrada 1 matéria.'%}

    - {% endif %} - - {% for m in page_obj %} - - - - - {% endfor %} -

    {% trans "Matérias" %}

    {% trans "Tipo de Votação" %}

    - - {{m.tipo.sigla}} {{m.numero}}/{{m.ano}} - {{m.tipo}}
    - Autores: - {% for a in m.autoria_set.all %} - {% if not forloop.first %} - ,    {{a.autor|default_if_none:""}} - {% else %} -  {{a.autor|default_if_none:""}} - {% endif %} - {% endfor %} -
    - Localização Atual:  {{m.tramitacao_set.last.unidade_tramitacao_destino|default_if_none:"Não informado"}}
    - Status:  {{m.tramitacao_set.last.status|default_if_none:"Não informado"}}
    - Data da última Tramitação:  {{m.tramitacao_set.last.data_tramitacao|default_if_none:"Não informado"}}
    - Ementa: {{ m.ementa|safe }}
    -

    -
    - -
    - -
    - -
    - -
    - -
    - {% else %} - + {% if paginator.count %} + + {% csrf_token %} +
    + + + + {% if paginator.count > 1 %} +

    {% blocktrans with paginator.count as total_materias %}Pesquisa concluída com sucesso! Foram encontradas {{ total_materias }} matérias.{% endblocktrans %}

    + {% elif paginator.count == 1 %} +

    {% trans 'Pesquisa concluída com sucesso! Foi encontrada 1 matéria.'%}

    + {% endif %} + {% for m in page_obj %} - + -

    {% trans "Matérias" %}

    {% trans "Tipo de Votação" %}

    -

    Nenhuma matéria encontrada com essas especificações

    +
    + + {{ m.tipo.sigla }} {{ m.numero }}/{{ m.ano }} - {{ m.tipo }}
    + Autores: + {% for a in m.autoria_set.all %} + {% if not forloop.first %} + ,    {{ a.autor|default_if_none:"" }} + {% else %} +  {{ a.autor|default_if_none:"" }} + {% endif %} + {% endfor %} +
    + Localização Atual:  {{ m.tramitacao_set.first.unidade_tramitacao_destino|default_if_none:"Não informado" }}
    + Status:  {{ m.tramitacao_set.first.status|default_if_none:"Não informado" }}
    + Data da última Tramitação:  {{ m.tramitacao_set.first.data_tramitacao|default_if_none:"Não informado" }}
    + Ementa: {{ m.ementa|safe }}
    +

    +
    + +
    + +
    + +
    +
    - {% endif %} - -{% endif %} - + {% endfor %} + + + + {% else %} +

    Nenhuma matéria encontrada com essas especificações

    + {% endif %} + {% endif %} {% endblock detail_content %} {% block extra_js %} -{% endblock extra_js%} +{% endblock extra_js %} diff --git a/sapl/templates/sessao/blocos_ata/materias_expediente.html b/sapl/templates/sessao/blocos_ata/materias_expediente.html index 4a3964993..f079f976e 100644 --- a/sapl/templates/sessao/blocos_ata/materias_expediente.html +++ b/sapl/templates/sessao/blocos_ata/materias_expediente.html @@ -3,33 +3,35 @@ {% if materia_expediente %} Matérias do Expediente: {% for m in materia_expediente %} - {{m.numero}} - {{m.titulo}}, - {{m.ementa|safe}} - Autor{{ m.autor|length|pluralize:"es" }}: {{ m.autor|join:', ' }}, - {% if m.numero_protocolo %} - Número de Protocolo: {{ m.numero_protocolo }}, - {% endif %} - {% if m.numero_processo %} - Processo: {{ m.numero_processo }}, - {% endif %} - {% if m.turno %} - Turno: {{m.turno}}, - {% endif %} - {% if m.tipo_votacao %} - Tipo: {{m.tipo_votacao}}, - Sim: {{ m.voto_sim }}, - Não: {{ m.voto_nao }}, - Abstenções: {{m.voto_abstencoes}}, - {% endif %} - Resultado: {{m.resultado}} - {% if m.resultado_observacao %} - {{m.resultado_observacao}} {% endif %} - {% if m.voto_nominal%} - Votos Nominais : - {% for voto in m.voto_nominal %} - {{voto.0}} - {{voto.1}} - {% if not forloop.last %} ; {% endif %} - {% endfor %} - {% endif %} + {{m.numero}} - {{m.titulo}}, + {{m.ementa|safe}} + {% if m.observacao %} - Obs.: {{m.observacao}} {% endif %} + Autor{{ m.autor|length|pluralize:"es" }}: {{ m.autor|join:', ' }}, + {% if m.numero_protocolo %} + Número de Protocolo: {{ m.numero_protocolo }}, + {% endif %} + {% if m.numero_processo %} + Processo: {{ m.numero_processo }}, + {% endif %} + {% if m.turno %} + Turno: {{m.turno}}, + {% endif %} + {% if m.tipo_votacao %} + Tipo: {{m.tipo_votacao}}, + Sim: {{ m.voto_sim }}, + Não: {{ m.voto_nao }}, + Abstenções: {{m.voto_abstencoes}}, + {% endif %} + Resultado: {{m.resultado}} + {% if m.resultado_observacao %} - Obs.: {{m.resultado_observacao}} {% endif %} + {% if m.voto_nominal%} + Votos Nominais : + {% for voto in m.voto_nominal %} + {{voto.0}} - {{voto.1}} + {% if not forloop.last %} ; {% endif %} + {% endfor %} + {% endif %} + ; {% endfor %} {% endif %}

    diff --git a/sapl/templates/sessao/blocos_ata/materias_ordem_dia.html b/sapl/templates/sessao/blocos_ata/materias_ordem_dia.html index 6b38be5e4..eaacc3dd4 100644 --- a/sapl/templates/sessao/blocos_ata/materias_ordem_dia.html +++ b/sapl/templates/sessao/blocos_ata/materias_ordem_dia.html @@ -5,6 +5,7 @@ {% for m in materias_ordem %} {{m.numero}} - {{m.titulo}}, {{m.ementa|safe}} + {% if m.observacao %} - Obs.: {{m.observacao}} {% endif %} Autor{{ m.autor|length|pluralize:"es" }}: {{ m.autor|join:', ' }}, {% if m.numero_protocolo %} Número de Protocolo: {{ m.numero_protocolo }}, @@ -22,7 +23,7 @@ Abstenções: {{m.voto_abstencoes}}, {% endif %} Resultado: {{m.resultado}} - {% if m.resultado_observacao %} - {{m.resultado_observacao}} {% endif %} + {% if m.resultado_observacao %} - Obs.: {{m.resultado_observacao}} {% endif %} {% if m.voto_nominal%} Votos Nominais : {% for voto in m.voto_nominal %} @@ -30,6 +31,7 @@ {% if not forloop.last %} ; {% endif %} {% endfor %} {% endif %} + ; {% endfor %} {% endif %}

    diff --git a/sapl/templates/sessao/blocos_resumo/materias_expediente.html b/sapl/templates/sessao/blocos_resumo/materias_expediente.html index 046c15cee..056285db3 100644 --- a/sapl/templates/sessao/blocos_resumo/materias_expediente.html +++ b/sapl/templates/sessao/blocos_resumo/materias_expediente.html @@ -36,10 +36,13 @@ {% endif %} - {{m.ementa|dont_break_out}}
    - {{m.observacao|dont_break_out}} + {{m.ementa|dont_break_out}} + {% if m.observacao %}

    Obs.: {{m.observacao}} {% endif %} + + + {{m.resultado}} + {% if m.resultado_observacao %}

    Obs.: {{m.resultado_observacao}} {% endif %} - {{m.resultado}}
    {{m.resultado_observacao}} {% endfor %} diff --git a/sapl/templates/sessao/blocos_resumo/materias_ordem_dia.html b/sapl/templates/sessao/blocos_resumo/materias_ordem_dia.html index 909adf1b2..ecd454693 100644 --- a/sapl/templates/sessao/blocos_resumo/materias_ordem_dia.html +++ b/sapl/templates/sessao/blocos_resumo/materias_ordem_dia.html @@ -36,8 +36,14 @@ Processo: {{ m.numero_processo }} {% endif %} - {{m.ementa|dont_break_out}}
    {{m.observacao|dont_break_out}} - {{m.resultado}}
    {{m.resultado_observacao}} + + {{m.ementa|dont_break_out}} + {% if m.observacao %}

    Obs.: {{m.observacao}} {% endif %} + + + {{m.resultado}} + {% if m.resultado_observacao %}

    Obs.: {{m.resultado_observacao}} {% endif %} + {% endfor %} diff --git a/sapl/templates/sessao/expedientemateria_form.html b/sapl/templates/sessao/expedientemateria_form.html index e90ec63ff..f4dcad044 100644 --- a/sapl/templates/sessao/expedientemateria_form.html +++ b/sapl/templates/sessao/expedientemateria_form.html @@ -4,54 +4,91 @@ {% load common_tags %} {% block extra_js %} + + } + + var fields = ["#id_tipo_materia", "#id_numero_materia", "#id_ano_materia"]; + for (i = 0; i < fields.length; i++){ + $(fields[i]).change(recuperar_materia) + } + recuperar_materia() + + var modal_estilos = 'display: block; width: 85%; max-width: 600px; background: #fff; padding: 15px; border-radius: 5px;' + +'-webkit-box-shadow: 0px 6px 14px -2px rgba(0, 0, 0, 0.75); -moz-box-shadow: 0px 6px 14px -2px rgba(0, 0, 0, 0.75);' + +'box-shadow: 0px 6px 14px -2px rgba(0, 0, 0, 0.75); position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%);' + +'z-index: 99999999; text-align: center'; + + var fundo_modal_estilos = 'top: 0; right: 0; bottom: 0; left: 0; position: fixed; background-color: rgba(0, 0, 0, 0.6); z-index: 99999999;' + +'display: none;'; + + var modal = '
    ' + +'' + +'
    '; + + $(document).ready( function() { + $("body").append(modal) + + $("select[name='tipo_votacao']").children("option[value='4']").remove(); + $('#id_apenas_leitura').change( function(event) { + $('#div_id_tipo_votacao').toggle() + if ($('#id_apenas_leitura').prop('checked')){ + $("select[name='tipo_votacao']").append(new Option('Leitura', '4')) + $("select[name='tipo_votacao']").val('4') + } else { + $("select[name='tipo_votacao']").children("option[value='4']").remove() + $("select[name='tipo_votacao']").val('1') + } + }); + $("#fundo_modal, #close_model_btn").click( function() { $("#fundo_modal").hide() }); + $("#modal").click( function(e) { e.stopPropagation() }); + }); + {% endblock %} diff --git a/sapl/templates/sessao/expedientemateria_list.html b/sapl/templates/sessao/expedientemateria_list.html index b7d6870a9..78709bfb2 100644 --- a/sapl/templates/sessao/expedientemateria_list.html +++ b/sapl/templates/sessao/expedientemateria_list.html @@ -2,69 +2,64 @@ {% load i18n %} {% load common_tags %} - {% block more_buttons %} - -{% if perms|get_add_perm:view %} - + {% if perms|get_add_perm:view %} {% blocktrans with verbose_name=view.verbose_name %} Adicionar Várias Matérias {% endblocktrans %} - - - + + + -{% endif %} - + {% endif %} {% endblock more_buttons %} {% block extra_js %} + + setTimeout(function(){ window.location.reload(true) }, 500); + } + }); + $(window).on('beforeunload', function () { + $('tbody').sortable('disable'); + $("input[type=submit], input[type=button]").prop("disabled", "disabled"); + }); + {% endblock %} diff --git a/sapl/templates/sessao/oradores_create.html b/sapl/templates/sessao/oradores_create.html new file mode 100644 index 000000000..26e9ee6b1 --- /dev/null +++ b/sapl/templates/sessao/oradores_create.html @@ -0,0 +1,17 @@ +{% extends "crud/form.html" %} +{% load i18n %} +{% load crispy_forms_tags %} +{% load common_tags %} + +{% block extra_js %} + +{% endblock extra_js %} diff --git a/sapl/templates/sessao/ordemdia_list.html b/sapl/templates/sessao/ordemdia_list.html index cf5b1fed4..2475681f6 100644 --- a/sapl/templates/sessao/ordemdia_list.html +++ b/sapl/templates/sessao/ordemdia_list.html @@ -2,67 +2,64 @@ {% load i18n %} {% load common_tags %} - {% block more_buttons %} - -{% if perms|get_add_perm:view %} + {% if perms|get_add_perm:view %} {% blocktrans with verbose_name=view.verbose_name %} Adicionar Várias Matérias {% endblocktrans %} - - + + -{% endif %} - + {% endif %} {% endblock more_buttons %} {% block extra_js %} + - + $('tbody').sortable('disable'); + $("input[type=submit], input[type=button]").prop("disabled", "disabled"); + }); + {% endblock %} diff --git a/sapl/templates/sessao/pauta_sessao_detail.html b/sapl/templates/sessao/pauta_sessao_detail.html index c35956f28..bf58a3cea 100644 --- a/sapl/templates/sessao/pauta_sessao_detail.html +++ b/sapl/templates/sessao/pauta_sessao_detail.html @@ -19,61 +19,69 @@
    Expedientes - + {% for e in expedientes %} - - - + + + {% endfor %} - +
    - {{e.tipo}}:

    -
    -

    {{e.conteudo|safe}}

    -
    -
    + {{e.tipo}}:

    +
    +

    {{e.conteudo|safe}}

    +
    +
    Matérias do Expediente {% if materia_expediente %} - - {% for m in materia_expediente %} - - - + + {% for m in materia_expediente %} + + + + - {% endfor %} -
    MatériaEmenta
    - {{m.numero}} - - {{m.titulo}}
    - Autor{{ m.autor|length|pluralize:"es" }}: {{ m.autor|join:', ' }} -
    {{m.ementa|safe}}
    {{m.observacao|linebreaksbr|safe}}
    MatériaEmenta Situação
    + {{m.numero}} - + {{m.titulo}}
    + Processo: {{ m.processo }}
    + Autor{{ m.autor|length|pluralize:"es" }}: {{ m.autor|join:', ' }} +
    + {{m.ementa|safe}} + {% if m.observacao %}

    Obs.: {{m.observacao}} {% endif %} +
    {{m.situacao|linebreaksbr|safe}}
    - {% else %} - Não existem Matérias de Expediente para essa Sessão Plenária - {% endif %} + {% endfor %} + + {% else %} + Não existem Matérias de Expediente para essa Sessão Plenária + {% endif %}
    Matérias da Ordem do Dia {% if materias_ordem %} - + {% for m in materias_ordem %} - - + + - + {% endfor %}
    MatériaEmenta
    MatériaEmenta Situação
    +
    {{m.numero}} - {{m.titulo}}
    - Autor{{ m.autor|length|pluralize:"es" }}: {{ m.autor|join:', ' }} + Processo: {{ m.processo }}
    + Autor{{ m.autor|length|pluralize:"es" }}: {{ m.autor|join:', ' }} +
    + {{m.ementa|safe}} + {% if m.observacao %}

    Obs.: {{m.observacao}} {% endif %}
    {{m.ementa|safe}}
    {{m.observacao|linebreaksbr|safe}}
    {{m.situacao|linebreaksbr|safe}}
    - {% else %} + {% else %} Não existem Matérias de Ordem do Dia para essa Sessão Plenária - {% endif %} + {% endif %}
    {% endblock base_content %} diff --git a/sapl/templates/sessao/resumo.html b/sapl/templates/sessao/resumo.html index 895df7073..ae76f6a5e 100644 --- a/sapl/templates/sessao/resumo.html +++ b/sapl/templates/sessao/resumo.html @@ -10,15 +10,7 @@ {% endblock %} {% block detail_content %} - +

    diff --git a/sapl/templates/sessao/subnav.yaml b/sapl/templates/sessao/subnav.yaml index 59a127ad3..b36e6b9ef 100644 --- a/sapl/templates/sessao/subnav.yaml +++ b/sapl/templates/sessao/subnav.yaml @@ -28,6 +28,10 @@ - title: {% trans 'Votação em Bloco' %} url: votacao_bloco_expediente check_permission: sessao.add_sessaoplenaria + - title: {% trans 'Copiar Matérias para Sessão Posterior' %} + url: transf_mat_exp + check_permission: sessao.add_sessaoplenaria + - title: {% trans 'Ordem do Dia' %} children: @@ -40,6 +44,9 @@ - title: {% trans 'Votação em Bloco' %} url: votacao_bloco_ordemdia check_permission: sessao.add_sessaoplenaria + - title: {% trans 'Copiar Matérias para Sessão Posterior' %} + url: transf_mat_ordemdia + check_permission: sessao.add_sessaoplenaria - title: {% trans 'Painel Eletrônico' %} url: painel diff --git a/sapl/templates/sessao/transf_mat_sessao.html b/sapl/templates/sessao/transf_mat_sessao.html new file mode 100644 index 000000000..1df6841e0 --- /dev/null +++ b/sapl/templates/sessao/transf_mat_sessao.html @@ -0,0 +1,144 @@ +{% extends "crud/list.html" %} +{% load i18n %} +{% load common_tags %} + +{% block base_content %} + {% if materias_sessao %} + {% if sessoes_destino %} +

    +
    + {% csrf_token %} +
    + Sessão Plenária Destino +
    +
    +
    + + +
    +
    +
    +
    + Matérias Disponíveis para Cópia na Sessão Atual +
    +
    +
    +
    + {% else %} +
    +

    Nenhuma sessão plenária está apta a receber a(s) cópia(s).

    + {% endif %} + {% else %} +
    +

    Nenhuma máteria está disponível para cópia.

    + {% endif %} +{% endblock base_content %} + +{% block extra_js %} + +{% endblock %} diff --git a/sapl/templates/sessao/votacao/votacao_bloco.html b/sapl/templates/sessao/votacao/votacao_bloco.html index bc9fc7ce8..e58d2bf10 100644 --- a/sapl/templates/sessao/votacao/votacao_bloco.html +++ b/sapl/templates/sessao/votacao/votacao_bloco.html @@ -63,11 +63,11 @@ {% if o.materia.numero_protocolo %} Protocolo:   {{o.materia.numero_protocolo}}
    {% endif %} - {% if o.materia.tramitacao_set.last %} - {% if o.materia.tramitacao_set.last.turno %} + {% if o.materia.tramitacao_set.first %} + {% if o.materia.tramitacao_set.first.turno %} Turno:  {% for t in turno_choices %} - {% if t.0 == o.materia.tramitacao_set.last.turno %} + {% if t.0 == o.materia.tramitacao_set.first.turno %} {{ t.1 }} {% endif %} {% endfor %}
    diff --git a/sapl/test_crispy_layout_mixin.py b/sapl/test_crispy_layout_mixin.py index 2c72a1b44..a643d5083 100644 --- a/sapl/test_crispy_layout_mixin.py +++ b/sapl/test_crispy_layout_mixin.py @@ -1,6 +1,6 @@ from unittest import mock -import rtyaml +import yaml from sapl.crispy_layout_mixin import read_layout_from_yaml @@ -18,7 +18,7 @@ ModelName: - highlander ''' with mock.patch('sapl.crispy_layout_mixin.read_yaml_from_file') as ryff: - ryff.return_value = rtyaml.load(stub_content) + ryff.return_value = yaml.load(stub_content, yaml.Loader) assert read_layout_from_yaml('....', 'ModelName') == [ ['Cool Legend', [('name', 9), ('place', 2), ('tiny', 1)], diff --git a/sapl/test_urls.py b/sapl/test_urls.py index 23e0c9544..b01baec1b 100644 --- a/sapl/test_urls.py +++ b/sapl/test_urls.py @@ -1,4 +1,3 @@ -import pytest from django.apps import apps from django.contrib.auth import get_user_model from django.contrib.auth.management import _get_all_permissions @@ -6,7 +5,7 @@ from django.contrib.auth.models import Permission from django.contrib.contenttypes.models import ContentType from django.db import transaction from django.utils.translation import ugettext_lazy as _ -from django.utils.translation import string_concat +import pytest from sapl.crud.base import PermissionRequiredForAppCrudMixin from sapl.rules.apps import AppConfig, update_groups @@ -14,6 +13,7 @@ from scripts.lista_urls import lista_urls from .settings import SAPL_APPS + pytestmark = pytest.mark.django_db sapl_appconfs = [apps.get_app_config(n[5:]) for n in SAPL_APPS] @@ -21,7 +21,6 @@ _lista_urls = lista_urls() def create_perms_post_migrate(sapl_app_config): - searched_perms = list() # The codenames and ctypes that should exist. ctypes = set() @@ -30,13 +29,9 @@ def create_perms_post_migrate(sapl_app_config): opts = klass._meta permissions = ( ("list_" + opts.model_name, - string_concat( - _('Visualizaçao da lista de'), ' ', - opts.verbose_name_plural)), + "{} {}".format(_('Visualização da lista de'), opts.verbose_name_plural)), ("detail_" + opts.model_name, - string_concat( - _('Visualização dos detalhes de'), ' ', - opts.verbose_name_plural)), + "{} {}".format(_('Visualização dos detalhes de'), opts.verbose_name_plural)), ) opts.permissions = tuple( set(list(permissions) + list(opts.permissions))) @@ -79,7 +74,6 @@ btn_login = (' 200: raise ValidationError( - "Certifique-se de que o nome do arquivo no " \ - "campo '" + nome_campo + "' tenha no máximo 200 caracteres " \ + "Certifique-se de que o nome do arquivo no " + "campo '" + nome_campo + "' tenha no máximo 200 caracteres " "(ele possui {})".format(len(arquivo.name)) ) if arquivo.size > MAX_DOC_UPLOAD_SIZE: raise ValidationError( - "O arquivo " + nome_campo + " deve ser menor que " \ + "O arquivo " + nome_campo + " deve ser menor que " "{0:.1f} mb, o tamanho atual desse arquivo é {1:.1f} mb".format( - (MAX_DOC_UPLOAD_SIZE/1024)/1024, - (arquivo.size/1024)/1024 + (MAX_DOC_UPLOAD_SIZE / 1024) / 1024, + (arquivo.size / 1024) / 1024 ) ) @@ -96,18 +125,18 @@ def pil_image(source, exif_orientation=False, **options): def dont_break_out(value, max_part=50): _safe = value.split() - + def chunkstring(string): return re.findall('.{%d}' % max_part, string) - + def __map(a): if len(a) <= max_part: return a return '
    ' + '
    '.join(chunkstring(a)) - + _safe = map(__map, _safe) _safe = ' '.join(_safe) - + _safe = mark_safe(_safe) return value @@ -178,7 +207,9 @@ def montar_row_autor(name): return autor_row -#TODO: Esta função é utilizada? +# TODO: Esta função é utilizada? + + def montar_helper_autor(self): autor_row = montar_row_autor('nome') self.helper = SaplFormHelper() @@ -588,6 +619,7 @@ def fabrica_validador_de_tipos_de_arquivo(lista, nome): restringe_tipos_de_arquivo_txt = fabrica_validador_de_tipos_de_arquivo( TIPOS_TEXTO_PERMITIDOS, 'restringe_tipos_de_arquivo_txt') + restringe_tipos_de_arquivo_img = fabrica_validador_de_tipos_de_arquivo( TIPOS_IMG_PERMITIDOS, 'restringe_tipos_de_arquivo_img') @@ -894,7 +926,7 @@ def parlamentares_ativos(data_inicio, data_fim=None): parlamentares_id = mandatos_ativos.values_list( 'parlamentar_id', - flat=True).distinct('parlamentar_id') + flat=True).distinct('parlamentar_id').order_by('parlamentar_id') return Parlamentar.objects.filter(id__in=parlamentares_id) @@ -1008,32 +1040,62 @@ def mail_service_configured(request=None): return settings.EMAIL_RUNNING -def lista_anexados(principal, isMateriaLegislativa=True): - anexados_total = [] - if isMateriaLegislativa: #MateriaLegislativa - from sapl.materia.models import Anexada - anexados_iterator = Anexada.objects.filter(materia_principal=principal) - else: #DocAdm - from sapl.protocoloadm.models import Anexado - anexados_iterator = Anexado.objects.filter(documento_principal=principal) - - anexadas_temp = list(anexados_iterator) - - while anexadas_temp: - anx = anexadas_temp.pop() - if isMateriaLegislativa: - if anx.materia_anexada not in anexados_total: - anexados_total.append(anx.materia_anexada) - anexados_anexado = Anexada.objects.filter(materia_principal=anx.materia_anexada) - anexadas_temp.extend(anexados_anexado) +def google_recaptcha_configured(): + from sapl.base.models import AppConfig + + return not AppConfig.attr('google_recaptcha_site_key') == '' + + +def sapl_as_sapn(): + from sapl.base.models import AppConfig + return AppConfig.attr('sapl_as_sapn') + + +def timing(f): + @wraps(f) + def wrap(*args, **kw): + logger = logging.getLogger(__name__) + ts = time() + result = f(*args, **kw) + te = time() + logger.info('funcao:%r args:[%r, %r] took: %2.4f sec' % + (f.__name__, args, kw, te - ts)) + return result + return wrap + + +@timing +def lista_anexados(principal): + from sapl.materia.models import MateriaLegislativa + from sapl.materia.models import Anexada + from sapl.protocoloadm.models import Anexado + + if isinstance(principal, MateriaLegislativa): + anexados = {a.materia_anexada for a in Anexada.objects.select_related( + 'materia_anexada').filter(materia_principal=principal)} + else: + anexados = {a.documento_anexado for a in Anexado.objects.select_related( + 'documento_anexado').filter(documento_principal=principal)} + + anexados_total = set() + while anexados: + if isinstance(principal, MateriaLegislativa): + novos_anexados = {a.materia_anexada for a in + Anexada.objects.filter( + materia_principal__in=anexados) + if a.materia_anexada not in anexados_total} else: - if anx.documento_anexado not in anexados_total: - anexados_total.append(anx.documento_anexado) - anexados_anexado = Anexado.objects.filter(documento_principal=anx.documento_anexado) - anexadas_temp.extend(anexados_anexado) + novos_anexados = {a.documento_anexado for a in + Anexado.objects.filter( + documento_principal__in=anexados) + if a.documento_anexado not in anexados_total} + anexados_total.update(anexados) + anexados = novos_anexados + if principal in anexados_total: anexados_total.remove(principal) - return anexados_total + + return list(anexados_total) def from_date_to_datetime_utc(data): @@ -1058,10 +1120,84 @@ class OverwriteStorage(FileSystemStorage): Muda o comportamento padrão do Django e o faz sobrescrever arquivos de mesmo nome que foram carregados pelo usuário ao invés de renomeá-los. ''' + def get_available_name(self, name, max_length=None): if self.exists(name): os.remove(os.path.join(settings.MEDIA_ROOT, name)) return name + def get_tempfile_dir(): return '/tmp' if platform.system() == 'Darwin' else tempfile.gettempdir() + + +class GoogleRecapthaMixin: + + logger = logging.getLogger(__name__) + + def __init__(self, *args, **kwargs): + + from sapl.base.models import AppConfig + + title_label = kwargs.pop('title_label') + action_label = kwargs.pop('action_label') + + row1 = to_row( + [ + (Div( + css_class="g-recaptcha float-right", # if not settings.DEBUG else '', + data_sitekey=AppConfig.attr('google_recaptcha_site_key') + ), 5), + ('email', 7), + + ] + ) + + self.helper = FormHelper() + self.helper.layout = SaplFormLayout( + Fieldset( + title_label, + row1 + ), + actions=form_actions(label=action_label) + ) + + super().__init__(*args, **kwargs) + + def clean(self): + + super().clean() + + cd = self.cleaned_data + + recaptcha = self.data.get('g-recaptcha-response', '') + if not recaptcha: + raise ValidationError( + _('Verificação do reCAPTCHA não efetuada.')) + + from sapl.base.models import AppConfig + + url = ('https://www.google.com/recaptcha/api/siteverify?' + 'secret=%s' + '&response=%s' % (AppConfig.attr('google_recaptcha_secret_key'), + recaptcha)) + + try: + r = requests.post(url) + if r.ok: + jdata = r.json() + else: + raise ValidationError( + _('Ocorreu um erro na validação do reCAPTCHA.')) + except Exception as e: + logging.error(e) + raise ValidationError( + _('Ocorreu um erro na validação do reCAPTCHA.')) + + if jdata['success']: + return cd + else: + raise ValidationError( + _('Ocorreu um erro na validação do reCAPTCHA.')) + + return cd diff --git a/sapl/webpack-stats.json b/sapl/webpack-stats.json deleted file mode 100644 index 0f538fa43..000000000 --- a/sapl/webpack-stats.json +++ /dev/null @@ -1 +0,0 @@ -{"status":"done","publicPath":"/static/sapl/frontend/","chunks":{"chunk-vendors":[{"name":"css/chunk-vendors.42151acc.css","publicPath":"/static/sapl/frontend/css/chunk-vendors.42151acc.css","path":"../sapl/sapl/static/sapl/frontend/css/chunk-vendors.42151acc.css"},{"name":"js/chunk-vendors.f8cff174.js","publicPath":"/static/sapl/frontend/js/chunk-vendors.f8cff174.js","path":"../sapl/sapl/static/sapl/frontend/js/chunk-vendors.f8cff174.js"},{"name":"css/chunk-vendors.42151acc.css.map","publicPath":"/static/sapl/frontend/css/chunk-vendors.42151acc.css.map","path":"../sapl/sapl/static/sapl/frontend/css/chunk-vendors.42151acc.css.map"},{"name":"js/chunk-vendors.f8cff174.js.map","publicPath":"/static/sapl/frontend/js/chunk-vendors.f8cff174.js.map","path":"../sapl/sapl/static/sapl/frontend/js/chunk-vendors.f8cff174.js.map"}],"compilacao":[{"name":"css/compilacao.eff62463.css","publicPath":"/static/sapl/frontend/css/compilacao.eff62463.css","path":"../sapl/sapl/static/sapl/frontend/css/compilacao.eff62463.css"},{"name":"js/compilacao.d421699a.js","publicPath":"/static/sapl/frontend/js/compilacao.d421699a.js","path":"../sapl/sapl/static/sapl/frontend/js/compilacao.d421699a.js"},{"name":"css/compilacao.eff62463.css.map","publicPath":"/static/sapl/frontend/css/compilacao.eff62463.css.map","path":"../sapl/sapl/static/sapl/frontend/css/compilacao.eff62463.css.map"},{"name":"js/compilacao.d421699a.js.map","publicPath":"/static/sapl/frontend/js/compilacao.d421699a.js.map","path":"../sapl/sapl/static/sapl/frontend/js/compilacao.d421699a.js.map"}],"global":[{"name":"css/global.278b5d61.css","publicPath":"/static/sapl/frontend/css/global.278b5d61.css","path":"../sapl/sapl/static/sapl/frontend/css/global.278b5d61.css"},{"name":"js/global.49490c4a.js","publicPath":"/static/sapl/frontend/js/global.49490c4a.js","path":"../sapl/sapl/static/sapl/frontend/js/global.49490c4a.js"},{"name":"css/global.278b5d61.css.map","publicPath":"/static/sapl/frontend/css/global.278b5d61.css.map","path":"../sapl/sapl/static/sapl/frontend/css/global.278b5d61.css.map"},{"name":"js/global.49490c4a.js.map","publicPath":"/static/sapl/frontend/js/global.49490c4a.js.map","path":"../sapl/sapl/static/sapl/frontend/js/global.49490c4a.js.map"}],"painel":[{"name":"css/painel.5d957a9b.css","publicPath":"/static/sapl/frontend/css/painel.5d957a9b.css","path":"../sapl/sapl/static/sapl/frontend/css/painel.5d957a9b.css"},{"name":"js/painel.33e8b8a5.js","publicPath":"/static/sapl/frontend/js/painel.33e8b8a5.js","path":"../sapl/sapl/static/sapl/frontend/js/painel.33e8b8a5.js"},{"name":"css/painel.5d957a9b.css.map","publicPath":"/static/sapl/frontend/css/painel.5d957a9b.css.map","path":"../sapl/sapl/static/sapl/frontend/css/painel.5d957a9b.css.map"},{"name":"js/painel.33e8b8a5.js.map","publicPath":"/static/sapl/frontend/js/painel.33e8b8a5.js.map","path":"../sapl/sapl/static/sapl/frontend/js/painel.33e8b8a5.js.map"}],"parlamentar":[{"name":"css/parlamentar.0e433876.css","publicPath":"/static/sapl/frontend/css/parlamentar.0e433876.css","path":"../sapl/sapl/static/sapl/frontend/css/parlamentar.0e433876.css"},{"name":"js/parlamentar.35e37659.js","publicPath":"/static/sapl/frontend/js/parlamentar.35e37659.js","path":"../sapl/sapl/static/sapl/frontend/js/parlamentar.35e37659.js"},{"name":"css/parlamentar.0e433876.css.map","publicPath":"/static/sapl/frontend/css/parlamentar.0e433876.css.map","path":"../sapl/sapl/static/sapl/frontend/css/parlamentar.0e433876.css.map"},{"name":"js/parlamentar.35e37659.js.map","publicPath":"/static/sapl/frontend/js/parlamentar.35e37659.js.map","path":"../sapl/sapl/static/sapl/frontend/js/parlamentar.35e37659.js.map"}]}} \ No newline at end of file diff --git a/scripts/gerar_hash_proposicoes.py b/scripts/gerar_hash_proposicoes.py new file mode 100644 index 000000000..f7a3af3a6 --- /dev/null +++ b/scripts/gerar_hash_proposicoes.py @@ -0,0 +1,35 @@ +# Gerar hash de proposições para recebimento sem recibo +from sapl.materia.models import Proposicao +from sapl.utils import gerar_hash_arquivo, SEPARADOR_HASH_PROPOSICAO +from datetime import datetime + +def gerar_hash(proposicao): + if proposicao.texto_original: + try: + proposicao.hash_code = gerar_hash_arquivo( + proposicao.texto_original.path, str(proposicao.pk)) + except IOError: + raise Exception("Existem proposicoes com arquivos inexistentes.") + elif proposicao.texto_articulado.exists(): + ta = proposicao.texto_articulado.first() + proposicao.hash_code = 'P' + ta.hash() + SEPARADOR_HASH_PROPOSICAO + str(proposicao.pk) + print(proposicao.hash_code) + proposicao.save() + + +def gerar_hash_proposicoes(): + di = datetime.now() + print(di) + props = Proposicao.objects.filter(hash_code='', data_recebimento__isnull=True).exclude(data_envio__isnull=True) + print("Total de proposicoes: %s" % props.count()) + for prop in props: + try: + print(".",end="") + gerar_hash(prop) + except Exception as e: + print('Erro para proposicao', prop) + print(e) + + elapsed = datetime.now() - di + print("\n {}s".format(elapsed.seconds)) + diff --git a/scripts/gunicorn_start.sh b/scripts/gunicorn_start.sh new file mode 100755 index 000000000..d01503235 --- /dev/null +++ b/scripts/gunicorn_start.sh @@ -0,0 +1,54 @@ +#!/usr/bin/env bash + +# SCRIPT DE INICIALIZAÇÃO VIA SOKEFILE + +# As seen in http://tutos.readthedocs.org/en/latest/source/ndg.html + + +SAPL_DIR="/var/interlegis/sapl" + +# Seta um novo diretório foi passado como raiz para o SAPL +# caso esse tenha sido passado como parâmetro +if [ "$1" ] +then + SAPL_DIR="$1" +fi + +NAME="SAPL" # Name of the application (*) +DJANGODIR=$SAPL_DIR/ # Django project directory (*) +SOCKFILE=$SAPL_DIR/run/gunicorn.sock # we will communicate using this unix socket (*) +USER=`whoami` # the user to run as (*) +GROUP=`whoami` # the group to run as (*) +NUM_WORKERS=3 # how many worker processes should Gunicorn spawn (*) + # NUM_WORKERS = 2 * CPUS + 1 +TIMEOUT=60 +MAX_REQUESTS=100 # number of requests before restarting worker +DJANGO_SETTINGS_MODULE=sapl.settings # which settings file should Django use (*) +DJANGO_WSGI_MODULE=sapl.wsgi # WSGI module name (*) + +echo "Starting $NAME as `whoami` on base dir $SAPL_DIR" + +# Ativa ambiente virtual +cd $DJANGODIR +source $SAPL_DIR/../.virtualenvs/sapl/bin/activate + +export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE +export PYTHONPATH=$DJANGODIR:$PYTHONPATH + +# Create the run directory if it doesn't exist +RUNDIR=$(dirname $SOCKFILE) +test -d $RUNDIR || mkdir -p $RUNDIR + +# Start your Django Unicorn +# Programs meant to be run under supervisor should not daemonize themselves (do not use --daemon) +exec gunicorn ${DJANGO_WSGI_MODULE}:application \ + --name $NAME \ + --log-level debug \ + --timeout $TIMEOUT \ + --workers $NUM_WORKERS \ + --max-requests $MAX_REQUESTS \ + --user $USER \ + --access-logfile /var/log/sapl/access.log \ + --error-logfile /var/log/sapl/error.log \ + --bind=unix:$SOCKFILE + diff --git a/scripts/lista_urls.py b/scripts/lista_urls.py index 769268e1b..25edd8c3f 100644 --- a/scripts/lista_urls.py +++ b/scripts/lista_urls.py @@ -9,7 +9,7 @@ if __name__ == '__main__': if True: from sapl.urls import urlpatterns - from django.core.urlresolvers import RegexURLResolver + from django.urls.resolvers import URLResolver class ListaUrls(): @@ -17,7 +17,7 @@ class ListaUrls(): def lista_urls(self, _urls): urls = [] for item in _urls: - if isinstance(item, RegexURLResolver) and \ + if isinstance(item, URLResolver) and \ item.app_name.startswith('sapl'): for key, value in item.reverse_dict.items(): diff --git a/scripts/solr_password.py b/scripts/solr_password.py new file mode 100755 index 000000000..7a558292d --- /dev/null +++ b/scripts/solr_password.py @@ -0,0 +1,86 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +import secrets +import sys +from hashlib import sha256 +from base64 import b64encode, b64decode + +## +## Based on the logic here: +## https://www.planetcobalt.net/sdb/solr_password_hash.shtml +## http://www.mtitek.com/tutorials/solr/securing-solr-basic-auth.php +## https://github.com/apache/lucene-solr/blob/master/solr/core/src/java/org/apache/solr/security/Sha256AuthenticationProvider.java +## +## Usage: +## python solr_passwod.py or python solr_password.py +## or yet: cat password.txt | xargs python solr_password.py +## + + +def solr_hash_password(password: str, salt: str = None) -> (str, str): + """ + Generates a password and salt to be used in Basic Auth Solr + + password: clean text password string + salt (optional): base64 salt string + returns: sha256 hash of password and salt (both base64 strings) + """ + m = sha256() + if salt is None: + salt = secrets.token_bytes(32) + else: + salt = b64decode(salt) + m.update(salt + password.encode('utf-8')) + digest = m.digest() + + m = sha256() + m.update(digest) + digest = m.digest() + + cypher = b64encode(digest).decode('utf-8') + salt = b64encode(salt).decode('utf-8') + return cypher, salt + + +def check_solr_hash(password: str, cypher: str, salt: str) -> bool: + m = sha256() + m.update(b64decode(salt) + password.encode('utf-8')) + digest = m.digest() + + m = sha256() + m.update(digest) + digest = m.digest() + + return b64encode(digest).decode('utf-8') == cypher + + +def test_hash_password(): + password = "SolrRocks" + salt = "Ndd7LKvVBAaZIF0QAVi1ekCfAJXr1GGfLtRUXhgrF8c=" + cypher = "IV0EHq1OnNrj6gvRCwvFwTrZ1+z1oBbnQdiVC3otuq0=" + ret = solr_hash_password(password, salt) + assert ret[0] == cypher, "sha256 hashing of password failed!" + + cypher, salt = solr_hash_password(password) + assert solr_hash_password(password, salt) == (cypher, salt) + + +def test_hash_check(): + password = "SolrRocks" + salt = "Ndd7LKvVBAaZIF0QAVi1ekCfAJXr1GGfLtRUXhgrF8c=" + cypher = "IV0EHq1OnNrj6gvRCwvFwTrZ1+z1oBbnQdiVC3otuq0=" + + assert check_solr_hash(password, cypher, salt), "Sha256 password check failed!" + + +if __name__ == '__main__': + if len(sys.argv) < 2 or len(sys.argv) > 3: + print('Usage: %s [salt_base64]' % sys.argv[0]) + sys.exit(0) + + if len(sys.argv) == 3: + _salt = sys.argv[2] + else: + _salt = None + print("%s %s" % solr_hash_password(sys.argv[1], _salt)) diff --git a/setup.py b/setup.py index 070fa4491..f136ee9e7 100644 --- a/setup.py +++ b/setup.py @@ -12,7 +12,7 @@ install_requires = [ 'django>=1.11.19,<2.0', 'django-haystack==2.8.1', 'django-filter==2.0.0', - 'djangorestframework==3.9.1', + 'djangorestframework==3.11.2', 'dj-database-url==0.5.0', 'django-braces==1.9.0', 'django-crispy-forms==1.7.2', @@ -25,13 +25,12 @@ install_requires = [ 'django-extensions==2.1.4', 'django-image-cropping==1.2.0', 'django-webpack-loader==0.6.0', - 'drf-yasg==1.13.0', + 'drf-yasg==1.20.0', 'easy-thumbnails==2.5', 'python-decouple==3.1', 'psycopg2-binary==2.7.6.1', 'pyyaml==4.2b1', 'pytz==2018.9', - 'rtyaml==0.0.5', 'python-magic==0.4.15', 'unipath==1.1', 'WeasyPrint==44', @@ -43,7 +42,7 @@ install_requires = [ ] setup( name='interlegis-sapl', - version='3.1.161-RC3', + version='3.1.162-RC6', packages=find_packages(), include_package_data=True, license='GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007', diff --git a/solr/bin/create-collection.sh b/solr/bin/create-collection.sh new file mode 100644 index 000000000..3288ae43c --- /dev/null +++ b/solr/bin/create-collection.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +SOLR_URL=${SOLR_URL-'http://localhost:8983/solr'} +SOLR_COLLECTION=${SOLR_COLLECTION-'sapl'} + +curl -X POST "$SOLR_URL/admin/collections?action=CREATE&name=$SOLR_COLLECTION&numShards=1&replicationFactor=1&collection.configName=sapl_configset" \ No newline at end of file diff --git a/solr/bin/delete-all-documents.sh b/solr/bin/delete-all-documents.sh new file mode 100644 index 000000000..c9a7b09cf --- /dev/null +++ b/solr/bin/delete-all-documents.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +SOLR_URL=${SOLR_URL-'http://localhost:8983/solr'} +SOLR_COLLECTION=${SOLR_COLLECTION-'sapl'} + +curl -X POST "$SOLR_URL/$SOLR_COLLECTION/update?commit=true" -H "Content-Type: text/xml" --data-binary '*:*' diff --git a/solr/bin/delete-collection.sh b/solr/bin/delete-collection.sh new file mode 100644 index 000000000..9e4fb466e --- /dev/null +++ b/solr/bin/delete-collection.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +SOLR_URL=${SOLR_URL-'http://localhost:8983/solr'} +SOLR_COLLECTION=${SOLR_COLLECTION-'sapl'} + +curl -X POST "$SOLR_URL/admin/collections?action=DELETE&name=$SOLR_COLLECTION" \ No newline at end of file diff --git a/solr/bin/delete-config.sh b/solr/bin/delete-config.sh new file mode 100644 index 000000000..b8ca38823 --- /dev/null +++ b/solr/bin/delete-config.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +SOLR_URL=${SOLR_URL-'http://localhost:8983/solr'} + +curl -X POST "$SOLR_URL/admin/configs?action=DELETE&name=sapl_configset&omitHeader=true" \ No newline at end of file diff --git a/solr/bin/list-collections-configs.sh b/solr/bin/list-collections-configs.sh new file mode 100644 index 000000000..32bcb9e43 --- /dev/null +++ b/solr/bin/list-collections-configs.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash +SOLR_URL=${SOLR_URL-'http://localhost:8983/solr'} + +curl -X GET "$SOLR_URL/admin/collections?action=LIST" + +curl -X GET "$SOLR_URL/admin/configs?action=LIST" \ No newline at end of file diff --git a/solr/bin/update-configset.sh b/solr/bin/update-configset.sh new file mode 100644 index 000000000..52861868b --- /dev/null +++ b/solr/bin/update-configset.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +if [[ -z $SOLR_HOME ]]; then + echo 'Cannot run script! You need to setup $SOLR_HOME' + exit +fi + +ZK_HOST=${ZK_HOST-'localhost:9983'} + +$SOLR_HOME/bin/solr zk upconfig -n sapl_configset -d solr/sapl_configset/ -z $ZK_HOST diff --git a/solr/bin/upload-config.sh b/solr/bin/upload-config.sh new file mode 100644 index 000000000..8d1d7ba36 --- /dev/null +++ b/solr/bin/upload-config.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash + +SOLR_URL=${SOLR_URL-'http://localhost:8983/solr'} + +# zip configset sapl_configset +cd ../sapl_configset/conf && zip -r sapl_configset.zip . + +curl -X POST --header "Content-Type:application/octet-stream" --data-binary @sapl_configset.zip "$SOLR_URL/admin/configs?action=UPLOAD&name=sapl_configset" + +cd - +rm ../sapl_configset/conf/sapl_configset.zip \ No newline at end of file diff --git a/solr/docker-compose.yml b/solr/docker-compose.yml deleted file mode 100644 index 3fc59adb6..000000000 --- a/solr/docker-compose.yml +++ /dev/null @@ -1,58 +0,0 @@ -version: '2' -services: - sapldb: - image: postgres:10.5-alpine - restart: always - environment: - POSTGRES_PASSWORD: sapl - POSTGRES_USER: sapl - POSTGRES_DB: sapl - PGDATA : /var/lib/postgresql/data/ - volumes: - - sapldb_data:/var/lib/postgresql/data/ - ports: - - "5432:5432" - - saplsolr: - image: solr:7.4-alpine - restart: always - command: bin/solr start -c -f - volumes: - - solr_data:/opt/solr/server/solr - - solr_configsets:/opt/solr/server/solr/configsets - ports: - - "8983:8983" - - sapl: - image: interlegis/sapl:3.1.152 - # build: . - restart: always - environment: - ADMIN_PASSWORD: interlegis - ADMIN_EMAIL: email@dominio.net - DEBUG: 'False' - EMAIL_PORT: 587 - EMAIL_USE_TLS: 'False' - EMAIL_HOST: smtp.dominio.net - EMAIL_HOST_USER: usuariosmtp - EMAIL_HOST_PASSWORD: senhasmtp - USE_SOLR: 'True' - SOLR_COLLECTION: sapl - SOLR_URL: http://saplsolr:8983 - TZ: America/Sao_Paulo - volumes: - - sapl_data:/var/interlegis/sapl/data - - sapl_media:/var/interlegis/sapl/media - volumes_from: - - saplsolr - depends_on: - - sapldb - - saplsolr - ports: - - "80:80" -volumes: - sapldb_data: - sapl_data: - sapl_media: - solr_data: - solr_configsets: diff --git a/solr/sapl_configset/conf/saplconfigset.zip b/solr/sapl_configset/conf/saplconfigset.zip deleted file mode 100644 index 2bd9c45f3..000000000 Binary files a/solr/sapl_configset/conf/saplconfigset.zip and /dev/null differ diff --git a/vue.config.js b/vue.config.js new file mode 100644 index 000000000..e2b436725 --- /dev/null +++ b/vue.config.js @@ -0,0 +1,150 @@ +const each = require("lodash/fp/each"); +const path = require("path"); +const shell = require('shelljs'); + +const MomentLocalesPlugin = require("moment-locales-webpack-plugin"); +const BundleTrackerPlugin = require("webpack-bundle-tracker"); +const CompressionPlugin = require("compression-webpack-plugin"); +const CopyPlugin = require("copy-webpack-plugin"); + +class RelativeBundleTrackerPlugin extends BundleTrackerPlugin { + convertPathChunks(chunks) { + each( + each((chunk) => { + chunk.path = path.relative(this.options.path, chunk.path); + }) + )(chunks); + } + + writeOutput(compiler, contents) { + if (contents.status === "done") { + this.convertPathChunks(contents.chunks); + } + super.writeOutput(compiler, contents); + } +} + +const dotenv = require("dotenv"); +dotenv.config({ + path: "./sapl/.env", +}); + +var HOST_NAME = "localhost"; + +module.exports = { + runtimeCompiler: true, + publicPath: + process.env.NODE_ENV === "production" + ? "/static/sapl/frontend" + : `http://${HOST_NAME}:8080/`, + outputDir: "./sapl/static/sapl/frontend", + + chainWebpack: (config) => { + config.plugins.delete("html"); + config.plugins.delete("preload"); + config.plugins.delete("prefetch"); + + config.resolve.alias.set("@", path.join(__dirname + "/frontend/", "src")); + + config.plugin("copy").use(CopyPlugin, [ + [ + { + from: path.join(__dirname + "/frontend/", "public"), + to: ".", + }, + + { + from: path.join(__dirname, "/node_modules/tinymce/skins"), + to: "js/skins/[path][name].[ext]", + }, + ], + ]); + + config + .plugin("RelativeBundleTrackerPlugin") + .use(RelativeBundleTrackerPlugin, [ + { + path: ".", + filename: `./frontend/${ + process.env.DEBUG === "True" && + process.env.NODE_ENV !== "production" + ? "dev-" + : "" + }webpack-stats.json`, + }, + ]); + + config.plugin("MomentLocalesPlugin").use(MomentLocalesPlugin, [ + { + localesToKeep: ["pt-BR"], + }, + ]); + + config.resolve.alias.set("__STATIC__", "static"); + + config.devServer + .public("") + .port(8080) + .hot(true) + .watchOptions({ + poll: true, + }) + .watchContentBase(true) + .https(false) + .headers({ + "Access-Control-Allow-Origin": "*", + }) + .contentBase([ + path.join(__dirname + "/frontend/", "public"), + path.join(__dirname + "/frontend/", "src", "assets"), + ]); + + config.plugin("provide").use(require("webpack/lib/ProvidePlugin"), [ + { + $: "jquery", + jquery: "jquery", + "window.jQuery": "jquery", + jQuery: "jquery", + _: "lodash", + }, + ]); + + if (process.env.NODE_ENV === "production") { + config.optimization.minimizer("terser").tap((args) => { + args[0].terserOptions.compress.drop_console = true; + args[0].extractComments = true; + args[0].cache = true; + return args; + }); + + config.plugin("CompressionPlugin").use(CompressionPlugin, [{}]); + + shell.rm('frontend/dev-webpack-stats.json') + + } else { + config.devtool("source-map"); + } + + config.entryPoints.delete("app"); + + config + .entry("global") + .add("./frontend/src/__global/main.js") + .end(); + + config + .entry("compilacao") + .add("./frontend/src/__apps/compilacao/main.js") + .end(); + + config + .entry("painel") + .add("./frontend/src/__apps/painel/main.js") + .end(); + + config + .entry("parlamentar") + .add("./frontend/src/__apps/parlamentar/main.js") + .end(); + }, +}; diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 000000000..5718a0eb7 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,9520 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" + integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== + dependencies: + "@babel/highlight" "^7.10.4" + +"@babel/compat-data@^7.12.5", "@babel/compat-data@^7.12.7": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.12.7.tgz#9329b4782a7d6bbd7eef57e11addf91ee3ef1e41" + integrity sha512-YaxPMGs/XIWtYqrdEOZOCPsVWfEoriXopnsz3/i7apYPXQ3698UFhS6dVT1KN5qOsWmVgw/FOrmQgpRaZayGsw== + +"@babel/core@^7.11.0": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.10.tgz#b79a2e1b9f70ed3d84bbfb6d8c4ef825f606bccd" + integrity sha512-eTAlQKq65zHfkHZV0sIVODCPGVgoo1HdBlbSLi9CqOzuZanMv2ihzY+4paiKr1mH+XmYESMAmJ/dpZ68eN6d8w== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.12.10" + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helpers" "^7.12.5" + "@babel/parser" "^7.12.10" + "@babel/template" "^7.12.7" + "@babel/traverse" "^7.12.10" + "@babel/types" "^7.12.10" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.19" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/generator@^7.12.10": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.11.tgz#98a7df7b8c358c9a37ab07a24056853016aba3af" + integrity sha512-Ggg6WPOJtSi8yYQvLVjG8F/TlpWDlKx0OpS4Kt+xMQPs5OaGYWy+v1A+1TvxI6sAMGZpKWWoAQ1DaeQbImlItA== + dependencies: + "@babel/types" "^7.12.11" + jsesc "^2.5.1" + source-map "^0.5.0" + +"@babel/helper-annotate-as-pure@^7.10.4": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.10.tgz#54ab9b000e60a93644ce17b3f37d313aaf1d115d" + integrity sha512-XplmVbC1n+KY6jL8/fgLVXXUauDIB+lD5+GsQEh6F6GBF1dq1qy4DP4yXWzDKcoqXB3X58t61e85Fitoww4JVQ== + dependencies: + "@babel/types" "^7.12.10" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz#bb0b75f31bf98cbf9ff143c1ae578b87274ae1a3" + integrity sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-compilation-targets@^7.12.5", "@babel/helper-compilation-targets@^7.9.6": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.5.tgz#cb470c76198db6a24e9dbc8987275631e5d29831" + integrity sha512-+qH6NrscMolUlzOYngSBMIOQpKUGPPsc61Bu5W10mg84LxZ7cmvnBHzARKbDoFxVvqqAbj6Tg6N7bSrWSPXMyw== + dependencies: + "@babel/compat-data" "^7.12.5" + "@babel/helper-validator-option" "^7.12.1" + browserslist "^4.14.5" + semver "^5.5.0" + +"@babel/helper-create-class-features-plugin@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz#3c45998f431edd4a9214c5f1d3ad1448a6137f6e" + integrity sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-member-expression-to-functions" "^7.12.1" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/helper-replace-supers" "^7.12.1" + "@babel/helper-split-export-declaration" "^7.10.4" + +"@babel/helper-create-regexp-features-plugin@^7.12.1": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.7.tgz#2084172e95443fa0a09214ba1bb328f9aea1278f" + integrity sha512-idnutvQPdpbduutvi3JVfEgcVIHooQnhvhx0Nk9isOINOIGYkZea1Pk2JlJRiUnMefrlvr0vkByATBY/mB4vjQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + regexpu-core "^4.7.1" + +"@babel/helper-define-map@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz#b53c10db78a640800152692b13393147acb9bb30" + integrity sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/types" "^7.10.5" + lodash "^4.17.19" + +"@babel/helper-explode-assignable-expression@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz#8006a466695c4ad86a2a5f2fb15b5f2c31ad5633" + integrity sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA== + dependencies: + "@babel/types" "^7.12.1" + +"@babel/helper-function-name@^7.10.4": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.12.11.tgz#1fd7738aee5dcf53c3ecff24f1da9c511ec47b42" + integrity sha512-AtQKjtYNolKNi6nNNVLQ27CP6D9oFR6bq/HPYSizlzbp7uC1M59XJe8L+0uXjbIaZaUJF99ruHqVGiKXU/7ybA== + dependencies: + "@babel/helper-get-function-arity" "^7.12.10" + "@babel/template" "^7.12.7" + "@babel/types" "^7.12.11" + +"@babel/helper-get-function-arity@^7.12.10": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.10.tgz#b158817a3165b5faa2047825dfa61970ddcc16cf" + integrity sha512-mm0n5BPjR06wh9mPQaDdXWDoll/j5UpCAPl1x8fS71GHm7HA6Ua2V4ylG1Ju8lvcTOietbPNNPaSilKj+pj+Ag== + dependencies: + "@babel/types" "^7.12.10" + +"@babel/helper-hoist-variables@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz#d49b001d1d5a68ca5e6604dda01a6297f7c9381e" + integrity sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-member-expression-to-functions@^7.12.1", "@babel/helper-member-expression-to-functions@^7.12.7": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz#aa77bd0396ec8114e5e30787efa78599d874a855" + integrity sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw== + dependencies: + "@babel/types" "^7.12.7" + +"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.12.1", "@babel/helper-module-imports@^7.12.5", "@babel/helper-module-imports@^7.8.3": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz#1bfc0229f794988f76ed0a4d4e90860850b54dfb" + integrity sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA== + dependencies: + "@babel/types" "^7.12.5" + +"@babel/helper-module-transforms@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz#7954fec71f5b32c48e4b303b437c34453fd7247c" + integrity sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w== + dependencies: + "@babel/helper-module-imports" "^7.12.1" + "@babel/helper-replace-supers" "^7.12.1" + "@babel/helper-simple-access" "^7.12.1" + "@babel/helper-split-export-declaration" "^7.11.0" + "@babel/helper-validator-identifier" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.12.1" + "@babel/types" "^7.12.1" + lodash "^4.17.19" + +"@babel/helper-optimise-call-expression@^7.10.4", "@babel/helper-optimise-call-expression@^7.12.10": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.10.tgz#94ca4e306ee11a7dd6e9f42823e2ac6b49881e2d" + integrity sha512-4tpbU0SrSTjjt65UMWSrUOPZTsgvPgGG4S8QSTNHacKzpS51IVWGDj0yCwyeZND/i+LSN2g/O63jEXEWm49sYQ== + dependencies: + "@babel/types" "^7.12.10" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" + integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== + +"@babel/helper-remap-async-to-generator@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz#8c4dbbf916314f6047dc05e6a2217074238347fd" + integrity sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-wrap-function" "^7.10.4" + "@babel/types" "^7.12.1" + +"@babel/helper-replace-supers@^7.12.1": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.12.11.tgz#ea511658fc66c7908f923106dd88e08d1997d60d" + integrity sha512-q+w1cqmhL7R0FNzth/PLLp2N+scXEK/L2AHbXUyydxp828F4FEa5WcVoqui9vFRiHDQErj9Zof8azP32uGVTRA== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.12.7" + "@babel/helper-optimise-call-expression" "^7.12.10" + "@babel/traverse" "^7.12.10" + "@babel/types" "^7.12.11" + +"@babel/helper-simple-access@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz#32427e5aa61547d38eb1e6eaf5fd1426fdad9136" + integrity sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA== + dependencies: + "@babel/types" "^7.12.1" + +"@babel/helper-skip-transparent-expression-wrappers@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz#462dc63a7e435ade8468385c63d2b84cce4b3cbf" + integrity sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA== + dependencies: + "@babel/types" "^7.12.1" + +"@babel/helper-split-export-declaration@^7.10.4", "@babel/helper-split-export-declaration@^7.11.0": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.11.tgz#1b4cc424458643c47d37022223da33d76ea4603a" + integrity sha512-LsIVN8j48gHgwzfocYUSkO/hjYAOJqlpJEc7tGXcIm4cubjVUf8LGW6eWRyxEu7gA25q02p0rQUWoCI33HNS5g== + dependencies: + "@babel/types" "^7.12.11" + +"@babel/helper-validator-identifier@^7.10.4", "@babel/helper-validator-identifier@^7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" + integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== + +"@babel/helper-validator-option@^7.12.1", "@babel/helper-validator-option@^7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.11.tgz#d66cb8b7a3e7fe4c6962b32020a131ecf0847f4f" + integrity sha512-TBFCyj939mFSdeX7U7DDj32WtzYY7fDcalgq8v3fBZMNOJQNn7nOYzMaUCiPxPYfCup69mtIpqlKgMZLvQ8Xhw== + +"@babel/helper-wrap-function@^7.10.4": + version "7.12.3" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz#3332339fc4d1fbbf1c27d7958c27d34708e990d9" + integrity sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helpers@^7.12.5": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.12.5.tgz#1a1ba4a768d9b58310eda516c449913fe647116e" + integrity sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA== + dependencies: + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.12.5" + "@babel/types" "^7.12.5" + +"@babel/highlight@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" + integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.12.10", "@babel/parser@^7.12.7", "@babel/parser@^7.7.0": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.11.tgz#9ce3595bcd74bc5c466905e86c535b8b25011e79" + integrity sha512-N3UxG+uuF4CMYoNj8AhnbAcJF0PiuJ9KHuy1lQmkYsxTer/MAH9UBNHsBoAX/4s6NvlDD047No8mYVGGzLL4hg== + +"@babel/plugin-proposal-async-generator-functions@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz#dc6c1170e27d8aca99ff65f4925bd06b1c90550e" + integrity sha512-d+/o30tJxFxrA1lhzJqiUcEJdI6jKlNregCv5bASeGf2Q4MXmnwH7viDo7nhx1/ohf09oaH8j1GVYG/e3Yqk6A== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-remap-async-to-generator" "^7.12.1" + "@babel/plugin-syntax-async-generators" "^7.8.0" + +"@babel/plugin-proposal-class-properties@^7.12.1", "@babel/plugin-proposal-class-properties@^7.8.3": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz#a082ff541f2a29a4821065b8add9346c0c16e5de" + integrity sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-proposal-decorators@^7.8.3": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.12.1.tgz#59271439fed4145456c41067450543aee332d15f" + integrity sha512-knNIuusychgYN8fGJHONL0RbFxLGawhXOJNLBk75TniTsZZeA+wdkDuv6wp4lGwzQEKjZi6/WYtnb3udNPmQmQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-decorators" "^7.12.1" + +"@babel/plugin-proposal-dynamic-import@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz#43eb5c2a3487ecd98c5c8ea8b5fdb69a2749b2dc" + integrity sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + +"@babel/plugin-proposal-export-namespace-from@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz#8b9b8f376b2d88f5dd774e4d24a5cc2e3679b6d4" + integrity sha512-6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + +"@babel/plugin-proposal-json-strings@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz#d45423b517714eedd5621a9dfdc03fa9f4eb241c" + integrity sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-json-strings" "^7.8.0" + +"@babel/plugin-proposal-logical-assignment-operators@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz#f2c490d36e1b3c9659241034a5d2cd50263a2751" + integrity sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + +"@babel/plugin-proposal-nullish-coalescing-operator@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz#3ed4fff31c015e7f3f1467f190dbe545cd7b046c" + integrity sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + +"@babel/plugin-proposal-numeric-separator@^7.12.7": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.7.tgz#8bf253de8139099fea193b297d23a9d406ef056b" + integrity sha512-8c+uy0qmnRTeukiGsjLGy6uVs/TFjJchGXUeBqlG4VWYOdJWkhhVPdQ3uHwbmalfJwv2JsV0qffXP4asRfL2SQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-proposal-object-rest-spread@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz#def9bd03cea0f9b72283dac0ec22d289c7691069" + integrity sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-transform-parameters" "^7.12.1" + +"@babel/plugin-proposal-optional-catch-binding@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz#ccc2421af64d3aae50b558a71cede929a5ab2942" + integrity sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + +"@babel/plugin-proposal-optional-chaining@^7.12.7": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.7.tgz#e02f0ea1b5dc59d401ec16fb824679f683d3303c" + integrity sha512-4ovylXZ0PWmwoOvhU2vhnzVNnm88/Sm9nx7V8BPgMvAzn5zDou3/Awy0EjglyubVHasJj+XCEkr/r1X3P5elCA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + +"@babel/plugin-proposal-private-methods@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz#86814f6e7a21374c980c10d38b4493e703f4a389" + integrity sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-proposal-unicode-property-regex@^7.12.1", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz#2a183958d417765b9eae334f47758e5d6a82e072" + integrity sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-async-generators@^7.8.0": + 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-class-properties@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz#bcb297c5366e79bebadef509549cd93b04f19978" + integrity sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-decorators@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.12.1.tgz#81a8b535b284476c41be6de06853a8802b98c5dd" + integrity sha512-ir9YW5daRrTYiy9UJ2TzdNIJEZu8KclVzDcfSt4iEmOtwQ4llPtWInNKJyKnVXp1vE4bbVd5S31M/im3mYMO1w== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-dynamic-import@^7.8.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-json-strings@^7.8.0": + 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.0.0", "@babel/plugin-syntax-jsx@^7.2.0", "@babel/plugin-syntax-jsx@^7.8.3": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz#9d9d357cc818aa7ae7935917c1257f67677a0926" + integrity sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": + 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.0": + 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": + 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.0": + 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.0": + 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.0": + 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-top-level-await@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz#dd6c0b357ac1bb142d98537450a319625d13d2a0" + integrity sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-arrow-functions@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz#8083ffc86ac8e777fbe24b5967c4b2521f3cb2b3" + integrity sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-async-to-generator@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz#3849a49cc2a22e9743cbd6b52926d30337229af1" + integrity sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A== + dependencies: + "@babel/helper-module-imports" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-remap-async-to-generator" "^7.12.1" + +"@babel/plugin-transform-block-scoped-functions@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz#f2a1a365bde2b7112e0a6ded9067fdd7c07905d9" + integrity sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-block-scoping@^7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.11.tgz#83ae92a104dbb93a7d6c6dd1844f351083c46b4f" + integrity sha512-atR1Rxc3hM+VPg/NvNvfYw0npQEAcHuJ+MGZnFn6h3bo+1U3BWXMdFMlvVRApBTWKQMX7SOwRJZA5FBF/JQbvA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-classes@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz#65e650fcaddd3d88ddce67c0f834a3d436a32db6" + integrity sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-define-map" "^7.10.4" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.12.1" + "@babel/helper-split-export-declaration" "^7.10.4" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz#d68cf6c9b7f838a8a4144badbe97541ea0904852" + integrity sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-destructuring@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz#b9a570fe0d0a8d460116413cb4f97e8e08b2f847" + integrity sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-dotall-regex@^7.12.1", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz#a1d16c14862817b6409c0a678d6f9373ca9cd975" + integrity sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-duplicate-keys@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz#745661baba295ac06e686822797a69fbaa2ca228" + integrity sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-exponentiation-operator@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz#b0f2ed356ba1be1428ecaf128ff8a24f02830ae0" + integrity sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-for-of@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz#07640f28867ed16f9511c99c888291f560921cfa" + integrity sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-function-name@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz#2ec76258c70fe08c6d7da154003a480620eba667" + integrity sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-literals@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz#d73b803a26b37017ddf9d3bb8f4dc58bfb806f57" + integrity sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-member-expression-literals@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz#496038602daf1514a64d43d8e17cbb2755e0c3ad" + integrity sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-modules-amd@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz#3154300b026185666eebb0c0ed7f8415fefcf6f9" + integrity sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ== + dependencies: + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-commonjs@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz#fa403124542636c786cf9b460a0ffbb48a86e648" + integrity sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag== + dependencies: + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-simple-access" "^7.12.1" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-systemjs@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz#663fea620d593c93f214a464cd399bf6dc683086" + integrity sha512-Hn7cVvOavVh8yvW6fLwveFqSnd7rbQN3zJvoPNyNaQSvgfKmDBO9U1YL9+PCXGRlZD9tNdWTy5ACKqMuzyn32Q== + dependencies: + "@babel/helper-hoist-variables" "^7.10.4" + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-validator-identifier" "^7.10.4" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-umd@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz#eb5a218d6b1c68f3d6217b8fa2cc82fec6547902" + integrity sha512-aEIubCS0KHKM0zUos5fIoQm+AZUMt1ZvMpqz0/H5qAQ7vWylr9+PLYurT+Ic7ID/bKLd4q8hDovaG3Zch2uz5Q== + dependencies: + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz#b407f5c96be0d9f5f88467497fa82b30ac3e8753" + integrity sha512-tB43uQ62RHcoDp9v2Nsf+dSM8sbNodbEicbQNA53zHz8pWUhsgHSJCGpt7daXxRydjb0KnfmB+ChXOv3oADp1Q== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.12.1" + +"@babel/plugin-transform-new-target@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz#80073f02ee1bb2d365c3416490e085c95759dec0" + integrity sha512-+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-object-super@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz#4ea08696b8d2e65841d0c7706482b048bed1066e" + integrity sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.12.1" + +"@babel/plugin-transform-parameters@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz#d2e963b038771650c922eff593799c96d853255d" + integrity sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-property-literals@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz#41bc81200d730abb4456ab8b3fbd5537b59adecd" + integrity sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-regenerator@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz#5f0a28d842f6462281f06a964e88ba8d7ab49753" + integrity sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng== + dependencies: + regenerator-transform "^0.14.2" + +"@babel/plugin-transform-reserved-words@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz#6fdfc8cc7edcc42b36a7c12188c6787c873adcd8" + integrity sha512-pOnUfhyPKvZpVyBHhSBoX8vfA09b7r00Pmm1sH+29ae2hMTKVmSp4Ztsr8KBKjLjx17H0eJqaRC3bR2iThM54A== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-runtime@^7.11.0": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.12.10.tgz#af0fded4e846c4b37078e8e5d06deac6cd848562" + integrity sha512-xOrUfzPxw7+WDm9igMgQCbO3cJKymX7dFdsgRr1eu9n3KjjyU4pptIXbXPseQDquw+W+RuJEJMHKHNsPNNm3CA== + dependencies: + "@babel/helper-module-imports" "^7.12.5" + "@babel/helper-plugin-utils" "^7.10.4" + semver "^5.5.1" + +"@babel/plugin-transform-shorthand-properties@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz#0bf9cac5550fce0cfdf043420f661d645fdc75e3" + integrity sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-spread@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz#527f9f311be4ec7fdc2b79bb89f7bf884b3e1e1e" + integrity sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + +"@babel/plugin-transform-sticky-regex@^7.12.7": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.7.tgz#560224613ab23987453948ed21d0b0b193fa7fad" + integrity sha512-VEiqZL5N/QvDbdjfYQBhruN0HYjSPjC4XkeqW4ny/jNtH9gcbgaqBIXYEZCNnESMAGs0/K/R7oFGMhOyu/eIxg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-template-literals@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz#b43ece6ed9a79c0c71119f576d299ef09d942843" + integrity sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-typeof-symbol@^7.12.10": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.10.tgz#de01c4c8f96580bd00f183072b0d0ecdcf0dec4b" + integrity sha512-JQ6H8Rnsogh//ijxspCjc21YPd3VLVoYtAwv3zQmqAt8YGYUtdo5usNhdl4b9/Vir2kPFZl6n1h0PfUz4hJhaA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-unicode-escapes@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.1.tgz#5232b9f81ccb07070b7c3c36c67a1b78f1845709" + integrity sha512-I8gNHJLIc7GdApm7wkVnStWssPNbSRMPtgHdmH3sRM1zopz09UWPS4x5V4n1yz/MIWTVnJ9sp6IkuXdWM4w+2Q== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-unicode-regex@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz#cc9661f61390db5c65e3febaccefd5c6ac3faecb" + integrity sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/preset-env@^7.11.0": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.12.11.tgz#55d5f7981487365c93dbbc84507b1c7215e857f9" + integrity sha512-j8Tb+KKIXKYlDBQyIOy4BLxzv1NUOwlHfZ74rvW+Z0Gp4/cI2IMDPBWAgWceGcE7aep9oL/0K9mlzlMGxA8yNw== + dependencies: + "@babel/compat-data" "^7.12.7" + "@babel/helper-compilation-targets" "^7.12.5" + "@babel/helper-module-imports" "^7.12.5" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-validator-option" "^7.12.11" + "@babel/plugin-proposal-async-generator-functions" "^7.12.1" + "@babel/plugin-proposal-class-properties" "^7.12.1" + "@babel/plugin-proposal-dynamic-import" "^7.12.1" + "@babel/plugin-proposal-export-namespace-from" "^7.12.1" + "@babel/plugin-proposal-json-strings" "^7.12.1" + "@babel/plugin-proposal-logical-assignment-operators" "^7.12.1" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.12.1" + "@babel/plugin-proposal-numeric-separator" "^7.12.7" + "@babel/plugin-proposal-object-rest-spread" "^7.12.1" + "@babel/plugin-proposal-optional-catch-binding" "^7.12.1" + "@babel/plugin-proposal-optional-chaining" "^7.12.7" + "@babel/plugin-proposal-private-methods" "^7.12.1" + "@babel/plugin-proposal-unicode-property-regex" "^7.12.1" + "@babel/plugin-syntax-async-generators" "^7.8.0" + "@babel/plugin-syntax-class-properties" "^7.12.1" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.0" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + "@babel/plugin-syntax-top-level-await" "^7.12.1" + "@babel/plugin-transform-arrow-functions" "^7.12.1" + "@babel/plugin-transform-async-to-generator" "^7.12.1" + "@babel/plugin-transform-block-scoped-functions" "^7.12.1" + "@babel/plugin-transform-block-scoping" "^7.12.11" + "@babel/plugin-transform-classes" "^7.12.1" + "@babel/plugin-transform-computed-properties" "^7.12.1" + "@babel/plugin-transform-destructuring" "^7.12.1" + "@babel/plugin-transform-dotall-regex" "^7.12.1" + "@babel/plugin-transform-duplicate-keys" "^7.12.1" + "@babel/plugin-transform-exponentiation-operator" "^7.12.1" + "@babel/plugin-transform-for-of" "^7.12.1" + "@babel/plugin-transform-function-name" "^7.12.1" + "@babel/plugin-transform-literals" "^7.12.1" + "@babel/plugin-transform-member-expression-literals" "^7.12.1" + "@babel/plugin-transform-modules-amd" "^7.12.1" + "@babel/plugin-transform-modules-commonjs" "^7.12.1" + "@babel/plugin-transform-modules-systemjs" "^7.12.1" + "@babel/plugin-transform-modules-umd" "^7.12.1" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.12.1" + "@babel/plugin-transform-new-target" "^7.12.1" + "@babel/plugin-transform-object-super" "^7.12.1" + "@babel/plugin-transform-parameters" "^7.12.1" + "@babel/plugin-transform-property-literals" "^7.12.1" + "@babel/plugin-transform-regenerator" "^7.12.1" + "@babel/plugin-transform-reserved-words" "^7.12.1" + "@babel/plugin-transform-shorthand-properties" "^7.12.1" + "@babel/plugin-transform-spread" "^7.12.1" + "@babel/plugin-transform-sticky-regex" "^7.12.7" + "@babel/plugin-transform-template-literals" "^7.12.1" + "@babel/plugin-transform-typeof-symbol" "^7.12.10" + "@babel/plugin-transform-unicode-escapes" "^7.12.1" + "@babel/plugin-transform-unicode-regex" "^7.12.1" + "@babel/preset-modules" "^0.1.3" + "@babel/types" "^7.12.11" + core-js-compat "^3.8.0" + semver "^5.5.0" + +"@babel/preset-modules@^0.1.3": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e" + integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg== + 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/runtime@^7.11.0", "@babel/runtime@^7.8.4": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.5.tgz#410e7e487441e1b360c29be715d870d9b985882e" + integrity sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/template@^7.0.0", "@babel/template@^7.10.4", "@babel/template@^7.12.7": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.7.tgz#c817233696018e39fbb6c491d2fb684e05ed43bc" + integrity sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/parser" "^7.12.7" + "@babel/types" "^7.12.7" + +"@babel/traverse@^7.0.0", "@babel/traverse@^7.10.4", "@babel/traverse@^7.12.1", "@babel/traverse@^7.12.10", "@babel/traverse@^7.12.5", "@babel/traverse@^7.7.0": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.10.tgz#2d1f4041e8bf42ea099e5b2dc48d6a594c00017a" + integrity sha512-6aEtf0IeRgbYWzta29lePeYSk+YAFIC3kyqESeft8o5CkFlYIMX+EQDDWEiAQ9LHOA3d0oHdgrSsID/CKqXJlg== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.12.10" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.11.0" + "@babel/parser" "^7.12.10" + "@babel/types" "^7.12.10" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.19" + +"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.12.1", "@babel/types@^7.12.10", "@babel/types@^7.12.11", "@babel/types@^7.12.5", "@babel/types@^7.12.7", "@babel/types@^7.4.4", "@babel/types@^7.7.0": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.11.tgz#a86e4d71e30a9b6ee102590446c98662589283ce" + integrity sha512-ukA9SQtKThINm++CX1CwmliMrE54J6nIYB5XTwL5f/CLFW9owfls+YSU8tVW15RQ2w+a3fSbPjC6HdQNtWZkiA== + dependencies: + "@babel/helper-validator-identifier" "^7.12.11" + lodash "^4.17.19" + to-fast-properties "^2.0.0" + +"@fortawesome/fontawesome-free@^5.13.0": + version "5.15.1" + resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-5.15.1.tgz#ccfef6ddbe59f8fe8f694783e1d3eb88902dc5eb" + integrity sha512-OEdH7SyC1suTdhBGW91/zBfR6qaIhThbcN8PUXtXilY4GYnSBbVqOntdHbC1vXwsDnX0Qix2m2+DSU1J51ybOQ== + +"@hapi/address@2.x.x": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@hapi/address/-/address-2.1.4.tgz#5d67ed43f3fd41a69d4b9ff7b56e7c0d1d0a81e5" + integrity sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ== + +"@hapi/bourne@1.x.x": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@hapi/bourne/-/bourne-1.3.2.tgz#0a7095adea067243ce3283e1b56b8a8f453b242a" + integrity sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA== + +"@hapi/hoek@8.x.x", "@hapi/hoek@^8.3.0": + version "8.5.1" + resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-8.5.1.tgz#fde96064ca446dec8c55a8c2f130957b070c6e06" + integrity sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow== + +"@hapi/joi@^15.0.1": + version "15.1.1" + resolved "https://registry.yarnpkg.com/@hapi/joi/-/joi-15.1.1.tgz#c675b8a71296f02833f8d6d243b34c57b8ce19d7" + integrity sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ== + dependencies: + "@hapi/address" "2.x.x" + "@hapi/bourne" "1.x.x" + "@hapi/hoek" "8.x.x" + "@hapi/topo" "3.x.x" + +"@hapi/topo@3.x.x": + version "3.1.6" + resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-3.1.6.tgz#68d935fa3eae7fdd5ab0d7f953f3205d8b2bfc29" + integrity sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ== + dependencies: + "@hapi/hoek" "^8.3.0" + +"@intervolga/optimize-cssnano-plugin@^1.0.5": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@intervolga/optimize-cssnano-plugin/-/optimize-cssnano-plugin-1.0.6.tgz#be7c7846128b88f6a9b1d1261a0ad06eb5c0fdf8" + integrity sha512-zN69TnSr0viRSU6cEDIcuPcP67QcpQ6uHACg58FiN9PDrU6SLyGW3MR4tiISbYxy1kDWAVPwD+XwQTWE5cigAA== + dependencies: + cssnano "^4.0.0" + cssnano-preset-default "^4.0.0" + postcss "^7.0.0" + +"@mrmlnc/readdir-enhanced@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" + integrity sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g== + dependencies: + call-me-maybe "^1.0.1" + glob-to-regexp "^0.3.0" + +"@nodelib/fs.stat@^1.1.2": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" + integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== + +"@nuxt/opencollective@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@nuxt/opencollective/-/opencollective-0.3.2.tgz#83cb70cdb2bac5fad6f8c93529e7b11187d49c02" + integrity sha512-XG7rUdXG9fcafu9KTDIYjJSkRO38EwjlKYIb5TQ/0WDbiTUTtUtgncMscKOYzfsY86kGs05pAuMOR+3Fi0aN3A== + dependencies: + chalk "^4.1.0" + consola "^2.15.0" + node-fetch "^2.6.1" + +"@soda/friendly-errors-webpack-plugin@^1.7.1": + version "1.8.0" + resolved "https://registry.yarnpkg.com/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.8.0.tgz#84751d82a93019d5c92c0cf0e45ac59087cd2240" + integrity sha512-RLotfx6k1+nfLacwNCenj7VnTMPxVwYKoGOcffMFoJDKM8tXzBiCN0hMHFJNnoAojduYAsxuiMm0EOMixgiRow== + dependencies: + chalk "^2.4.2" + error-stack-parser "^2.0.2" + string-width "^2.0.0" + strip-ansi "^5" + +"@soda/get-current-script@^1.0.0": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@soda/get-current-script/-/get-current-script-1.0.2.tgz#a53515db25d8038374381b73af20bb4f2e508d87" + integrity sha512-T7VNNlYVM1SgQ+VsMYhnDkcGmWhQdL0bDyGm5TlQ3GBXnJscEClUUOKduWTmm2zCnvNLC1hc3JpuXjs/nFOc5w== + +"@types/anymatch@*": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@types/anymatch/-/anymatch-1.3.1.tgz#336badc1beecb9dacc38bea2cf32adf627a8421a" + integrity sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA== + +"@types/body-parser@*": + version "1.19.0" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.0.tgz#0685b3c47eb3006ffed117cdd55164b61f80538f" + integrity sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ== + dependencies: + "@types/connect" "*" + "@types/node" "*" + +"@types/connect-history-api-fallback@*": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.3.tgz#4772b79b8b53185f0f4c9deab09236baf76ee3b4" + integrity sha512-7SxFCd+FLlxCfwVwbyPxbR4khL9aNikJhrorw8nUIOqeuooc9gifBuDQOJw5kzN7i6i3vLn9G8Wde/4QDihpYw== + dependencies: + "@types/express-serve-static-core" "*" + "@types/node" "*" + +"@types/connect@*": + version "3.4.34" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.34.tgz#170a40223a6d666006d93ca128af2beb1d9b1901" + integrity sha512-ePPA/JuI+X0vb+gSWlPKOY0NdNAie/rPUqX2GUPpbZwiKTkSPhjXWuee47E4MtE54QVzGCQMQkAL6JhV2E1+cQ== + dependencies: + "@types/node" "*" + +"@types/express-serve-static-core@*": + version "4.17.17" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.17.tgz#6ba02465165b6c9c3d8db3a28def6b16fc9b70f5" + integrity sha512-YYlVaCni5dnHc+bLZfY908IG1+x5xuibKZMGv8srKkvtul3wUuanYvpIj9GXXoWkQbaAdR+kgX46IETKUALWNQ== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + +"@types/express@*": + version "4.17.9" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.9.tgz#f5f2df6add703ff28428add52bdec8a1091b0a78" + integrity sha512-SDzEIZInC4sivGIFY4Sz1GG6J9UObPwCInYJjko2jzOf/Imx/dlpume6Xxwj1ORL82tBbmN4cPDIDkLbWHk9hw== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "*" + "@types/qs" "*" + "@types/serve-static" "*" + +"@types/glob@^7.1.1": + version "7.1.3" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" + integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w== + dependencies: + "@types/minimatch" "*" + "@types/node" "*" + +"@types/http-proxy-middleware@*": + version "0.19.3" + resolved "https://registry.yarnpkg.com/@types/http-proxy-middleware/-/http-proxy-middleware-0.19.3.tgz#b2eb96fbc0f9ac7250b5d9c4c53aade049497d03" + integrity sha512-lnBTx6HCOUeIJMLbI/LaL5EmdKLhczJY5oeXZpX/cXE4rRqb3RmV7VcMpiEfYkmTjipv3h7IAyIINe4plEv7cA== + dependencies: + "@types/connect" "*" + "@types/http-proxy" "*" + "@types/node" "*" + +"@types/http-proxy@*": + version "1.17.4" + resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.4.tgz#e7c92e3dbe3e13aa799440ff42e6d3a17a9d045b" + integrity sha512-IrSHl2u6AWXduUaDLqYpt45tLVCtYv7o4Z0s1KghBCDgIIS9oW5K1H8mZG/A2CfeLdEa7rTd1ACOiHBc1EMT2Q== + dependencies: + "@types/node" "*" + +"@types/json-schema@^7.0.5": + version "7.0.6" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.6.tgz#f4c7ec43e81b319a9815115031709f26987891f0" + integrity sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw== + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= + +"@types/mime@*": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-2.0.3.tgz#c893b73721db73699943bfc3653b1deb7faa4a3a" + integrity sha512-Jus9s4CDbqwocc5pOAnh8ShfrnMcPHuJYzVcSUU7lrh8Ni5HuIqX3oilL86p3dlTrk0LzHRCgA/GQ7uNCw6l2Q== + +"@types/minimatch@*": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" + integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== + +"@types/minimist@^1.2.0": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.1.tgz#283f669ff76d7b8260df8ab7a4262cc83d988256" + integrity sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg== + +"@types/node@*": + version "14.14.14" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.14.tgz#f7fd5f3cc8521301119f63910f0fb965c7d761ae" + integrity sha512-UHnOPWVWV1z+VV8k6L1HhG7UbGBgIdghqF3l9Ny9ApPghbjICXkUJSd/b9gOgQfjM1r+37cipdw/HJ3F6ICEnQ== + +"@types/normalize-package-data@^2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" + integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== + +"@types/q@^1.5.1": + version "1.5.4" + resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.4.tgz#15925414e0ad2cd765bfef58842f7e26a7accb24" + integrity sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug== + +"@types/qs@*": + version "6.9.5" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.5.tgz#434711bdd49eb5ee69d90c1d67c354a9a8ecb18b" + integrity sha512-/JHkVHtx/REVG0VVToGRGH2+23hsYLHdyG+GrvoUGlGAd0ErauXDyvHtRI/7H7mzLm+tBCKA7pfcpkQ1lf58iQ== + +"@types/range-parser@*": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.3.tgz#7ee330ba7caafb98090bece86a5ee44115904c2c" + integrity sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA== + +"@types/serve-static@*": + version "1.13.8" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.8.tgz#851129d434433c7082148574ffec263d58309c46" + integrity sha512-MoJhSQreaVoL+/hurAZzIm8wafFR6ajiTM1m4A0kv6AGeVBl4r4pOV8bGFrjjq1sGxDTnCoF8i22o0/aE5XCyA== + dependencies: + "@types/mime" "*" + "@types/node" "*" + +"@types/source-list-map@*": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9" + integrity sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA== + +"@types/tapable@*": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.6.tgz#a9ca4b70a18b270ccb2bc0aaafefd1d486b7ea74" + integrity sha512-W+bw9ds02rAQaMvaLYxAbJ6cvguW/iJXNT6lTssS1ps6QdrMKttqEAMEG/b5CR8TZl3/L7/lH0ZV5nNR1LXikA== + +"@types/uglify-js@*": + version "3.11.1" + resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.11.1.tgz#97ff30e61a0aa6876c270b5f538737e2d6ab8ceb" + integrity sha512-7npvPKV+jINLu1SpSYVWG8KvyJBhBa8tmzMMdDoVc2pWUYHN8KIXlPJhjJ4LT97c4dXJA2SHL/q6ADbDriZN+Q== + dependencies: + source-map "^0.6.1" + +"@types/webpack-dev-server@^3.11.0": + version "3.11.1" + resolved "https://registry.yarnpkg.com/@types/webpack-dev-server/-/webpack-dev-server-3.11.1.tgz#f8f4dac1da226d530bd15a1d5dc34b23ba766ccb" + integrity sha512-rIb+LtUkKnh7+oIJm3WiMJONd71Q0lZuqGLcSqhZ5qjN9gV/CNmZe7Bai+brnBPZ/KVYOsr+4bFLiNZwjBicLw== + dependencies: + "@types/connect-history-api-fallback" "*" + "@types/express" "*" + "@types/http-proxy-middleware" "*" + "@types/serve-static" "*" + "@types/webpack" "*" + +"@types/webpack-sources@*": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-2.1.0.tgz#8882b0bd62d1e0ce62f183d0d01b72e6e82e8c10" + integrity sha512-LXn/oYIpBeucgP1EIJbKQ2/4ZmpvRl+dlrFdX7+94SKRUV3Evy3FsfMZY318vGhkWUS5MPhtOM3w1/hCOAOXcg== + dependencies: + "@types/node" "*" + "@types/source-list-map" "*" + source-map "^0.7.3" + +"@types/webpack@*", "@types/webpack@^4.0.0": + version "4.41.25" + resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.25.tgz#4d3b5aecc4e44117b376280fbfd2dc36697968c4" + integrity sha512-cr6kZ+4m9lp86ytQc1jPOJXgINQyz3kLLunZ57jznW+WIAL0JqZbGubQk4GlD42MuQL5JGOABrxdpqqWeovlVQ== + dependencies: + "@types/anymatch" "*" + "@types/node" "*" + "@types/tapable" "*" + "@types/uglify-js" "*" + "@types/webpack-sources" "*" + source-map "^0.6.0" + +"@vue/babel-helper-vue-jsx-merge-props@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.2.1.tgz#31624a7a505fb14da1d58023725a4c5f270e6a81" + integrity sha512-QOi5OW45e2R20VygMSNhyQHvpdUwQZqGPc748JLGCYEy+yp8fNFNdbNIGAgZmi9e+2JHPd6i6idRuqivyicIkA== + +"@vue/babel-helper-vue-transform-on@^1.0.0-rc.2": + version "1.0.0-rc.2" + resolved "https://registry.yarnpkg.com/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.0.0-rc.2.tgz#7246341f666e7c6e65b13da420e2ce85714fbbca" + integrity sha512-1+7CwjQ0Kasml6rHoNQUmbISwqLNNfFVBUcZl6QBremUl296ZmLrVQPqJP5pyAAWjZke5bpI1hlj+LVVuT7Jcg== + +"@vue/babel-plugin-jsx@^1.0.0-0": + version "1.0.0-rc.5" + resolved "https://registry.yarnpkg.com/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.0.0-rc.5.tgz#e440be2d0775ee3828cba2c38a03b19a92174865" + integrity sha512-IUxERGiEeX9i1Vt9UtBYqOtfPYjOwEP0sFyPRI8xjkXAhJpaAIwa8JdcYakOqzIlXwhk3XD+7VFdyr/v+rLLFw== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/plugin-syntax-jsx" "^7.0.0" + "@babel/template" "^7.0.0" + "@babel/traverse" "^7.0.0" + "@babel/types" "^7.0.0" + "@vue/babel-helper-vue-transform-on" "^1.0.0-rc.2" + camelcase "^6.0.0" + html-tags "^3.1.0" + svg-tags "^1.0.0" + +"@vue/babel-plugin-transform-vue-jsx@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.2.1.tgz#646046c652c2f0242727f34519d917b064041ed7" + integrity sha512-HJuqwACYehQwh1fNT8f4kyzqlNMpBuUK4rSiSES5D4QsYncv5fxFsLyrxFPG2ksO7t5WP+Vgix6tt6yKClwPzA== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/plugin-syntax-jsx" "^7.2.0" + "@vue/babel-helper-vue-jsx-merge-props" "^1.2.1" + html-tags "^2.0.0" + lodash.kebabcase "^4.1.1" + svg-tags "^1.0.0" + +"@vue/babel-preset-app@^4.5.9": + version "4.5.9" + resolved "https://registry.yarnpkg.com/@vue/babel-preset-app/-/babel-preset-app-4.5.9.tgz#a4ef1830a21301e4f77d7cd4a04555d8a01eaf33" + integrity sha512-d2H4hFnJsGnZtJAAZIbo1dmQJ2SI1MYix1Tc9/etlnJtCDPRHeCNodCSeuLgDwnoAyT3unzyHmTtaO56KRDuOQ== + dependencies: + "@babel/core" "^7.11.0" + "@babel/helper-compilation-targets" "^7.9.6" + "@babel/helper-module-imports" "^7.8.3" + "@babel/plugin-proposal-class-properties" "^7.8.3" + "@babel/plugin-proposal-decorators" "^7.8.3" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-syntax-jsx" "^7.8.3" + "@babel/plugin-transform-runtime" "^7.11.0" + "@babel/preset-env" "^7.11.0" + "@babel/runtime" "^7.11.0" + "@vue/babel-plugin-jsx" "^1.0.0-0" + "@vue/babel-preset-jsx" "^1.1.2" + babel-plugin-dynamic-import-node "^2.3.3" + core-js "^3.6.5" + core-js-compat "^3.6.5" + semver "^6.1.0" + +"@vue/babel-preset-jsx@^1.1.2": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@vue/babel-preset-jsx/-/babel-preset-jsx-1.2.4.tgz#92fea79db6f13b01e80d3a0099e2924bdcbe4e87" + integrity sha512-oRVnmN2a77bYDJzeGSt92AuHXbkIxbf/XXSE3klINnh9AXBmVS1DGa1f0d+dDYpLfsAKElMnqKTQfKn7obcL4w== + dependencies: + "@vue/babel-helper-vue-jsx-merge-props" "^1.2.1" + "@vue/babel-plugin-transform-vue-jsx" "^1.2.1" + "@vue/babel-sugar-composition-api-inject-h" "^1.2.1" + "@vue/babel-sugar-composition-api-render-instance" "^1.2.4" + "@vue/babel-sugar-functional-vue" "^1.2.2" + "@vue/babel-sugar-inject-h" "^1.2.2" + "@vue/babel-sugar-v-model" "^1.2.3" + "@vue/babel-sugar-v-on" "^1.2.3" + +"@vue/babel-sugar-composition-api-inject-h@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@vue/babel-sugar-composition-api-inject-h/-/babel-sugar-composition-api-inject-h-1.2.1.tgz#05d6e0c432710e37582b2be9a6049b689b6f03eb" + integrity sha512-4B3L5Z2G+7s+9Bwbf+zPIifkFNcKth7fQwekVbnOA3cr3Pq71q71goWr97sk4/yyzH8phfe5ODVzEjX7HU7ItQ== + dependencies: + "@babel/plugin-syntax-jsx" "^7.2.0" + +"@vue/babel-sugar-composition-api-render-instance@^1.2.4": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@vue/babel-sugar-composition-api-render-instance/-/babel-sugar-composition-api-render-instance-1.2.4.tgz#e4cbc6997c344fac271785ad7a29325c51d68d19" + integrity sha512-joha4PZznQMsxQYXtR3MnTgCASC9u3zt9KfBxIeuI5g2gscpTsSKRDzWQt4aqNIpx6cv8On7/m6zmmovlNsG7Q== + dependencies: + "@babel/plugin-syntax-jsx" "^7.2.0" + +"@vue/babel-sugar-functional-vue@^1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.2.2.tgz#267a9ac8d787c96edbf03ce3f392c49da9bd2658" + integrity sha512-JvbgGn1bjCLByIAU1VOoepHQ1vFsroSA/QkzdiSs657V79q6OwEWLCQtQnEXD/rLTA8rRit4rMOhFpbjRFm82w== + dependencies: + "@babel/plugin-syntax-jsx" "^7.2.0" + +"@vue/babel-sugar-inject-h@^1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.2.2.tgz#d738d3c893367ec8491dcbb669b000919293e3aa" + integrity sha512-y8vTo00oRkzQTgufeotjCLPAvlhnpSkcHFEp60+LJUwygGcd5Chrpn5480AQp/thrxVm8m2ifAk0LyFel9oCnw== + dependencies: + "@babel/plugin-syntax-jsx" "^7.2.0" + +"@vue/babel-sugar-v-model@^1.2.3": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.2.3.tgz#fa1f29ba51ebf0aa1a6c35fa66d539bc459a18f2" + integrity sha512-A2jxx87mySr/ulAsSSyYE8un6SIH0NWHiLaCWpodPCVOlQVODCaSpiR4+IMsmBr73haG+oeCuSvMOM+ttWUqRQ== + dependencies: + "@babel/plugin-syntax-jsx" "^7.2.0" + "@vue/babel-helper-vue-jsx-merge-props" "^1.2.1" + "@vue/babel-plugin-transform-vue-jsx" "^1.2.1" + camelcase "^5.0.0" + html-tags "^2.0.0" + svg-tags "^1.0.0" + +"@vue/babel-sugar-v-on@^1.2.3": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.2.3.tgz#342367178586a69f392f04bfba32021d02913ada" + integrity sha512-kt12VJdz/37D3N3eglBywV8GStKNUhNrsxChXIV+o0MwVXORYuhDTHJRKPgLJRb/EY3vM2aRFQdxJBp9CLikjw== + dependencies: + "@babel/plugin-syntax-jsx" "^7.2.0" + "@vue/babel-plugin-transform-vue-jsx" "^1.2.1" + camelcase "^5.0.0" + +"@vue/cli-overlay@^4.5.9": + version "4.5.9" + resolved "https://registry.yarnpkg.com/@vue/cli-overlay/-/cli-overlay-4.5.9.tgz#393418b6d5eaf8638f599c939cb425838257d37c" + integrity sha512-E2PWv6tCdUz+eEDj2Th2oxiKmzMe02qi0PcxiNaO7oaqggmEOrp1rLgop7DWpiLDBiqUZk2x0vjK/q2Tz8z/eg== + +"@vue/cli-plugin-babel@^4.3.1": + version "4.5.9" + resolved "https://registry.yarnpkg.com/@vue/cli-plugin-babel/-/cli-plugin-babel-4.5.9.tgz#a0998754bdd08ed8402a7bef494ecb16cee17e92" + integrity sha512-2tzaJU5yqAfXVhg1aYyd/Yfif6brv+tDZ49D1aOk7ZgMIwH5YUa0yo5HPcPOcmfpoVoNYcpqVYRfyT4EXIYSpg== + dependencies: + "@babel/core" "^7.11.0" + "@vue/babel-preset-app" "^4.5.9" + "@vue/cli-shared-utils" "^4.5.9" + babel-loader "^8.1.0" + cache-loader "^4.1.0" + thread-loader "^2.1.3" + webpack "^4.0.0" + +"@vue/cli-plugin-eslint@^4.3.1": + version "4.5.9" + resolved "https://registry.yarnpkg.com/@vue/cli-plugin-eslint/-/cli-plugin-eslint-4.5.9.tgz#7d7f8a48b8e73e6b19fe2f54b39c78850a9ab33d" + integrity sha512-wTsWRiRWPW5ik4bgtlh4P4h63Zgjsyvqx2FY0kcj+bSAnQGPJ3bKUOMU9KQP5EyNH6pAXMVGh2LEXK9WwJMf1w== + dependencies: + "@vue/cli-shared-utils" "^4.5.9" + eslint-loader "^2.2.1" + globby "^9.2.0" + inquirer "^7.1.0" + webpack "^4.0.0" + yorkie "^2.0.0" + +"@vue/cli-plugin-router@^4.5.9": + version "4.5.9" + resolved "https://registry.yarnpkg.com/@vue/cli-plugin-router/-/cli-plugin-router-4.5.9.tgz#b3d23a8083d26a81bd09bf9c8d010a3e4e4b13d0" + integrity sha512-eBBfbZpQ1sJrdlx8i7iReFxSnuzwmrv+s2OCT3kjBd6uWRqGnD4VihpS4srC7vZLzDQrDplumSn0a93L9Qf3wQ== + dependencies: + "@vue/cli-shared-utils" "^4.5.9" + +"@vue/cli-plugin-vuex@^4.5.9": + version "4.5.9" + resolved "https://registry.yarnpkg.com/@vue/cli-plugin-vuex/-/cli-plugin-vuex-4.5.9.tgz#5ae8f1500c7e29406b02fac82cceaeab86c1e83a" + integrity sha512-mFNIJhYiJjzCgytkDHX00ROy5Yzl7prkZpUbeDE0biwcLteMf2s3qZVbESOQl6GcviqcfEt2f3tHQQtLNa+OLg== + +"@vue/cli-service@^4.3.1": + version "4.5.9" + resolved "https://registry.yarnpkg.com/@vue/cli-service/-/cli-service-4.5.9.tgz#3ca3112a44183caace411d51d0b6a616e2e197b1" + integrity sha512-E3XlfM0q+UnnjbC9rwLIWNo2umZCRwnlMJY0KOhY1hFvqisGIYzFmQQ4o01KGyTx2BZNMuQg7Kw+BZ5gyM1Wig== + dependencies: + "@intervolga/optimize-cssnano-plugin" "^1.0.5" + "@soda/friendly-errors-webpack-plugin" "^1.7.1" + "@soda/get-current-script" "^1.0.0" + "@types/minimist" "^1.2.0" + "@types/webpack" "^4.0.0" + "@types/webpack-dev-server" "^3.11.0" + "@vue/cli-overlay" "^4.5.9" + "@vue/cli-plugin-router" "^4.5.9" + "@vue/cli-plugin-vuex" "^4.5.9" + "@vue/cli-shared-utils" "^4.5.9" + "@vue/component-compiler-utils" "^3.1.2" + "@vue/preload-webpack-plugin" "^1.1.0" + "@vue/web-component-wrapper" "^1.2.0" + acorn "^7.4.0" + acorn-walk "^7.1.1" + address "^1.1.2" + autoprefixer "^9.8.6" + browserslist "^4.12.0" + cache-loader "^4.1.0" + case-sensitive-paths-webpack-plugin "^2.3.0" + cli-highlight "^2.1.4" + clipboardy "^2.3.0" + cliui "^6.0.0" + copy-webpack-plugin "^5.1.1" + css-loader "^3.5.3" + cssnano "^4.1.10" + debug "^4.1.1" + default-gateway "^5.0.5" + dotenv "^8.2.0" + dotenv-expand "^5.1.0" + file-loader "^4.2.0" + fs-extra "^7.0.1" + globby "^9.2.0" + hash-sum "^2.0.0" + html-webpack-plugin "^3.2.0" + launch-editor-middleware "^2.2.1" + lodash.defaultsdeep "^4.6.1" + lodash.mapvalues "^4.6.0" + lodash.transform "^4.6.0" + mini-css-extract-plugin "^0.9.0" + minimist "^1.2.5" + pnp-webpack-plugin "^1.6.4" + portfinder "^1.0.26" + postcss-loader "^3.0.0" + ssri "^7.1.0" + terser-webpack-plugin "^2.3.6" + thread-loader "^2.1.3" + url-loader "^2.2.0" + vue-loader "^15.9.2" + vue-style-loader "^4.1.2" + webpack "^4.0.0" + webpack-bundle-analyzer "^3.8.0" + webpack-chain "^6.4.0" + webpack-dev-server "^3.11.0" + webpack-merge "^4.2.2" + optionalDependencies: + vue-loader-v16 "npm:vue-loader@^16.0.0-beta.7" + +"@vue/cli-shared-utils@^4.5.9": + version "4.5.9" + resolved "https://registry.yarnpkg.com/@vue/cli-shared-utils/-/cli-shared-utils-4.5.9.tgz#487cea4b4282f4dff907ee7d8abba8dd0dd03ccd" + integrity sha512-anvsrv+rkQC+hgxaT2nQQxnSWSsIzyysZ36LO7qPjXvDRBvcvKLAAviFlUkYbZ+ntbV8puzJ3zw+gUhQw4SEVA== + dependencies: + "@hapi/joi" "^15.0.1" + chalk "^2.4.2" + execa "^1.0.0" + launch-editor "^2.2.1" + lru-cache "^5.1.1" + node-ipc "^9.1.1" + open "^6.3.0" + ora "^3.4.0" + read-pkg "^5.1.1" + request "^2.88.2" + semver "^6.1.0" + strip-ansi "^6.0.0" + +"@vue/component-compiler-utils@^3.1.0", "@vue/component-compiler-utils@^3.1.2": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@vue/component-compiler-utils/-/component-compiler-utils-3.2.0.tgz#8f85182ceed28e9b3c75313de669f83166d11e5d" + integrity sha512-lejBLa7xAMsfiZfNp7Kv51zOzifnb29FwdnMLa96z26kXErPFioSf9BMcePVIQ6/Gc6/mC0UrPpxAWIHyae0vw== + dependencies: + consolidate "^0.15.1" + hash-sum "^1.0.2" + lru-cache "^4.1.2" + merge-source-map "^1.1.0" + postcss "^7.0.14" + postcss-selector-parser "^6.0.2" + source-map "~0.6.1" + vue-template-es2015-compiler "^1.9.0" + optionalDependencies: + prettier "^1.18.2" + +"@vue/preload-webpack-plugin@^1.1.0": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@vue/preload-webpack-plugin/-/preload-webpack-plugin-1.1.2.tgz#ceb924b4ecb3b9c43871c7a429a02f8423e621ab" + integrity sha512-LIZMuJk38pk9U9Ur4YzHjlIyMuxPlACdBIHH9/nGYVTsaGKOSnSuELiE8vS9wa+dJpIYspYUOqk+L1Q4pgHQHQ== + +"@vue/web-component-wrapper@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@vue/web-component-wrapper/-/web-component-wrapper-1.2.0.tgz#bb0e46f1585a7e289b4ee6067dcc5a6ae62f1dd1" + integrity sha512-Xn/+vdm9CjuC9p3Ae+lTClNutrVhsXpzxvoTXXtoys6kVRX9FkueSUAqSWAyZntmVLlR4DosBV4pH8y5Z/HbUw== + +"@webassemblyjs/ast@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" + integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA== + dependencies: + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" + +"@webassemblyjs/floating-point-hex-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4" + integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA== + +"@webassemblyjs/helper-api-error@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2" + integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw== + +"@webassemblyjs/helper-buffer@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00" + integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA== + +"@webassemblyjs/helper-code-frame@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27" + integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA== + dependencies: + "@webassemblyjs/wast-printer" "1.9.0" + +"@webassemblyjs/helper-fsm@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8" + integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw== + +"@webassemblyjs/helper-module-context@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07" + integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g== + dependencies: + "@webassemblyjs/ast" "1.9.0" + +"@webassemblyjs/helper-wasm-bytecode@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790" + integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw== + +"@webassemblyjs/helper-wasm-section@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346" + integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + +"@webassemblyjs/ieee754@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4" + integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95" + integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab" + integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w== + +"@webassemblyjs/wasm-edit@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf" + integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/helper-wasm-section" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/wasm-opt" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + "@webassemblyjs/wast-printer" "1.9.0" + +"@webassemblyjs/wasm-gen@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c" + integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/ieee754" "1.9.0" + "@webassemblyjs/leb128" "1.9.0" + "@webassemblyjs/utf8" "1.9.0" + +"@webassemblyjs/wasm-opt@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61" + integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + +"@webassemblyjs/wasm-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e" + integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-api-error" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/ieee754" "1.9.0" + "@webassemblyjs/leb128" "1.9.0" + "@webassemblyjs/utf8" "1.9.0" + +"@webassemblyjs/wast-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914" + integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/floating-point-hex-parser" "1.9.0" + "@webassemblyjs/helper-api-error" "1.9.0" + "@webassemblyjs/helper-code-frame" "1.9.0" + "@webassemblyjs/helper-fsm" "1.9.0" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/wast-printer@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899" + integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" + "@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== + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" + integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== + dependencies: + mime-types "~2.1.24" + negotiator "0.6.2" + +acorn-jsx@^5.2.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" + integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== + +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@^6.4.1: + version "6.4.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" + integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== + +acorn@^7.1.1, acorn@^7.4.0: + version "7.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + +address@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6" + integrity sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA== + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv-errors@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" + integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== + +ajv-keywords@^3.1.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@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4: + 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" + +alphanum-sort@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" + integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= + +amdefine@>=0.0.4: + version "1.0.1" + resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" + integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= + +ansi-colors@^3.0.0: + version "3.2.4" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" + integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== + +ansi-escapes@^4.2.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" + integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA== + dependencies: + type-fest "^0.11.0" + +ansi-html@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" + integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= + +ansi-styles@^3.2.0, 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" + +any-promise@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= + +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +anymatch@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" + integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +aproba@^1.0.3, aproba@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== + +arch@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/arch/-/arch-2.2.0.tgz#1bc47818f305764f23ab3306b0bfc086c5a29d11" + integrity sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ== + +are-we-there-yet@~1.1.2: + version "1.1.5" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" + integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + +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" + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + +array-find-index@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" + integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= + +array-flatten@^2.1.0: + 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.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.2.tgz#a8db03e0b88c8c6aeddc49cb132f9bcab4ebf9c8" + integrity sha512-w2GspexNQpx+PutG3QpT437/BenZBj0M/MZGn5mzv/MofYqo0xmRHzn4lFsoDlWJ+THYsGJmFlW68WlDFx7VRw== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" + get-intrinsic "^1.0.1" + is-string "^1.0.5" + +array-union@^1.0.1, array-union@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= + dependencies: + array-uniq "^1.0.1" + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + +array.prototype.flat@^1.2.3: + version "1.2.4" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz#6ef638b43312bd401b4c6199fdec7e2dc9e9a123" + integrity sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" + +asn1.js@^5.2.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" + integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + safer-buffer "^2.1.0" + +asn1@~0.2.3: + version "0.2.4" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + +assert@^1.1.1: + version "1.5.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" + integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== + dependencies: + object-assign "^4.1.1" + util "0.10.3" + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== + +async-each@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" + integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== + +async-foreach@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542" + integrity sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI= + +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== + +async@^2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" + integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== + dependencies: + lodash "^4.17.14" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +autoprefixer@^9.8.6: + version "9.8.6" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.6.tgz#3b73594ca1bf9266320c5acf1588d74dea74210f" + integrity sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg== + dependencies: + browserslist "^4.12.0" + caniuse-lite "^1.0.30001109" + colorette "^1.2.1" + normalize-range "^0.1.2" + num2fraction "^1.2.2" + postcss "^7.0.32" + postcss-value-parser "^4.1.0" + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + +aws4@^1.8.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" + integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== + +axios-progress-bar@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/axios-progress-bar/-/axios-progress-bar-1.2.0.tgz#f9ee88dc9af977246be1ef07eedfa4c990c639c5" + integrity sha512-PEgWb/b2SMyHnKJ/cxA46OdCuNeVlo8eqL0HxXPtz+6G/Jtpyo49icPbW+jpO1wUeDEjbqpseMoCyWxESxf5pA== + +axios@^0.21.1: + version "0.21.1" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.1.tgz#22563481962f4d6bde9a76d516ef0e5d3c09b2b8" + integrity sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA== + dependencies: + follow-redirects "^1.10.0" + +babel-code-frame@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" + integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= + dependencies: + chalk "^1.1.3" + esutils "^2.0.2" + js-tokens "^3.0.2" + +babel-eslint@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.1.0.tgz#6968e568a910b78fb3779cdd8b6ac2f479943232" + integrity sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.7.0" + "@babel/traverse" "^7.7.0" + "@babel/types" "^7.7.0" + eslint-visitor-keys "^1.0.0" + resolve "^1.12.0" + +babel-loader@^8.1.0: + version "8.2.2" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.2.tgz#9363ce84c10c9a40e6c753748e1441b60c8a0b81" + integrity sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g== + dependencies: + find-cache-dir "^3.3.1" + loader-utils "^1.4.0" + make-dir "^3.1.0" + schema-utils "^2.6.5" + +babel-plugin-dynamic-import-node@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" + integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== + dependencies: + object.assign "^4.1.0" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +base64-js@^1.0.2: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +batch@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + dependencies: + tweetnacl "^0.14.3" + +bfj@^6.1.1: + version "6.1.2" + resolved "https://registry.yarnpkg.com/bfj/-/bfj-6.1.2.tgz#325c861a822bcb358a41c78a33b8e6e2086dde7f" + integrity sha512-BmBJa4Lip6BPRINSZ0BPEIfB1wUY/9rwbwvIHQA1KjX9om29B6id0wnWXq7m3bn5JrUVjeOTnVuhPT1FiHwPGw== + dependencies: + bluebird "^3.5.5" + check-types "^8.0.3" + hoopy "^0.1.4" + tryer "^1.0.1" + +big.js@^3.1.3: + version "3.2.0" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" + integrity sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q== + +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@^1.0.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" + integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== + +binary-extensions@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9" + integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== + +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" + +block-stream@*: + version "0.0.9" + resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" + integrity sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo= + dependencies: + inherits "~2.0.0" + +bluebird@^3.1.1, 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== + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9: + version "4.12.0" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" + integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== + +bn.js@^5.0.0, bn.js@^5.1.1: + version "5.1.3" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.3.tgz#beca005408f642ebebea80b042b4d18d2ac0ee6b" + integrity sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ== + +body-parser@1.19.0: + version "1.19.0" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" + integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== + dependencies: + bytes "3.1.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.2" + http-errors "1.7.2" + iconv-lite "0.4.24" + on-finished "~2.3.0" + qs "6.7.0" + raw-body "2.4.0" + type-is "~1.6.17" + +bonjour@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" + integrity sha1-jokKGD2O6aI5OzhExpGkK897yfU= + dependencies: + array-flatten "^2.1.0" + deep-equal "^1.0.1" + dns-equal "^1.0.0" + dns-txt "^2.0.2" + multicast-dns "^6.0.1" + multicast-dns-service-types "^1.1.0" + +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 sha1-aN/1++YMUes3cl6p4+0xDcwed24= + +bootstrap-vue@^2.12.0: + version "2.21.1" + resolved "https://registry.yarnpkg.com/bootstrap-vue/-/bootstrap-vue-2.21.1.tgz#20d3ced96b735917d8be71b77717eee74bb40c6f" + integrity sha512-hGAfy6hwA6pH/2oxKtd4GOETDW38br+K1ICw4sDDkuARxNlMwrVgIjMQFV8hGzo9NZi/bj82NZx8wRR9221qkw== + dependencies: + "@nuxt/opencollective" "^0.3.2" + bootstrap ">=4.5.3 <5.0.0" + popper.js "^1.16.1" + portal-vue "^2.1.7" + vue-functional-data-merge "^3.1.0" + +"bootstrap@>=4.5.3 <5.0.0", bootstrap@^4.4.1: + version "4.5.3" + resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-4.5.3.tgz#c6a72b355aaf323920be800246a6e4ef30997fe6" + integrity sha512-o9ppKQioXGqhw8Z7mah6KdTYpNQY//tipnkxppWhPbiSWdD+1raYsnhwEZjkTHYbGee4cVQ0Rx65EhOY/HNLcQ== + +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" + +braces@^2.3.1, braces@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +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" + +brorand@^1.0.1, brorand@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= + +browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserify-cipher@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" + integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== + dependencies: + bn.js "^5.0.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" + integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== + dependencies: + bn.js "^5.1.1" + browserify-rsa "^4.0.1" + create-hash "^1.2.0" + create-hmac "^1.1.7" + elliptic "^6.5.3" + inherits "^2.0.4" + parse-asn1 "^5.1.5" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +browserify-zlib@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== + dependencies: + pako "~1.0.5" + +browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.15.0: + version "4.16.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.0.tgz#410277627500be3cb28a1bfe037586fbedf9488b" + integrity sha512-/j6k8R0p3nxOC6kx5JGAxsnhc9ixaWJfYc+TNTzxg6+ARaESAvQGV7h0uNOB4t+pLQJZWzcrMxXOxjgsCj3dqQ== + dependencies: + caniuse-lite "^1.0.30001165" + colorette "^1.2.1" + electron-to-chromium "^1.3.621" + escalade "^3.1.1" + node-releases "^1.1.67" + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +buffer-indexof@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" + integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g== + +buffer-json@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/buffer-json/-/buffer-json-2.0.0.tgz#f73e13b1e42f196fe2fd67d001c7d7107edd7c23" + integrity sha512-+jjPFVqyfF1esi9fvfUs3NqM0pH1ziZ36VP4hmA/y/Ssfo/5w5xHKfTw9BwQjoJ1w/oVtpLomqwUHKdefGyuHw== + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= + +buffer@^4.3.0: + version "4.9.2" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" + integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= + +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= + +bytes@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" + integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== + +cacache@^12.0.2, cacache@^12.0.3: + version "12.0.4" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" + integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== + dependencies: + bluebird "^3.5.5" + chownr "^1.1.1" + figgy-pudding "^3.5.1" + glob "^7.1.4" + graceful-fs "^4.1.15" + infer-owner "^1.0.3" + lru-cache "^5.1.1" + mississippi "^3.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.3" + ssri "^6.0.1" + unique-filename "^1.1.1" + y18n "^4.0.0" + +cacache@^13.0.1: + version "13.0.1" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-13.0.1.tgz#a8000c21697089082f85287a1aec6e382024a71c" + integrity sha512-5ZvAxd05HDDU+y9BVvcqYu2LLXmPnQ0hW62h32g4xBTgL/MppR4/04NHfj/ycM2y6lmTnbw6HVi+1eN0Psba6w== + dependencies: + chownr "^1.1.2" + figgy-pudding "^3.5.1" + fs-minipass "^2.0.0" + glob "^7.1.4" + graceful-fs "^4.2.2" + infer-owner "^1.0.4" + lru-cache "^5.1.1" + minipass "^3.0.0" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.2" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + p-map "^3.0.0" + promise-inflight "^1.0.1" + rimraf "^2.7.1" + ssri "^7.0.0" + unique-filename "^1.1.1" + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +cache-loader@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cache-loader/-/cache-loader-4.1.0.tgz#9948cae353aec0a1fcb1eafda2300816ec85387e" + integrity sha512-ftOayxve0PwKzBF/GLsZNC9fJBXl8lkZE3TOsjkboHfVHVkL39iUEs1FO07A33mizmci5Dudt38UZrrYXDtbhw== + dependencies: + buffer-json "^2.0.0" + find-cache-dir "^3.0.0" + loader-utils "^1.2.3" + mkdirp "^0.5.1" + neo-async "^2.6.1" + schema-utils "^2.0.0" + +call-bind@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.0.tgz#24127054bb3f9bdcb4b1fb82418186072f77b8ce" + integrity sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.0" + +call-me-maybe@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" + integrity sha1-JtII6onje1y95gJQoV8DHBak1ms= + +caller-callsite@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" + integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= + dependencies: + callsites "^2.0.0" + +caller-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" + integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= + dependencies: + caller-callsite "^2.0.0" + +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= + +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@3.0.x: + version "3.0.0" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" + integrity sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M= + dependencies: + no-case "^2.2.0" + upper-case "^1.1.1" + +camelcase-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" + integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc= + dependencies: + camelcase "^2.0.0" + map-obj "^1.0.0" + +camelcase@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" + integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= + +camelcase@^5.0.0, 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.0.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" + integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== + +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.30001109, caniuse-lite@^1.0.30001165: + version "1.0.30001168" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001168.tgz#6fcd098c139d003b9bd484cbb9ca26cb89907f9a" + integrity sha512-P2zmX7swIXKu+GMMR01TWa4csIKELTNnZKc+f1CjebmZJQtTAEXmpQSoKVJVVcvPGAA0TEYTOUp3VehavZSFPQ== + +case-sensitive-paths-webpack-plugin@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.3.0.tgz#23ac613cc9a856e4f88ff8bb73bbb5e989825cf7" + integrity sha512-/4YgnZS8y1UXXmC02xD5rRrBEu6T5ub+mQHLNRj0fzTRbgdBYhsNo2V5EqwgqrExjxsjtF/OpAKAMkKsxbD5XQ== + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + +chalk@^1.1.1, chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2: + 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@^4.0.0, chalk@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + +check-types@^8.0.3: + version "8.0.3" + resolved "https://registry.yarnpkg.com/check-types/-/check-types-8.0.3.tgz#3356cca19c889544f2d7a95ed49ce508a0ecf552" + integrity sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ== + +chokidar@^2.1.8: + version "2.1.8" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" + integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== + dependencies: + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.1" + optionalDependencies: + fsevents "^1.2.7" + +chokidar@^3.4.1: + version "3.4.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.3.tgz#c1df38231448e45ca4ac588e6c79573ba6a57d5b" + integrity sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.5.0" + optionalDependencies: + fsevents "~2.1.2" + +chownr@^1.1.1, chownr@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + +chrome-trace-event@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" + integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ== + dependencies: + tslib "^1.9.0" + +ci-info@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" + integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A== + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +clean-css@4.2.x: + version "4.2.3" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.3.tgz#507b5de7d97b48ee53d84adb0160ff6216380f78" + integrity sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA== + dependencies: + source-map "~0.6.0" + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cli-cursor@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= + dependencies: + restore-cursor "^2.0.0" + +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-highlight@^2.1.4: + version "2.1.9" + resolved "https://registry.yarnpkg.com/cli-highlight/-/cli-highlight-2.1.9.tgz#4f4ecb05326d70d56d4b4249fabf9a70fb002497" + integrity sha512-t8RNIZgiI24i/mslZ8XT8o660RUj5ZbUJpEZrZa/BNekTzdC2LfMRAnt0Y7sgzNM4FGW5tmWg/YnbTH8o1eIOQ== + dependencies: + chalk "^4.0.0" + highlight.js "^10.0.0" + mz "^2.4.0" + parse5 "^5.1.1" + parse5-htmlparser2-tree-adapter "^6.0.0" + yargs "^15.0.0" + +cli-spinners@^2.0.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.5.0.tgz#12763e47251bf951cb75c201dfa58ff1bcb2d047" + integrity sha512-PC+AmIuK04E6aeSs/pUccSujsTzBhu4HzC2dL+CfJB/Jcc2qTRbEwZQDfIUpt2Xl8BodYBEq8w4fc0kU2I9DjQ== + +cli-width@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" + integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== + +clipboardy@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/clipboardy/-/clipboardy-2.3.0.tgz#3c2903650c68e46a91b388985bc2774287dba290" + integrity sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ== + dependencies: + arch "^2.1.1" + execa "^1.0.0" + is-wsl "^2.1.1" + +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== + dependencies: + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" + +cliui@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^6.2.0" + +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= + +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" + +coalescy@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/coalescy/-/coalescy-1.0.0.tgz#4b065846b836361ada6c4b4a4abf4bc1cac31bf1" + integrity sha1-SwZYRrg2NhrabEtKSr9LwcrDG/E= + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0, color-convert@^1.9.1: + 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 sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +color-name@^1.0.0, 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== + +color-string@^1.5.4: + version "1.5.4" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.4.tgz#dd51cd25cfee953d138fe4002372cc3d0e504cb6" + integrity sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +color@^3.0.0: + version "3.1.3" + resolved "https://registry.yarnpkg.com/color/-/color-3.1.3.tgz#ca67fb4e7b97d611dcde39eceed422067d91596e" + integrity sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ== + dependencies: + color-convert "^1.9.1" + color-string "^1.5.4" + +colorette@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b" + integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw== + +combined-stream@^1.0.6, combined-stream@~1.0.6: + 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.17.x: + version "2.17.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" + integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg== + +commander@^2.18.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@~2.19.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" + integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + +component-emitter@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + +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-webpack-plugin@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/compression-webpack-plugin/-/compression-webpack-plugin-3.1.0.tgz#9f510172a7b5fae5aad3b670652e8bd7997aeeca" + integrity sha512-iqTHj3rADN4yHwXMBrQa/xrncex/uEQy8QHlaTKxGchT/hC0SdlJlmL/5eRqffmWq2ep0/Romw6Ld39JjTR/ug== + dependencies: + cacache "^13.0.1" + find-cache-dir "^3.0.0" + neo-async "^2.5.0" + schema-utils "^2.6.1" + serialize-javascript "^2.1.2" + webpack-sources "^1.0.1" + +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 sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +concat-stream@^1.5.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +connect-history-api-fallback@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" + integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== + +consola@^2.15.0: + version "2.15.0" + resolved "https://registry.yarnpkg.com/consola/-/consola-2.15.0.tgz#40fc4eefa4d2f8ef2e2806147f056ea207fcc0e9" + integrity sha512-vlcSGgdYS26mPf7qNi+dCisbhiyDnrN1zaRbw3CSuc2wGOMEGGPsp46PdRG5gqXwgtJfjxDkxRNAgRPr1B77vQ== + +console-browserify@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" + integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== + +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= + +consolidate@^0.15.1: + version "0.15.1" + resolved "https://registry.yarnpkg.com/consolidate/-/consolidate-0.15.1.tgz#21ab043235c71a07d45d9aad98593b0dba56bab7" + integrity sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw== + dependencies: + bluebird "^3.1.1" + +constants-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= + +contains-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" + integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= + +content-disposition@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" + integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== + dependencies: + safe-buffer "5.1.2" + +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.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" + integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== + dependencies: + safe-buffer "~5.1.1" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= + +cookie@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" + integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== + +copy-concurrently@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" + integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== + dependencies: + aproba "^1.1.1" + fs-write-stream-atomic "^1.0.8" + iferr "^0.1.5" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.0" + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + +copy-webpack-plugin@^5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-5.1.2.tgz#8a889e1dcafa6c91c6cd4be1ad158f1d3823bae2" + integrity sha512-Uh7crJAco3AjBvgAy9Z75CjK8IG+gxaErro71THQ+vv/bl4HaQcpkexAY8KVW/T6D2W2IRr+couF/knIRkZMIQ== + dependencies: + cacache "^12.0.3" + find-cache-dir "^2.1.0" + glob-parent "^3.1.0" + globby "^7.1.1" + is-glob "^4.0.1" + loader-utils "^1.2.3" + minimatch "^3.0.4" + normalize-path "^3.0.0" + p-limit "^2.2.1" + schema-utils "^1.0.0" + serialize-javascript "^4.0.0" + webpack-log "^2.0.0" + +core-js-compat@^3.6.5, core-js-compat@^3.8.0: + version "3.8.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.8.1.tgz#8d1ddd341d660ba6194cbe0ce60f4c794c87a36e" + integrity sha512-a16TLmy9NVD1rkjUGbwuyWkiDoN0FDpAwrfLONvHFQx0D9k7J9y0srwMT8QP/Z6HE3MIFaVynEeYwZwPX1o5RQ== + dependencies: + browserslist "^4.15.0" + semver "7.0.0" + +core-js@^3.6.5: + version "3.8.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.8.1.tgz#f51523668ac8a294d1285c3b9db44025fda66d47" + integrity sha512-9Id2xHY1W7m8hCl8NkhQn5CufmF/WuR30BTRewvCXc1aZd3kMECwNZ69ndLbekKfakw9Rf2Xyc+QR6E7Gg+obg== + +core-util-is@1.0.2, core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +cosmiconfig@^5.0.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" + integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== + dependencies: + import-fresh "^2.0.0" + is-directory "^0.3.1" + js-yaml "^3.13.1" + parse-json "^4.0.0" + +create-ecdh@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" + integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== + dependencies: + bn.js "^4.1.0" + elliptic "^6.5.3" + +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +cross-spawn@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982" + integrity sha1-ElYDfsufDF9549bvE14wdwGEuYI= + dependencies: + lru-cache "^4.0.1" + which "^1.2.9" + +cross-spawn@^5.0.1: + version "5.1.0" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + +cross-spawn@^6.0.0, cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +cross-spawn@^7.0.0: + 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-browserify@^3.11.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + randomfill "^1.0.3" + +css-color-names@0.0.4, css-color-names@^0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" + integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA= + +css-declaration-sorter@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz#c198940f63a76d7e36c1e71018b001721054cb22" + integrity sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA== + dependencies: + postcss "^7.0.1" + timsort "^0.3.0" + +css-loader@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-1.0.1.tgz#6885bb5233b35ec47b006057da01cc640b6b79fe" + integrity sha512-+ZHAZm/yqvJ2kDtPne3uX0C+Vr3Zn5jFn2N4HywtS5ujwvsVkyg0VArEXpl3BgczDA8anieki1FIzhchX4yrDw== + dependencies: + babel-code-frame "^6.26.0" + css-selector-tokenizer "^0.7.0" + icss-utils "^2.1.0" + loader-utils "^1.0.2" + lodash "^4.17.11" + postcss "^6.0.23" + postcss-modules-extract-imports "^1.2.0" + postcss-modules-local-by-default "^1.2.0" + postcss-modules-scope "^1.1.0" + postcss-modules-values "^1.3.0" + postcss-value-parser "^3.3.0" + source-list-map "^2.0.0" + +css-loader@^3.5.2, css-loader@^3.5.3: + version "3.6.0" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-3.6.0.tgz#2e4b2c7e6e2d27f8c8f28f61bffcd2e6c91ef645" + integrity sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ== + dependencies: + camelcase "^5.3.1" + cssesc "^3.0.0" + icss-utils "^4.1.1" + loader-utils "^1.2.3" + normalize-path "^3.0.0" + postcss "^7.0.32" + postcss-modules-extract-imports "^2.0.0" + postcss-modules-local-by-default "^3.0.2" + postcss-modules-scope "^2.2.0" + postcss-modules-values "^3.0.0" + postcss-value-parser "^4.1.0" + schema-utils "^2.7.0" + semver "^6.3.0" + +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@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" + integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg= + dependencies: + boolbase "~1.0.0" + css-what "2.1" + domutils "1.5.1" + nth-check "~1.0.1" + +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-selector-tokenizer@^0.7.0: + version "0.7.3" + resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz#735f26186e67c749aaf275783405cf0661fae8f1" + integrity sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg== + dependencies: + cssesc "^3.0.0" + fastparse "^1.1.2" + +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: + version "1.1.2" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.2.tgz#9ae393b5dafd7dae8a622475caec78d3d8fbd7b5" + integrity sha512-wCoWush5Aeo48GLhfHPbmvZs59Z+M7k5+B1xDnXbdWNcEF423DoFdqSWE0PM5aNk5nI5cp1q7ms36zGApY/sKQ== + dependencies: + mdn-data "2.0.14" + source-map "^0.6.1" + +css-what@2.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2" + integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg== + +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== + +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@^4.0.0, cssnano-preset-default@^4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz#51ec662ccfca0f88b396dcd9679cdb931be17f76" + integrity sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA== + dependencies: + css-declaration-sorter "^4.0.1" + cssnano-util-raw-cache "^4.0.1" + postcss "^7.0.0" + postcss-calc "^7.0.1" + postcss-colormin "^4.0.3" + postcss-convert-values "^4.0.1" + postcss-discard-comments "^4.0.2" + postcss-discard-duplicates "^4.0.2" + postcss-discard-empty "^4.0.1" + postcss-discard-overridden "^4.0.1" + postcss-merge-longhand "^4.0.11" + postcss-merge-rules "^4.0.3" + postcss-minify-font-values "^4.0.2" + postcss-minify-gradients "^4.0.2" + postcss-minify-params "^4.0.2" + postcss-minify-selectors "^4.0.2" + postcss-normalize-charset "^4.0.1" + postcss-normalize-display-values "^4.0.2" + postcss-normalize-positions "^4.0.2" + postcss-normalize-repeat-style "^4.0.2" + postcss-normalize-string "^4.0.2" + postcss-normalize-timing-functions "^4.0.2" + postcss-normalize-unicode "^4.0.1" + postcss-normalize-url "^4.0.1" + postcss-normalize-whitespace "^4.0.2" + postcss-ordered-values "^4.1.2" + postcss-reduce-initial "^4.0.3" + postcss-reduce-transforms "^4.0.2" + postcss-svgo "^4.0.2" + postcss-unique-selectors "^4.0.1" + +cssnano-util-get-arguments@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz#ed3a08299f21d75741b20f3b81f194ed49cc150f" + integrity sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8= + +cssnano-util-get-match@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz#c0e4ca07f5386bb17ec5e52250b4f5961365156d" + integrity sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0= + +cssnano-util-raw-cache@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz#b26d5fd5f72a11dfe7a7846fb4c67260f96bf282" + integrity sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA== + dependencies: + postcss "^7.0.0" + +cssnano-util-same-parent@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz#574082fb2859d2db433855835d9a8456ea18bbf3" + integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q== + +cssnano@^4.0.0, cssnano@^4.1.10: + version "4.1.10" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.10.tgz#0ac41f0b13d13d465487e111b778d42da631b8b2" + integrity sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ== + dependencies: + cosmiconfig "^5.0.0" + cssnano-preset-default "^4.0.7" + is-resolvable "^1.0.0" + postcss "^7.0.0" + +csso@^4.0.2: + 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" + +currently-unhandled@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" + integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= + dependencies: + array-find-index "^1.0.1" + +cyclist@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" + integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + dependencies: + assert-plus "^1.0.0" + +de-indent@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" + integrity sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0= + +debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.9: + 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@^3.1.1, debug@^3.2.5: + 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" + +debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" + integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== + dependencies: + ms "2.1.2" + +decamelize@^1.1.2, decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + +deep-equal@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" + integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== + dependencies: + is-arguments "^1.0.4" + is-date-object "^1.0.1" + is-regex "^1.0.4" + object-is "^1.0.1" + object-keys "^1.1.1" + regexp.prototype.flags "^1.2.0" + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + +deepmerge@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-1.5.2.tgz#10499d868844cdad4fee0842df8c7f6f0c95a753" + integrity sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ== + +default-gateway@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b" + integrity sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA== + dependencies: + execa "^1.0.0" + ip-regex "^2.1.0" + +default-gateway@^5.0.5: + version "5.0.5" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-5.0.5.tgz#4fd6bd5d2855d39b34cc5a59505486e9aafc9b10" + integrity sha512-z2RnruVmj8hVMmAnEJMTIJNijhKCDiGjbLP+BHJFOT7ld3Bo5qcIBpVYDniqhbMIIf+jZDlkP2MkPXiQy/DBLA== + dependencies: + execa "^3.3.0" + +defaults@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" + integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= + dependencies: + clone "^1.0.2" + +define-properties@^1.1.2, define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +del@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" + integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ== + dependencies: + "@types/glob" "^7.1.1" + globby "^6.1.0" + is-path-cwd "^2.0.0" + is-path-in-cwd "^2.0.0" + p-map "^2.0.0" + pify "^4.0.1" + rimraf "^2.6.3" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + +des.js@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" + integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= + +detect-node@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" + integrity sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw== + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +diffie-hellman@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +dir-glob@^2.0.0, dir-glob@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4" + integrity sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw== + dependencies: + path-type "^3.0.0" + +dns-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" + integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0= + +dns-packet@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a" + integrity sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg== + dependencies: + ip "^1.1.0" + safe-buffer "^5.0.1" + +dns-txt@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" + integrity sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY= + dependencies: + buffer-indexof "^1.0.0" + +doctrine@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" + integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= + dependencies: + esutils "^2.0.2" + isarray "^1.0.0" + +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-converter@^0.2: + 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-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" + +domain-browser@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" + integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== + +domelementtype@1, domelementtype@^1.3.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: + version "2.1.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.1.0.tgz#a851c080a6d1c3d94344aed151d99f669edf585e" + integrity sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w== + +domhandler@^2.3.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" + integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== + dependencies: + domelementtype "1" + +domutils@1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" + integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8= + dependencies: + dom-serializer "0" + domelementtype "1" + +domutils@^1.5.1, 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" + +dot-prop@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== + dependencies: + is-obj "^2.0.0" + +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@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-6.2.0.tgz#941c0410535d942c8becf28d3f357dbd9d476064" + integrity sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w== + +dotenv@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" + integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== + +duplexer@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" + integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== + +duplexify@^3.4.2, duplexify@^3.6.0: + version "3.7.1" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" + integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + +easy-stack@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/easy-stack/-/easy-stack-1.0.1.tgz#8afe4264626988cabb11f3c704ccd0c835411066" + integrity sha512-wK2sCs4feiiJeFXn3zvY0p41mdU5VUgbgs1rNsc/y5ngFUijdWd+iIN8eoyuZHKB8xN6BL4PdWmzqFmxNg6V2w== + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + +ejs@^2.6.1: + version "2.7.4" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba" + integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA== + +electron-to-chromium@^1.3.621: + version "1.3.629" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.629.tgz#a08d13b64d90e3c77ec5b9bffa3efbc5b4a00969" + integrity sha512-iSPPJtPvHrMAvYOt+9cdbDmTasPqwnwz4lkP8Dn200gDNUBQOLQ96xUsWXBwXslAo5XxdoXAoQQ3RAy4uao9IQ== + +elliptic@^6.5.3: + version "6.5.4" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" + integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + +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== + +emojis-list@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" + integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= + +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 sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + +end-of-stream@^1.0.0, end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +enhanced-resolve@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz#3b806f3bfafc1ec7de69551ef93cca46c1704126" + integrity sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ== + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.5.0" + tapable "^1.0.0" + +entities@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" + integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== + +entities@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.1.0.tgz#992d3129cf7df6870b96c57858c249a120f8b8b5" + integrity sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w== + +errno@^0.1.3, errno@~0.1.7: + version "0.1.8" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" + integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== + dependencies: + prr "~1.0.1" + +error-ex@^1.2.0, 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.2: + version "2.0.6" + resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.0.6.tgz#5a99a707bd7a4c58a797902d48d82803ede6aad8" + integrity sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ== + dependencies: + stackframe "^1.1.1" + +es-abstract@^1.17.0-next.1, es-abstract@^1.17.2: + version "1.17.7" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.7.tgz#a4de61b2f66989fc7421676c1cb9787573ace54c" + integrity sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g== + dependencies: + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.2.2" + is-regex "^1.1.1" + object-inspect "^1.8.0" + object-keys "^1.1.1" + object.assign "^4.1.1" + string.prototype.trimend "^1.0.1" + string.prototype.trimstart "^1.0.1" + +es-abstract@^1.18.0-next.1: + version "1.18.0-next.1" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.1.tgz#6e3a0a4bda717e5023ab3b8e90bec36108d22c68" + integrity sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA== + dependencies: + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.2.2" + is-negative-zero "^2.0.0" + is-regex "^1.1.1" + object-inspect "^1.8.0" + object-keys "^1.1.1" + object.assign "^4.1.1" + string.prototype.trimend "^1.0.1" + string.prototype.trimstart "^1.0.1" + +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 sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + +escape-string-regexp@^1.0.2, 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 sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +eslint-config-standard@^14.1.1: + version "14.1.1" + resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-14.1.1.tgz#830a8e44e7aef7de67464979ad06b406026c56ea" + integrity sha512-Z9B+VR+JIXRxz21udPTL9HpFMyoMUEeX1G251EQ6e05WD9aPVtVBn09XUmZ259wCMlCDmYDSZG62Hhm+ZTJcUg== + +eslint-friendly-formatter@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/eslint-friendly-formatter/-/eslint-friendly-formatter-4.0.1.tgz#27d504dc837f7caddbf201b2e84a4ee730ba3efa" + integrity sha1-J9UE3IN/fK3b8gGy6EpO5zC6Pvo= + dependencies: + chalk "^2.0.1" + coalescy "1.0.0" + extend "^3.0.0" + minimist "^1.2.0" + strip-ansi "^4.0.0" + text-table "^0.2.0" + +eslint-import-resolver-node@^0.3.4: + version "0.3.4" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz#85ffa81942c25012d8231096ddf679c03042c717" + integrity sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA== + dependencies: + debug "^2.6.9" + resolve "^1.13.1" + +eslint-loader@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-2.2.1.tgz#28b9c12da54057af0845e2a6112701a2f6bf8337" + integrity sha512-RLgV9hoCVsMLvOxCuNjdqOrUqIj9oJg8hF44vzJaYqsAHuY9G2YAeN3joQ9nxP0p5Th9iFSIpKo+SD8KISxXRg== + dependencies: + loader-fs-cache "^1.0.0" + loader-utils "^1.0.2" + object-assign "^4.0.1" + object-hash "^1.1.4" + rimraf "^2.6.1" + +eslint-loader@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-4.0.2.tgz#386a1e21bcb613b3cf2d252a3b708023ccfb41ec" + integrity sha512-EDpXor6lsjtTzZpLUn7KmXs02+nIjGcgees9BYjNkWra3jVq5vVa8IoCKgzT2M7dNNeoMBtaSG83Bd40N3poLw== + dependencies: + find-cache-dir "^3.3.1" + fs-extra "^8.1.0" + loader-utils "^2.0.0" + object-hash "^2.0.3" + schema-utils "^2.6.5" + +eslint-module-utils@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz#579ebd094f56af7797d19c9866c9c9486629bfa6" + integrity sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA== + dependencies: + debug "^2.6.9" + pkg-dir "^2.0.0" + +eslint-plugin-es@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz#75a7cdfdccddc0589934aeeb384175f221c57893" + integrity sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ== + dependencies: + eslint-utils "^2.0.0" + regexpp "^3.0.0" + +eslint-plugin-import@^2.20.2: + version "2.22.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz#0896c7e6a0cf44109a2d97b95903c2bb689d7702" + integrity sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw== + dependencies: + array-includes "^3.1.1" + array.prototype.flat "^1.2.3" + contains-path "^0.1.0" + debug "^2.6.9" + doctrine "1.5.0" + eslint-import-resolver-node "^0.3.4" + eslint-module-utils "^2.6.0" + has "^1.0.3" + minimatch "^3.0.4" + object.values "^1.1.1" + read-pkg-up "^2.0.0" + resolve "^1.17.0" + tsconfig-paths "^3.9.0" + +eslint-plugin-node@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz#c95544416ee4ada26740a30474eefc5402dc671d" + integrity sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g== + dependencies: + eslint-plugin-es "^3.0.0" + eslint-utils "^2.0.0" + ignore "^5.1.1" + minimatch "^3.0.4" + resolve "^1.10.1" + semver "^6.1.0" + +eslint-plugin-promise@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.2.1.tgz#845fd8b2260ad8f82564c1222fce44ad71d9418a" + integrity sha512-VoM09vT7bfA7D+upt+FjeBO5eHIJQBUWki1aPvB+vbNiHS3+oGIJGIeyBtKQTME6UPXXy3vV07OL1tHd3ANuDw== + +eslint-plugin-standard@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-4.1.0.tgz#0c3bf3a67e853f8bbbc580fb4945fbf16f41b7c5" + integrity sha512-ZL7+QRixjTR6/528YNGyDotyffm5OQst/sGxKDwGb9Uqs4In5Egi4+jbobhqJoyoCM6/7v/1A5fhQ7ScMtDjaQ== + +eslint-plugin-vue@^6.2.2: + version "6.2.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-6.2.2.tgz#27fecd9a3a24789b0f111ecdd540a9e56198e0fe" + integrity sha512-Nhc+oVAHm0uz/PkJAWscwIT4ijTrK5fqNqz9QB1D35SbbuMG1uB6Yr5AJpvPSWg+WOw7nYNswerYh0kOk64gqQ== + dependencies: + natural-compare "^1.4.0" + semver "^5.6.0" + vue-eslint-parser "^7.0.0" + +eslint-scope@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" + integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-scope@^5.0.0: + 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-utils@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" + integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-utils@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + +eslint@^6.8.0: + version "6.8.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb" + integrity sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig== + dependencies: + "@babel/code-frame" "^7.0.0" + ajv "^6.10.0" + chalk "^2.1.0" + cross-spawn "^6.0.5" + debug "^4.0.1" + doctrine "^3.0.0" + eslint-scope "^5.0.0" + eslint-utils "^1.4.3" + eslint-visitor-keys "^1.1.0" + espree "^6.1.2" + esquery "^1.0.1" + esutils "^2.0.2" + file-entry-cache "^5.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^5.0.0" + globals "^12.1.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + inquirer "^7.0.0" + is-glob "^4.0.0" + js-yaml "^3.13.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.3.0" + lodash "^4.17.14" + minimatch "^3.0.4" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + optionator "^0.8.3" + progress "^2.0.0" + regexpp "^2.0.1" + semver "^6.1.2" + strip-ansi "^5.2.0" + strip-json-comments "^3.0.1" + table "^5.2.3" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +espree@^6.1.2, espree@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a" + integrity sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw== + dependencies: + acorn "^7.1.1" + acorn-jsx "^5.2.0" + eslint-visitor-keys "^1.1.0" + +esprima@^4.0.0: + 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.0.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57" + integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.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: + version "5.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" + integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== + +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 sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + +event-pubsub@4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/event-pubsub/-/event-pubsub-4.3.0.tgz#f68d816bc29f1ec02c539dc58c8dd40ce72cb36e" + integrity sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ== + +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.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.2.0.tgz#93b87c18f8efcd4202a461aec4dfc0556b639379" + integrity sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg== + +eventsource@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.0.7.tgz#8fbc72c93fcd34088090bc0a4e64f4b5cee6d8d0" + integrity sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ== + dependencies: + original "^1.0.0" + +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +execa@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.8.0.tgz#d8d76bbc1b55217ed190fd6dd49d3c774ecfc8da" + integrity sha1-2NdrvBtVIX7RkP1t1J08d07PyNo= + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +execa@^3.3.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-3.4.0.tgz#c08ed4550ef65d858fac269ffc8572446f37eb89" + integrity sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + p-finally "^2.0.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +exports-loader@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/exports-loader/-/exports-loader-0.7.0.tgz#84881c784dea6036b8e1cd1dac3da9b6409e21a5" + integrity sha512-RKwCrO4A6IiKm0pG3c9V46JxIHcDplwwGJn6+JJ1RcVnh/WSGJa0xkmk5cRVtgOPzCAtTMGj2F7nluh9L0vpSA== + dependencies: + loader-utils "^1.1.0" + source-map "0.5.0" + +express@^4.16.3, express@^4.17.1: + version "4.17.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" + integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== + dependencies: + accepts "~1.3.7" + array-flatten "1.1.1" + body-parser "1.19.0" + content-disposition "0.5.3" + content-type "~1.0.4" + cookie "0.4.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~1.1.2" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "~1.1.2" + fresh "0.5.2" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.5" + qs "6.7.0" + range-parser "~1.2.1" + safe-buffer "5.1.2" + send "0.17.1" + serve-static "1.14.1" + setprototypeof "1.1.1" + statuses "~1.5.0" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@^3.0.0, extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +external-editor@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + +fast-deep-equal@^3.1.1: + 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@^2.2.6: + version "2.2.7" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d" + integrity sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw== + dependencies: + "@mrmlnc/readdir-enhanced" "^2.2.1" + "@nodelib/fs.stat" "^1.1.2" + glob-parent "^3.1.0" + is-glob "^4.0.0" + merge2 "^1.2.3" + micromatch "^3.1.10" + +fast-json-stable-stringify@^2.0.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: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + +fastparse@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9" + integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ== + +faye-websocket@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" + integrity sha1-TkkvjQTftviQA1B/btvy1QHnxvQ= + dependencies: + websocket-driver ">=0.5.1" + +faye-websocket@~0.11.1: + version "0.11.3" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.3.tgz#5c0e9a8968e8912c286639fde977a8b209f2508e" + integrity sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA== + dependencies: + websocket-driver ">=0.5.1" + +figgy-pudding@^3.5.1: + version "3.5.2" + resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" + integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== + +figures@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + dependencies: + escape-string-regexp "^1.0.5" + +file-entry-cache@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" + integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== + dependencies: + flat-cache "^2.0.1" + +file-loader@^1.1.11: + version "1.1.11" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-1.1.11.tgz#6fe886449b0f2a936e43cabaac0cdbfb369506f8" + integrity sha512-TGR4HU7HUsGg6GCOPJnFk06RhWgEWFLAGWiT6rcD+GRC2keU3s9RGJ+b3Z6/U73jwwNb2gKLJ7YCrp+jvU4ALg== + dependencies: + loader-utils "^1.0.2" + schema-utils "^0.4.5" + +file-loader@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-4.3.0.tgz#780f040f729b3d18019f20605f723e844b8a58af" + integrity sha512-aKrYPYjF1yG3oX0kWRrqrSMfgftm7oJW5M+m4owoldH5C51C0RkIwB++JbRvEW3IU6/ZG5n8UvEcdgwOt2UOWA== + dependencies: + loader-utils "^1.2.3" + schema-utils "^2.5.0" + +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + +filesize@^3.6.1: + version "3.6.1" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317" + integrity sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg== + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +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.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.3" + statuses "~1.5.0" + unpipe "~1.0.0" + +find-cache-dir@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9" + integrity sha1-yN765XyKUqinhPnjHFfHQumToLk= + dependencies: + commondir "^1.0.1" + mkdirp "^0.5.1" + pkg-dir "^1.0.0" + +find-cache-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" + integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== + dependencies: + commondir "^1.0.1" + make-dir "^2.0.0" + pkg-dir "^3.0.0" + +find-cache-dir@^3.0.0, find-cache-dir@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" + integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +find-up@^2.0.0, find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= + dependencies: + locate-path "^2.0.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" + +flat-cache@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" + integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== + dependencies: + flatted "^2.0.0" + rimraf "2.6.3" + write "1.0.3" + +flatted@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" + integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== + +flush-write-stream@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" + integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== + dependencies: + inherits "^2.0.3" + readable-stream "^2.3.6" + +follow-redirects@^1.0.0, follow-redirects@^1.10.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.1.tgz#5f69b813376cee4fd0474a3aba835df04ab763b7" + integrity sha512-SSG5xmZh1mkPGyKzjZP8zLjltIfpW32Y5QpdNJyjcfGxK3qo3NDDkZOZSFiGn1A6SclQxY9GzEwAHQ3dmYRWpg== + +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +forwarded@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" + integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + +from2@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" + +fs-extra@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-minipass@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + +fs-write-stream-atomic@^1.0.8: + version "1.0.10" + resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" + integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= + dependencies: + graceful-fs "^4.1.2" + iferr "^0.1.5" + imurmurhash "^0.1.4" + readable-stream "1 || 2" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@^1.2.7: + version "1.2.13" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" + integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== + dependencies: + bindings "^1.5.0" + nan "^2.12.1" + +fsevents@~2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" + integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== + +fstream@^1.0.0, fstream@^1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" + integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg== + dependencies: + graceful-fs "^4.1.2" + inherits "~2.0.0" + mkdirp ">=0.5 0" + rimraf "2" + +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== + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + +gaze@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.3.tgz#c441733e13b927ac8c0ff0b4c3b033f28812924a" + integrity sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g== + dependencies: + globule "^1.0.0" + +gensync@^1.0.0-beta.1: + 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.1: + 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.0, get-intrinsic@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.0.2.tgz#6820da226e50b24894e08859469dc68361545d49" + integrity sha512-aeX0vrFm21ILl3+JpFFRNe9aUvp6VFZb2/CTbgLb8j75kOhvoNYjt9d8KA/tJG4gSo8nzEDedRl0h7vDmBYRVg== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + +get-stdin@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" + integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= + +get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= + +get-stream@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-stream@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + dependencies: + assert-plus "^1.0.0" + +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + +glob-parent@^5.0.0, glob-parent@~5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" + integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== + dependencies: + is-glob "^4.0.1" + +glob-to-regexp@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" + integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs= + +glob@^7.0.0, glob@^7.0.3, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@~7.1.1: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +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@^12.1.0: + version "12.4.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" + integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== + dependencies: + type-fest "^0.8.1" + +globby@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= + dependencies: + array-union "^1.0.1" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +globby@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/globby/-/globby-7.1.1.tgz#fb2ccff9401f8600945dfada97440cca972b8680" + integrity sha1-+yzP+UAfhgCUXfral0QMypcrhoA= + dependencies: + array-union "^1.0.1" + dir-glob "^2.0.0" + glob "^7.1.2" + ignore "^3.3.5" + pify "^3.0.0" + slash "^1.0.0" + +globby@^9.2.0: + version "9.2.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-9.2.0.tgz#fd029a706c703d29bdd170f4b6db3a3f7a7cb63d" + integrity sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg== + dependencies: + "@types/glob" "^7.1.1" + array-union "^1.0.2" + dir-glob "^2.2.2" + fast-glob "^2.2.6" + glob "^7.1.3" + ignore "^4.0.3" + pify "^4.0.1" + slash "^2.0.0" + +globule@^1.0.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/globule/-/globule-1.3.2.tgz#d8bdd9e9e4eef8f96e245999a5dee7eb5d8529c4" + integrity sha512-7IDTQTIu2xzXkT+6mlluidnWo+BypnbSoEVVQCGfzqnl5Ik8d3e1d4wycb8Rj9tWW+Z39uPWsdlquqiqPCd/pA== + dependencies: + glob "~7.1.1" + lodash "~4.17.10" + minimatch "~3.0.2" + +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2: + version "4.2.4" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== + +gzip-size@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.1.1.tgz#cb9bee692f87c0612b232840a873904e4c135274" + integrity sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA== + dependencies: + duplexer "^0.1.1" + pify "^4.0.1" + +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== + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + +har-validator@~5.1.3: + version "5.1.5" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== + dependencies: + ajv "^6.12.3" + har-schema "^2.0.0" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= + dependencies: + ansi-regex "^2.0.0" + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +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-symbols@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" + integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== + +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +has@^1.0.0, 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" + +hash-base@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== + dependencies: + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +hash-sum@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/hash-sum/-/hash-sum-1.0.2.tgz#33b40777754c6432573c120cc3808bbd10d47f04" + integrity sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ= + +hash-sum@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/hash-sum/-/hash-sum-2.0.0.tgz#81d01bb5de8ea4a214ad5d6ead1b523460b0b45a" + integrity sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg== + +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +he@1.2.x, he@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +hex-color-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" + integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== + +highlight.js@^10.0.0: + version "10.4.1" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.4.1.tgz#d48fbcf4a9971c4361b3f95f302747afe19dbad0" + integrity sha512-yR5lWvNz7c85OhVAEAeFhVCc/GV4C30Fjzc/rCP0aCWzc1UUOPUk55dK/qdwTZHBvMZo+eZ2jpk62ndX/xMFlg== + +hmac-drbg@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +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== + +hosted-git-info@^2.1.4: + version "2.8.8" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" + integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== + +hpack.js@^2.1.6: + version "2.1.6" + resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" + integrity sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI= + dependencies: + inherits "^2.0.1" + obuf "^1.0.0" + readable-stream "^2.0.1" + wbuf "^1.1.0" + +hsl-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hsl-regex/-/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e" + integrity sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4= + +hsla-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38" + integrity sha1-wc56MWjIxmFAM6S194d/OyJfnDg= + +html-comment-regex@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7" + integrity sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ== + +html-entities@^1.3.1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.4.0.tgz#cfbd1b01d2afaf9adca1b10ae7dffab98c71d2dc" + integrity sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA== + +html-minifier@^3.2.3: + version "3.5.21" + resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.21.tgz#d0040e054730e354db008463593194015212d20c" + integrity sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA== + dependencies: + camel-case "3.0.x" + clean-css "4.2.x" + commander "2.17.x" + he "1.2.x" + param-case "2.1.x" + relateurl "0.2.x" + uglify-js "3.4.x" + +html-tags@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-2.0.0.tgz#10b30a386085f43cede353cc8fa7cb0deeea668b" + integrity sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos= + +html-tags@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.1.0.tgz#7b5e6f7e665e9fb41f30007ed9e0d41e97fb2140" + integrity sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg== + +html-webpack-plugin@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz#b01abbd723acaaa7b37b6af4492ebda03d9dd37b" + integrity sha1-sBq71yOsqqeze2r0SS69oD2d03s= + dependencies: + html-minifier "^3.2.3" + loader-utils "^0.2.16" + lodash "^4.17.3" + pretty-error "^2.0.2" + tapable "^1.0.0" + toposort "^1.0.0" + util.promisify "1.0.0" + +htmlparser2@^3.3.0: + version "3.10.1" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" + integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== + dependencies: + domelementtype "^1.3.1" + domhandler "^2.3.0" + domutils "^1.5.1" + entities "^1.1.1" + inherits "^2.0.1" + readable-stream "^3.1.1" + +http-deceiver@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" + integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc= + +http-errors@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" + integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-errors@~1.7.2: + version "1.7.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" + integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-parser-js@>=0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.2.tgz#da2e31d237b393aae72ace43882dd7e270a8ff77" + integrity sha512-opCO9ASqg5Wy2FNo7A0sxy71yGbbkJJXLdgMK04Tcypw9jr2MgWbyubb0+WdmDmGnFflO7fRbqbaihh/ENDlRQ== + +http-proxy-middleware@0.19.1: + version "0.19.1" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" + integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q== + dependencies: + http-proxy "^1.17.0" + is-glob "^4.0.0" + lodash "^4.17.11" + micromatch "^3.1.10" + +http-proxy@^1.17.0: + 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" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +https-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= + +human-signals@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== + +iconv-lite@0.4.24, 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" + +icss-replace-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" + integrity sha1-Bupvg2ead0njhs/h/oEq5dsiPe0= + +icss-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-2.1.0.tgz#83f0a0ec378bf3246178b6c2ad9136f135b1c962" + integrity sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI= + dependencies: + postcss "^6.0.1" + +icss-utils@^4.0.0, icss-utils@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467" + integrity sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA== + dependencies: + postcss "^7.0.14" + +ieee754@^1.1.4: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +iferr@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" + integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= + +ignore@^3.3.5: + version "3.3.10" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" + integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== + +ignore@^4.0.3, ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + +ignore@^5.1.1: + version "5.1.8" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== + +import-cwd@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" + integrity sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk= + dependencies: + import-from "^2.1.0" + +import-fresh@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" + integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= + dependencies: + caller-path "^2.0.0" + resolve-from "^3.0.0" + +import-fresh@^3.0.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.2.tgz#fc129c160c5d68235507f4331a6baad186bdbc3e" + integrity sha512-cTPNrlvJT6twpYy+YmKUKrTSjWFs3bjYjAhCwm+z4EOCubZxAuO+hHpRN64TqjEaYSHs7tJAE0w1CKMGmsG/lw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-from@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1" + integrity sha1-M1238qev/VOqpHHUuAId7ja387E= + dependencies: + resolve-from "^3.0.0" + +import-local@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" + integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== + dependencies: + pkg-dir "^3.0.0" + resolve-cwd "^2.0.0" + +imports-loader@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/imports-loader/-/imports-loader-0.8.0.tgz#030ea51b8ca05977c40a3abfd9b4088fe0be9a69" + integrity sha512-kXWL7Scp8KQ4552ZcdVTeaQCZSLW+e6nJfp3cwUMB673T7Hr98Xjx5JK+ql7ADlJUvj1JS5O01RLbKoutN5QDQ== + dependencies: + loader-utils "^1.0.2" + source-map "^0.6.1" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +in-publish@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/in-publish/-/in-publish-2.0.1.tgz#948b1a535c8030561cea522f73f78f4be357e00c" + integrity sha512-oDM0kUSNFC31ShNxHKUyfZKy8ZeXZBWMjMdZHKLOk13uvT27VTL/QzRGfRUcevJhpkZAvlhPYuXkF7eNWrtyxQ== + +indent-string@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" + integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA= + dependencies: + repeating "^2.0.0" + +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== + +indexes-of@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" + integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= + +infer-owner@^1.0.3, infer-owner@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.0, inherits@~2.0.1, 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.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + +inquirer@^7.0.0, inquirer@^7.1.0: + version "7.3.3" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003" + integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA== + dependencies: + ansi-escapes "^4.2.1" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-width "^3.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.19" + mute-stream "0.0.8" + run-async "^2.4.0" + rxjs "^6.6.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + +internal-ip@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" + integrity sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg== + dependencies: + default-gateway "^4.2.0" + ipaddr.js "^1.9.0" + +interpret@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" + integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== + +ip-regex@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" + integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= + +ip@^1.1.0, ip@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= + +ipaddr.js@1.9.1, ipaddr.js@^1.9.0: + 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== + +is-absolute-url@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" + integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY= + +is-absolute-url@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698" + integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q== + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + +is-arguments@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.0.tgz#62353031dfbee07ceb34656a6bde59efecae8dd9" + integrity sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg== + dependencies: + call-bind "^1.0.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= + dependencies: + binary-extensions "^1.0.0" + +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-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-callable@^1.1.4, is-callable@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.2.tgz#c7c6715cd22d4ddb48d3e19970223aceabb080d9" + integrity sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA== + +is-ci@^1.0.10: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" + integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg== + dependencies: + ci-info "^1.5.0" + +is-color-stop@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345" + integrity sha1-z/9HGu5N1cnhWFmPvhKWe1za00U= + dependencies: + css-color-names "^0.0.4" + hex-color-regex "^1.1.0" + hsl-regex "^1.0.0" + hsla-regex "^1.0.0" + rgb-regex "^1.0.1" + rgba-regex "^1.0.0" + +is-core-module@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" + integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== + dependencies: + has "^1.0.3" + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + +is-date-object@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" + integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-directory@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" + integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= + +is-docker@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.1.1.tgz#4125a88e44e450d384e09047ede71adc2d144156" + integrity sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw== + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^2.1.0, is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-finite@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" + integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w== + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +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-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= + dependencies: + is-extglob "^2.1.0" + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + +is-negative-zero@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" + integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + dependencies: + kind-of "^3.0.2" + +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@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + +is-path-cwd@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" + integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== + +is-path-in-cwd@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb" + integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ== + dependencies: + is-path-inside "^2.1.0" + +is-path-inside@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" + integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg== + dependencies: + path-is-inside "^1.0.2" + +is-plain-obj@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= + +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-regex@^1.0.4, is-regex@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9" + integrity sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg== + dependencies: + has-symbols "^1.0.1" + +is-resolvable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" + integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" + integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== + +is-string@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" + integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== + +is-svg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-3.0.0.tgz#9321dbd29c212e5ca99c4fa9794c714bcafa2f75" + integrity sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ== + dependencies: + html-comment-regex "^1.1.0" + +is-symbol@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" + integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== + dependencies: + has-symbols "^1.0.1" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + +is-utf8@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= + +is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= + +is-wsl@^2.1.1: + 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@1.0.0, isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + +javascript-stringify@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/javascript-stringify/-/javascript-stringify-2.0.1.tgz#6ef358035310e35d667c675ed63d3eb7c1aa19e5" + integrity sha512-yV+gqbd5vaOYjqlbk16EG89xB5udgjqQF3C5FAORDg4f/IS1Yc5ERCv5e/57yBcfJYw05V5JyIXabhwb75Xxow== + +jest-worker@^25.4.0: + version "25.5.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-25.5.0.tgz#2611d071b79cea0f43ee57a3d118593ac1547db1" + integrity sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw== + dependencies: + merge-stream "^2.0.0" + supports-color "^7.0.0" + +jquery-mask-plugin@^1.14.16: + version "1.14.16" + resolved "https://registry.yarnpkg.com/jquery-mask-plugin/-/jquery-mask-plugin-1.14.16.tgz#9ebb55947d984da5aade45315b2fe6b113e28aae" + integrity sha512-reywdHlYEkPbzWjTpcc1fk9XQ3PLvO5dzEAVqy8zI7NTF22tB1HbeU3iboZTLdkBEPaWAqeI2HtEjsGQ4roZKw== + +jquery-ui-themes@^1.12.0: + version "1.12.0" + resolved "https://registry.yarnpkg.com/jquery-ui-themes/-/jquery-ui-themes-1.12.0.tgz#a57ba0ad96800d84522fe76893ffcbde67081d51" + integrity sha1-pXugrZaADYRSL+dok//L3mcIHVE= + +jquery-ui@^1.12.1: + version "1.12.1" + resolved "https://registry.yarnpkg.com/jquery-ui/-/jquery-ui-1.12.1.tgz#bcb4045c8dd0539c134bc1488cdd3e768a7a9e51" + integrity sha1-vLQEXI3QU5wTS8FIjN0+dop6nlE= + +jquery@^3.3.1, jquery@^3.5.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.5.1.tgz#d7b4d08e1bfdb86ad2f1a3d039ea17304717abb5" + integrity sha512-XwIBPqcMn57FxfT+Go5pzySnm4KWkT1Tv7gjrpT1srtf8Weynl6R273VJ5GjkRb51IzMp5nbaPjJXMWeju2MKg== + +js-base64@^2.1.8: + version "2.6.4" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.6.4.tgz#f4e686c5de1ea1f867dbcad3d46d969428df98c4" + integrity sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ== + +js-message@1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/js-message/-/js-message-1.0.7.tgz#fbddd053c7a47021871bb8b2c95397cc17c20e47" + integrity sha512-efJLHhLjIyKRewNS9EGZ4UpI8NguuL6fKkhRxVuMmrGV2xN/0APGdQYwLFky5w9naebSZ0OwAGp0G6/2Cg90rA== + +js-queue@2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/js-queue/-/js-queue-2.0.2.tgz#0be590338f903b36c73d33c31883a821412cd482" + integrity sha512-pbKLsbCfi7kriM3s1J4DDCo7jQkI58zPLHi0heXPzPlj0hjUsm+FesPUbE0DSbIVIK503A36aUBoCN7eMFedkA== + dependencies: + easy-stack "^1.0.1" + +js-tokens@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= + +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" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + +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 sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + +json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-parse-even-better-errors@^2.3.0: + 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@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= + +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 sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + +json3@^3.3.2: + version "3.3.3" + resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" + integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== + +json5@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= + +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + +json5@^2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" + integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== + dependencies: + minimist "^1.2.5" + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +killable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" + integrity sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg== + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + +kind-of@^6.0.0, 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== + +launch-editor-middleware@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/launch-editor-middleware/-/launch-editor-middleware-2.2.1.tgz#e14b07e6c7154b0a4b86a0fd345784e45804c157" + integrity sha512-s0UO2/gEGiCgei3/2UN3SMuUj1phjQN8lcpnvgLSz26fAzNWPQ6Nf/kF5IFClnfU2ehp6LrmKdMU/beveO+2jg== + dependencies: + launch-editor "^2.2.1" + +launch-editor@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.2.1.tgz#871b5a3ee39d6680fcc26d37930b6eeda89db0ca" + integrity sha512-On+V7K2uZK6wK7x691ycSUbLD/FyKKelArkbaAMSSJU8JmqmhwN2+mnJDNINuJWSrh2L0kDk+ZQtbC/gOWUwLw== + dependencies: + chalk "^2.3.0" + shell-quote "^1.6.1" + +levn@^0.3.0, levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +lines-and-columns@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" + integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= + +load-json-file@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + +load-json-file@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + strip-bom "^3.0.0" + +loader-fs-cache@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz#f08657646d607078be2f0a032f8bd69dd6f277d9" + integrity sha512-ldcgZpjNJj71n+2Mf6yetz+c9bM4xpKtNds4LbqXzU/PTdeAX0g3ytnU1AJMEcTk2Lex4Smpe3Q/eCTsvUBxbA== + dependencies: + find-cache-dir "^0.1.1" + mkdirp "^0.5.1" + +loader-runner@^2.3.1, loader-runner@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" + integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== + +loader-utils@^0.2.16: + version "0.2.17" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" + integrity sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g= + dependencies: + big.js "^3.1.3" + emojis-list "^2.0.0" + json5 "^0.5.0" + object-assign "^4.0.1" + +loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" + integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^1.0.1" + +loader-utils@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0" + integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^2.1.2" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +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" + +lodash.defaultsdeep@^4.6.1: + version "4.6.1" + resolved "https://registry.yarnpkg.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz#512e9bd721d272d94e3d3a63653fa17516741ca6" + integrity sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA== + +lodash.difference@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c" + integrity sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw= + +lodash.kebabcase@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36" + integrity sha1-hImxyw0p/4gZXM7KRI/21swpXDY= + +lodash.mapvalues@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz#1bafa5005de9dd6f4f26668c30ca37230cc9689c" + integrity sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw= + +lodash.memoize@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= + +lodash.transform@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.transform/-/lodash.transform-4.6.0.tgz#12306422f63324aed8483d3f38332b5f670547a0" + integrity sha1-EjBkIvYzJK7YSD0/ODMrX2cFR6A= + +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= + +lodash@^4.0.0, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.3, lodash@~4.17.10: + version "4.17.20" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" + integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== + +log-symbols@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" + integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== + dependencies: + chalk "^2.0.1" + +loglevel@^1.6.8: + version "1.7.1" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.1.tgz#005fde2f5e6e47068f935ff28573e125ef72f197" + integrity sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw== + +loud-rejection@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" + integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= + dependencies: + currently-unhandled "^0.4.1" + signal-exit "^3.0.0" + +lower-case@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" + integrity sha1-miyr0bno4K6ZOkv31YdcOcQujqw= + +lru-cache@^4.0.1, lru-cache@^4.1.2: + version "4.1.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +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" + +make-dir@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.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" + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + +map-obj@^1.0.0, map-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" + +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +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 sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + +memory-fs@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" + integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +memory-fs@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" + integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +meow@^3.7.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" + integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs= + dependencies: + camelcase-keys "^2.0.0" + decamelize "^1.1.2" + loud-rejection "^1.0.0" + map-obj "^1.0.1" + minimist "^1.1.3" + normalize-package-data "^2.3.4" + object-assign "^4.0.1" + read-pkg-up "^1.0.1" + redent "^1.0.0" + trim-newlines "^1.0.0" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= + +merge-source-map@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646" + integrity sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw== + dependencies: + source-map "^0.6.1" + +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.2.3: + 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 sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= + +micromatch@^3.1.10, micromatch@^3.1.4: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +mime-db@1.44.0: + version "1.44.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" + integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== + +"mime-db@>= 1.43.0 < 2": + version "1.45.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.45.0.tgz#cceeda21ccd7c3a745eba2decd55d4b73e7879ea" + integrity sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w== + +mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: + version "2.1.27" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" + integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== + dependencies: + mime-db "1.44.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== + +mime@^2.4.4: + version "2.4.7" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.7.tgz#962aed9be0ed19c91fd7dc2ece5d7f4e89a90d74" + integrity sha512-dhNd1uA2u397uQk3Nv5LM4lm93WYDUXFn3Fu291FJerns4jyTudqhIWe4W04YLy7Uk1tm1Ore04NpjRvQp/NPA== + +mimic-fn@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== + +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== + +mini-css-extract-plugin@^0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.9.0.tgz#47f2cf07aa165ab35733b1fc97d4c46c0564339e" + integrity sha512-lp3GeY7ygcgAmVIcRPBVhIkf8Us7FZjA+ILpal44qLdSu11wmjKQ3d9k15lfD7pO4esu9eUIAW7qiYIBppv40A== + dependencies: + loader-utils "^1.1.0" + normalize-url "1.9.1" + schema-utils "^1.0.0" + webpack-sources "^1.1.0" + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + 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== + +minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= + +minimatch@^3.0.4, minimatch@~3.0.2: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +minipass-collect@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" + integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== + dependencies: + minipass "^3.0.0" + +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== + dependencies: + minipass "^3.0.0" + +minipass-pipeline@^1.2.2: + version "1.2.4" + resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" + integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== + dependencies: + minipass "^3.0.0" + +minipass@^3.0.0, minipass@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.3.tgz#7d42ff1f39635482e15f9cdb53184deebd5815fd" + integrity sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg== + dependencies: + yallist "^4.0.0" + +mississippi@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" + integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== + dependencies: + concat-stream "^1.5.0" + duplexify "^3.4.2" + end-of-stream "^1.1.0" + flush-write-stream "^1.0.0" + from2 "^2.1.0" + parallel-transform "^1.1.0" + pump "^3.0.0" + pumpify "^1.3.3" + stream-each "^1.1.0" + through2 "^2.0.0" + +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5, mkdirp@~0.5.1: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + +moment-locales-webpack-plugin@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/moment-locales-webpack-plugin/-/moment-locales-webpack-plugin-1.2.0.tgz#9af83876a44053706b868ceece5119584d10d7aa" + integrity sha512-QAi5v0OlPUP7GXviKMtxnpBAo8WmTHrUNN7iciAhNOEAd9evCOvuN0g1N7ThIg3q11GLCkjY1zQ2saRcf/43nQ== + dependencies: + lodash.difference "^4.5.0" + +moment@^2.24.0: + version "2.29.1" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.1.tgz#b2be769fa31940be9eeea6469c075e35006fa3d3" + integrity sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ== + +move-concurrently@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= + dependencies: + aproba "^1.1.1" + copy-concurrently "^1.0.0" + fs-write-stream-atomic "^1.0.8" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.3" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + +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.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-service-types@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" + integrity sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE= + +multicast-dns@^6.0.1: + version "6.2.3" + resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" + integrity sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g== + dependencies: + dns-packet "^1.3.1" + thunky "^1.0.2" + +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + +mz@^2.4.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" + integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + +nan@^2.12.1, nan@^2.13.2: + version "2.14.2" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" + integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + +negotiator@0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" + integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== + +neo-async@^2.5.0, neo-async@^2.6.0, neo-async@^2.6.1: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +no-case@^2.2.0: + version "2.3.2" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" + integrity sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ== + dependencies: + lower-case "^1.1.1" + +node-fetch@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" + integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== + +node-forge@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" + integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== + +node-gyp@^3.8.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.8.0.tgz#540304261c330e80d0d5edce253a68cb3964218c" + integrity sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA== + dependencies: + fstream "^1.0.0" + glob "^7.0.3" + graceful-fs "^4.1.2" + mkdirp "^0.5.0" + nopt "2 || 3" + npmlog "0 || 1 || 2 || 3 || 4" + osenv "0" + request "^2.87.0" + rimraf "2" + semver "~5.3.0" + tar "^2.0.0" + which "1" + +node-ipc@^9.1.1: + version "9.1.3" + resolved "https://registry.yarnpkg.com/node-ipc/-/node-ipc-9.1.3.tgz#1df3f069d103184ae9127fa885dbdaea56a4436f" + integrity sha512-8RS4RZyS/KMKKYG8mrje+cLxwATe9dBCuOiqKFSWND4oOuKytfuKCiR9yinvhoXF/nGdX/WnbywaUee+9U87zA== + dependencies: + event-pubsub "4.3.0" + js-message "1.0.7" + js-queue "2.0.2" + +node-libs-browser@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" + integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== + dependencies: + assert "^1.1.1" + browserify-zlib "^0.2.0" + buffer "^4.3.0" + console-browserify "^1.1.0" + constants-browserify "^1.0.0" + crypto-browserify "^3.11.0" + domain-browser "^1.1.1" + events "^3.0.0" + https-browserify "^1.0.0" + os-browserify "^0.3.0" + path-browserify "0.0.1" + process "^0.11.10" + punycode "^1.2.4" + querystring-es3 "^0.2.0" + readable-stream "^2.3.3" + stream-browserify "^2.0.1" + stream-http "^2.7.2" + string_decoder "^1.0.0" + timers-browserify "^2.0.4" + tty-browserify "0.0.0" + url "^0.11.0" + util "^0.11.0" + vm-browserify "^1.0.1" + +node-releases@^1.1.67: + version "1.1.67" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.67.tgz#28ebfcccd0baa6aad8e8d4d8fe4cbc49ae239c12" + integrity sha512-V5QF9noGFl3EymEwUYzO+3NTDpGfQB4ve6Qfnzf3UNydMhjQRVPR1DZTuvWiLzaFJYw2fmDwAfnRNEVb64hSIg== + +node-sass@^4.13.1: + version "4.14.1" + resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.14.1.tgz#99c87ec2efb7047ed638fb4c9db7f3a42e2217b5" + integrity sha512-sjCuOlvGyCJS40R8BscF5vhVlQjNN069NtQ1gSxyK1u9iqvn6tf7O1R4GNowVZfiZUCRt5MmMs1xd+4V/7Yr0g== + dependencies: + async-foreach "^0.1.3" + chalk "^1.1.1" + cross-spawn "^3.0.0" + gaze "^1.0.0" + get-stdin "^4.0.1" + glob "^7.0.3" + in-publish "^2.0.0" + lodash "^4.17.15" + meow "^3.7.0" + mkdirp "^0.5.1" + nan "^2.13.2" + node-gyp "^3.8.0" + npmlog "^4.0.0" + request "^2.88.0" + sass-graph "2.2.5" + stdout-stream "^1.4.0" + "true-case-path" "^1.0.2" + +"nopt@2 || 3": + version "3.0.6" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" + integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k= + dependencies: + abbrev "1" + +normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-1.0.0.tgz#32d0e472f91ff345701c15a8311018d3b0a90379" + integrity sha1-MtDkcvkf80VwHBWoMRAY07CpA3k= + +normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + dependencies: + remove-trailing-separator "^1.0.1" + +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 sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= + +normalize-url@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" + integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw= + dependencies: + object-assign "^4.0.1" + prepend-http "^1.0.0" + query-string "^4.1.0" + sort-keys "^1.0.0" + +normalize-url@^3.0.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" + integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + +npm-run-path@^4.0.0: + 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" + +"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + +nth-check@^1.0.2, nth-check@~1.0.1: + 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" + +num2fraction@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" + integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-hash@^1.1.4: + version "1.3.1" + resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-1.3.1.tgz#fde452098a951cb145f039bb7d455449ddc126df" + integrity sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA== + +object-hash@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-2.0.3.tgz#d12db044e03cd2ca3d77c0570d87225b02e1e6ea" + integrity sha512-JPKn0GMu+Fa3zt3Bmr66JhokJU5BaNBIh4ZeTlaCBzrBsOeXzwcKKAK1tbLiPKgvwmPXsDvvLHoWh5Bm7ofIYg== + +object-inspect@^1.8.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a" + integrity sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw== + +object-is@^1.0.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.4.tgz#63d6c83c00a43f4cbc9434eb9757c8a5b8565068" + integrity sha512-1ZvAZ4wlF7IyPVOcE1Omikt7UpaFlOQq0HlSti+ZvDH3UiD2brwGMwDbyV43jao2bKJ+4+WdPJHSd7kgzKYVqg== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + +object-keys@^1.0.12, 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-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + +object.assign@^4.1.0, object.assign@^4.1.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" + integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + has-symbols "^1.0.1" + object-keys "^1.1.1" + +object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.1.tgz#0dfda8d108074d9c563e80490c883b6661091544" + integrity sha512-6DtXgZ/lIZ9hqx4GtZETobXLR/ZLaa0aqV0kzbn80Rf8Z2e/XFnhA0I7p07N2wH8bBBltr2xQPi6sbKWAY2Eng== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + dependencies: + isobject "^3.0.1" + +object.values@^1.1.0, object.values@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.2.tgz#7a2015e06fcb0f546bd652486ce8583a4731c731" + integrity sha512-MYC0jvJopr8EK6dPBiO8Nb9mvjdypOachO5REGk6MXzujbBrAisKo3HmdEI6kZDL6fC31Mwee/5YbtMebixeag== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" + has "^1.0.3" + +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.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + 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, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= + dependencies: + mimic-fn "^1.0.0" + +onetime@^5.1.0: + 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@^6.3.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/open/-/open-6.4.0.tgz#5c13e96d0dc894686164f18965ecfe889ecfc8a9" + integrity sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg== + dependencies: + is-wsl "^1.1.0" + +opener@^1.5.1: + version "1.5.2" + resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" + integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== + +opn@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" + integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA== + dependencies: + is-wsl "^1.1.0" + +optionator@^0.8.3: + 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" + +ora@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/ora/-/ora-3.4.0.tgz#bf0752491059a3ef3ed4c85097531de9fdbcd318" + integrity sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg== + dependencies: + chalk "^2.4.2" + cli-cursor "^2.1.0" + cli-spinners "^2.0.0" + log-symbols "^2.2.0" + strip-ansi "^5.2.0" + wcwidth "^1.0.1" + +original@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" + integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg== + dependencies: + url-parse "^1.4.3" + +os-browserify@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" + integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= + +os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +osenv@0: + version "0.1.5" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-finally@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561" + integrity sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw== + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + +p-limit@^2.0.0, p-limit@^2.2.0, p-limit@^2.2.1, p-limit@^2.3.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-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= + dependencies: + p-limit "^1.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-map@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" + integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== + +p-map@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d" + integrity sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ== + dependencies: + aggregate-error "^3.0.0" + +p-retry@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328" + integrity sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w== + dependencies: + retry "^0.12.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= + +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== + +pako@~1.0.5: + version "1.0.11" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== + +parallel-transform@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" + integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== + dependencies: + cyclist "^1.0.1" + inherits "^2.0.3" + readable-stream "^2.1.5" + +param-case@2.1.x: + version "2.1.1" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247" + integrity sha1-35T9jPZTHs915r75oIWPvHK+Ikc= + dependencies: + no-case "^2.2.0" + +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-asn1@^5.0.0, parse-asn1@^5.1.5: + version "5.1.6" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" + integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== + dependencies: + asn1.js "^5.2.0" + browserify-aes "^1.0.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + safe-buffer "^5.1.1" + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= + dependencies: + error-ex "^1.2.0" + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parse-json@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.1.0.tgz#f96088cdf24a8faa9aea9a009f2d9d942c999646" + integrity sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ== + 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-htmlparser2-tree-adapter@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6" + integrity sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA== + dependencies: + parse5 "^6.0.1" + +parse5@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" + integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== + +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== + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + +path-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" + integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== + +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= + dependencies: + pinkie-promise "^2.0.0" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +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 sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-is-inside@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +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.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + +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 sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= + +path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +path-type@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= + dependencies: + pify "^2.0.0" + +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== + dependencies: + pify "^3.0.0" + +pbkdf2@^3.0.3: + version "3.1.1" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.1.tgz#cb8724b0fada984596856d1a6ebafd3584654b94" + integrity sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + +picomatch@^2.0.4, picomatch@^2.2.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + +pkg-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" + integrity sha1-ektQio1bstYp1EcFb/TpyTFM89Q= + dependencies: + find-up "^1.0.0" + +pkg-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= + dependencies: + find-up "^2.1.0" + +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== + dependencies: + find-up "^3.0.0" + +pkg-dir@^4.1.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" + +pnp-webpack-plugin@^1.6.4: + version "1.6.4" + resolved "https://registry.yarnpkg.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz#c9711ac4dc48a685dabafc86f8b6dd9f8df84149" + integrity sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg== + dependencies: + ts-pnp "^1.1.6" + +popper.js@^1.16.1: + version "1.16.1" + resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1.tgz#2a223cb3dc7b6213d740e40372be40de43e65b1b" + integrity sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ== + +portal-vue@^2.1.7: + version "2.1.7" + resolved "https://registry.yarnpkg.com/portal-vue/-/portal-vue-2.1.7.tgz#ea08069b25b640ca08a5b86f67c612f15f4e4ad4" + integrity sha512-+yCno2oB3xA7irTt0EU5Ezw22L2J51uKAacE/6hMPMoO/mx3h4rXFkkBkT4GFsMDv/vEe8TNKC3ujJJ0PTwb6g== + +portfinder@^1.0.26: + version "1.0.28" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778" + integrity sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA== + dependencies: + async "^2.6.2" + debug "^3.1.1" + mkdirp "^0.5.5" + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + +postcss-calc@^7.0.1: + version "7.0.5" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.5.tgz#f8a6e99f12e619c2ebc23cf6c486fdc15860933e" + integrity sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg== + dependencies: + postcss "^7.0.27" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.0.2" + +postcss-colormin@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-4.0.3.tgz#ae060bce93ed794ac71264f08132d550956bd381" + integrity sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw== + dependencies: + browserslist "^4.0.0" + color "^3.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-convert-values@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz#ca3813ed4da0f812f9d43703584e449ebe189a7f" + integrity sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-discard-comments@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz#1fbabd2c246bff6aaad7997b2b0918f4d7af4033" + integrity sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg== + dependencies: + postcss "^7.0.0" + +postcss-discard-duplicates@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz#3fe133cd3c82282e550fc9b239176a9207b784eb" + integrity sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ== + dependencies: + postcss "^7.0.0" + +postcss-discard-empty@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz#c8c951e9f73ed9428019458444a02ad90bb9f765" + integrity sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w== + dependencies: + postcss "^7.0.0" + +postcss-discard-overridden@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz#652aef8a96726f029f5e3e00146ee7a4e755ff57" + integrity sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg== + dependencies: + postcss "^7.0.0" + +postcss-load-config@^2.0.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.2.tgz#c5ea504f2c4aef33c7359a34de3573772ad7502a" + integrity sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw== + dependencies: + cosmiconfig "^5.0.0" + import-cwd "^2.0.0" + +postcss-loader@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-3.0.0.tgz#6b97943e47c72d845fa9e03f273773d4e8dd6c2d" + integrity sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA== + dependencies: + loader-utils "^1.1.0" + postcss "^7.0.0" + postcss-load-config "^2.0.0" + schema-utils "^1.0.0" + +postcss-merge-longhand@^4.0.11: + version "4.0.11" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz#62f49a13e4a0ee04e7b98f42bb16062ca2549e24" + integrity sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw== + dependencies: + css-color-names "0.0.4" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + stylehacks "^4.0.0" + +postcss-merge-rules@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz#362bea4ff5a1f98e4075a713c6cb25aefef9a650" + integrity sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ== + dependencies: + browserslist "^4.0.0" + caniuse-api "^3.0.0" + cssnano-util-same-parent "^4.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + vendors "^1.0.0" + +postcss-minify-font-values@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz#cd4c344cce474343fac5d82206ab2cbcb8afd5a6" + integrity sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-minify-gradients@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz#93b29c2ff5099c535eecda56c4aa6e665a663471" + integrity sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q== + dependencies: + cssnano-util-get-arguments "^4.0.0" + is-color-stop "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-minify-params@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz#6b9cef030c11e35261f95f618c90036d680db874" + integrity sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg== + dependencies: + alphanum-sort "^1.0.0" + browserslist "^4.0.0" + cssnano-util-get-arguments "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + uniqs "^2.0.0" + +postcss-minify-selectors@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz#e2e5eb40bfee500d0cd9243500f5f8ea4262fbd8" + integrity sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g== + dependencies: + alphanum-sort "^1.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + +postcss-modules-extract-imports@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz#dc87e34148ec7eab5f791f7cd5849833375b741a" + integrity sha512-6jt9XZwUhwmRUhb/CkyJY020PYaPJsCyt3UjbaWo6XEbH/94Hmv6MP7fG2C5NDU/BcHzyGYxNtHvM+LTf9HrYw== + dependencies: + postcss "^6.0.1" + +postcss-modules-extract-imports@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz#818719a1ae1da325f9832446b01136eeb493cd7e" + integrity sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ== + dependencies: + postcss "^7.0.5" + +postcss-modules-local-by-default@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069" + integrity sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk= + dependencies: + css-selector-tokenizer "^0.7.0" + postcss "^6.0.1" + +postcss-modules-local-by-default@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz#bb14e0cc78279d504dbdcbfd7e0ca28993ffbbb0" + integrity sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw== + dependencies: + icss-utils "^4.1.1" + postcss "^7.0.32" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.1.0" + +postcss-modules-scope@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90" + integrity sha1-1upkmUx5+XtipytCb75gVqGUu5A= + dependencies: + css-selector-tokenizer "^0.7.0" + postcss "^6.0.1" + +postcss-modules-scope@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz#385cae013cc7743f5a7d7602d1073a89eaae62ee" + integrity sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ== + dependencies: + postcss "^7.0.6" + postcss-selector-parser "^6.0.0" + +postcss-modules-values@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20" + integrity sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA= + dependencies: + icss-replace-symbols "^1.1.0" + postcss "^6.0.1" + +postcss-modules-values@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz#5b5000d6ebae29b4255301b4a3a54574423e7f10" + integrity sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg== + dependencies: + icss-utils "^4.0.0" + postcss "^7.0.6" + +postcss-normalize-charset@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz#8b35add3aee83a136b0471e0d59be58a50285dd4" + integrity sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g== + dependencies: + postcss "^7.0.0" + +postcss-normalize-display-values@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz#0dbe04a4ce9063d4667ed2be476bb830c825935a" + integrity sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ== + dependencies: + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-positions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz#05f757f84f260437378368a91f8932d4b102917f" + integrity sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA== + dependencies: + cssnano-util-get-arguments "^4.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-repeat-style@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz#c4ebbc289f3991a028d44751cbdd11918b17910c" + integrity sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q== + dependencies: + cssnano-util-get-arguments "^4.0.0" + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-string@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz#cd44c40ab07a0c7a36dc5e99aace1eca4ec2690c" + integrity sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA== + dependencies: + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-timing-functions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz#8e009ca2a3949cdaf8ad23e6b6ab99cb5e7d28d9" + integrity sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A== + dependencies: + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-unicode@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz#841bd48fdcf3019ad4baa7493a3d363b52ae1cfb" + integrity sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg== + dependencies: + browserslist "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-url@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz#10e437f86bc7c7e58f7b9652ed878daaa95faae1" + integrity sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA== + dependencies: + is-absolute-url "^2.0.0" + normalize-url "^3.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-whitespace@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz#bf1d4070fe4fcea87d1348e825d8cc0c5faa7d82" + integrity sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-ordered-values@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz#0cf75c820ec7d5c4d280189559e0b571ebac0eee" + integrity sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw== + dependencies: + cssnano-util-get-arguments "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-reduce-initial@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz#7fd42ebea5e9c814609639e2c2e84ae270ba48df" + integrity sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA== + dependencies: + browserslist "^4.0.0" + caniuse-api "^3.0.0" + has "^1.0.0" + postcss "^7.0.0" + +postcss-reduce-transforms@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz#17efa405eacc6e07be3414a5ca2d1074681d4e29" + integrity sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg== + dependencies: + cssnano-util-get-match "^4.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-selector-parser@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz#b310f5c4c0fdaf76f94902bbaa30db6aa84f5270" + integrity sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA== + dependencies: + dot-prop "^5.2.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: + version "6.0.4" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz#56075a1380a04604c38b063ea7767a129af5c2b3" + integrity sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw== + dependencies: + cssesc "^3.0.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + util-deprecate "^1.0.2" + +postcss-svgo@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.2.tgz#17b997bc711b333bab143aaed3b8d3d6e3d38258" + integrity sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw== + dependencies: + is-svg "^3.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + svgo "^1.0.0" + +postcss-unique-selectors@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz#9446911f3289bfd64c6d680f073c03b1f9ee4bac" + integrity sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg== + dependencies: + alphanum-sort "^1.0.0" + postcss "^7.0.0" + uniqs "^2.0.0" + +postcss-value-parser@^3.0.0, postcss-value-parser@^3.3.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" + integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== + +postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" + integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== + +postcss@^6.0.1, postcss@^6.0.23: + version "6.0.23" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324" + integrity sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag== + dependencies: + chalk "^2.4.1" + source-map "^0.6.1" + supports-color "^5.4.0" + +postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.27, postcss@^7.0.32, postcss@^7.0.5, postcss@^7.0.6: + version "7.0.35" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.35.tgz#d2be00b998f7f211d8a276974079f2e92b970e24" + integrity sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg== + dependencies: + chalk "^2.4.2" + source-map "^0.6.1" + supports-color "^6.1.0" + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + +prepend-http@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= + +prettier@^1.18.2: + version "1.19.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" + integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== + +pretty-error@^2.0.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.2.tgz#be89f82d81b1c86ec8fdfbc385045882727f93b6" + integrity sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw== + dependencies: + lodash "^4.17.20" + renderkid "^2.0.4" + +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== + +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= + +progress@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= + +proxy-addr@~2.0.5: + version "2.0.6" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" + integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== + dependencies: + forwarded "~0.1.2" + ipaddr.js "1.9.1" + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= + +psl@^1.1.28: + version "1.8.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" + integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== + +public-encrypt@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" + integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + safe-buffer "^5.1.2" + +pump@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pumpify@^1.3.3: + version "1.5.1" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" + integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== + dependencies: + duplexify "^3.6.0" + inherits "^2.0.3" + pump "^2.0.0" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + +punycode@^1.2.4: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= + +punycode@^2.1.0, punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +q@^1.1.2: + version "1.5.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= + +qs@6.7.0: + version "6.7.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" + integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== + +qs@~6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== + +query-string@^4.1.0: + version "4.3.4" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" + integrity sha1-u7aTucqRXCMlFbIosaArYJBD2+s= + dependencies: + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + +querystring-es3@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= + +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== + +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, 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" + +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== + dependencies: + randombytes "^2.0.5" + 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.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" + integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== + dependencies: + bytes "3.1.0" + http-errors "1.7.2" + iconv-lite "0.4.24" + unpipe "1.0.0" + +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + +read-pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= + dependencies: + find-up "^2.0.0" + read-pkg "^2.0.0" + +read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + +read-pkg@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= + dependencies: + load-json-file "^2.0.0" + normalize-package-data "^2.3.2" + path-type "^2.0.0" + +read-pkg@^5.1.1: + version "5.2.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" + integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== + dependencies: + "@types/normalize-package-data" "^2.4.0" + normalize-package-data "^2.5.0" + parse-json "^5.0.0" + type-fest "^0.6.0" + +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: + 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, readable-stream@^3.1.1, readable-stream@^3.6.0: + 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@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== + dependencies: + graceful-fs "^4.1.11" + micromatch "^3.1.10" + readable-stream "^2.0.2" + +readdirp@~3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" + integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== + dependencies: + picomatch "^2.2.1" + +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= + dependencies: + resolve "^1.1.6" + +redent@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" + integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94= + dependencies: + indent-string "^2.1.0" + strip-indent "^1.0.1" + +regenerate-unicode-properties@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" + integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== + dependencies: + regenerate "^1.4.0" + +regenerate@^1.4.0: + 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.4: + version "0.13.7" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" + integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== + +regenerator-transform@^0.14.2: + version "0.14.5" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" + integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== + dependencies: + "@babel/runtime" "^7.8.4" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regexp.prototype.flags@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75" + integrity sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + +regexpp@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" + integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== + +regexpp@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" + integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== + +regexpu-core@^4.7.1: + version "4.7.1" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.1.tgz#2dea5a9a07233298fbf0db91fa9abc4c6e0f8ad6" + integrity sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ== + dependencies: + regenerate "^1.4.0" + regenerate-unicode-properties "^8.2.0" + regjsgen "^0.5.1" + regjsparser "^0.6.4" + unicode-match-property-ecmascript "^1.0.4" + unicode-match-property-value-ecmascript "^1.2.0" + +regjsgen@^0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" + integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== + +regjsparser@^0.6.4: + version "0.6.4" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272" + integrity sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw== + dependencies: + jsesc "~0.5.0" + +relateurl@0.2.x: + version "0.2.7" + resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" + integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + +renderkid@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.4.tgz#d325e532afb28d3f8796ffee306be8ffd6fc864c" + integrity sha512-K2eXrSOJdq+HuKzlcjOlGoOarUu5SDguDEhE7+Ah4zuOWL40j8A/oHvLlLob9PSTNvVnBd+/q0Er1QfpEuem5g== + dependencies: + css-select "^1.1.0" + dom-converter "^0.2" + htmlparser2 "^3.3.0" + lodash "^4.17.20" + strip-ansi "^3.0.0" + +repeat-element@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" + integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== + +repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + +repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= + dependencies: + is-finite "^1.0.0" + +request@^2.87.0, request@^2.88.0, request@^2.88.2: + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= + +resolve-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= + dependencies: + resolve-from "^3.0.0" + +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha1-six699nWiBvItuZTM17rywoYh0g= + +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-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + +resolve@^1.1.6, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.17.0: + version "1.19.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c" + integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg== + dependencies: + is-core-module "^2.1.0" + path-parse "^1.0.6" + +restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= + dependencies: + onetime "^2.0.0" + signal-exit "^3.0.2" + +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= + +rgb-regex@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1" + integrity sha1-wODWiC3w4jviVKR16O3UGRX+rrE= + +rgba-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" + integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= + +rimraf@2, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.3, rimraf@^2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +rimraf@2.6.3: + version "2.6.3" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== + dependencies: + glob "^7.1.3" + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +run-async@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + +run-queue@^1.0.0, run-queue@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" + integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= + dependencies: + aproba "^1.1.1" + +rxjs@^6.6.0: + version "6.6.3" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.3.tgz#8ca84635c4daa900c0d3967a6ee7ac60271ee552" + integrity sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ== + dependencies: + tslib "^1.9.0" + +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.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.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@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sass-graph@2.2.5: + version "2.2.5" + resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.5.tgz#a981c87446b8319d96dce0671e487879bd24c2e8" + integrity sha512-VFWDAHOe6mRuT4mZRd4eKE+d8Uedrk6Xnh7Sh9b4NGufQLQjOrvf/MQoOdx+0s92L89FeyUUNfU597j/3uNpag== + dependencies: + glob "^7.0.0" + lodash "^4.0.0" + scss-tokenizer "^0.2.3" + yargs "^13.3.2" + +sass-loader@^8.0.2: + version "8.0.2" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-8.0.2.tgz#debecd8c3ce243c76454f2e8290482150380090d" + integrity sha512-7o4dbSK8/Ol2KflEmSco4jTjQoV988bM82P9CZdmo9hR3RLnvNc0ufMNdMrB0caq38JQ/FgF4/7RcbcfKzxoFQ== + dependencies: + clone-deep "^4.0.1" + loader-utils "^1.2.3" + neo-async "^2.6.1" + schema-utils "^2.6.1" + semver "^6.3.0" + +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== + +schema-utils@^0.4.5: + version "0.4.7" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.7.tgz#ba74f597d2be2ea880131746ee17d0a093c68187" + integrity sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ== + dependencies: + ajv "^6.1.0" + ajv-keywords "^3.1.0" + +schema-utils@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" + integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== + dependencies: + ajv "^6.1.0" + ajv-errors "^1.0.0" + ajv-keywords "^3.1.0" + +schema-utils@^2.0.0, schema-utils@^2.5.0, schema-utils@^2.6.1, schema-utils@^2.6.5, schema-utils@^2.6.6, schema-utils@^2.7.0: + 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" + +scss-tokenizer@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz#8eb06db9a9723333824d3f5530641149847ce5d1" + integrity sha1-jrBtualyMzOCTT9VMGQRSYR85dE= + dependencies: + js-base64 "^2.1.8" + source-map "^0.4.2" + +select-hose@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" + integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= + +selfsigned@^1.10.7: + version "1.10.8" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.8.tgz#0d17208b7d12c33f8eac85c41835f27fc3d81a30" + integrity sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w== + dependencies: + node-forge "^0.10.0" + +"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + +semver@^6.0.0, semver@^6.1.0, 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@~5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" + integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8= + +send@0.17.1: + version "0.17.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" + integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.7.2" + mime "1.6.0" + ms "2.1.1" + on-finished "~2.3.0" + range-parser "~1.2.1" + statuses "~1.5.0" + +serialize-javascript@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.2.tgz#ecec53b0e0317bdc95ef76ab7074b7384785fa61" + integrity sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ== + +serialize-javascript@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-3.1.0.tgz#8bf3a9170712664ef2561b44b691eafe399214ea" + integrity sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg== + dependencies: + randombytes "^2.1.0" + +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" + +serve-index@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk= + 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.14.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" + integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.17.1" + +set-blocking@^2.0.0, set-blocking@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +setimmediate@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + +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.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +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@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +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.6.1: + version "1.7.2" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" + integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== + +shelljs@^0.8.4: + version "0.8.4" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.4.tgz#de7684feeb767f8716b326078a8a00875890e3c2" + integrity sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ== + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" + +signal-exit@^3.0.0, signal-exit@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= + dependencies: + is-arrayish "^0.3.1" + +slash@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= + +slash@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" + integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== + +slice-ansi@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" + integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== + dependencies: + ansi-styles "^3.2.0" + astral-regex "^1.0.0" + is-fullwidth-code-point "^2.0.0" + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +sockjs-client@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.4.0.tgz#c9f2568e19c8fd8173b4997ea3420e0bb306c7d5" + integrity sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g== + dependencies: + debug "^3.2.5" + eventsource "^1.0.7" + faye-websocket "~0.11.1" + inherits "^2.0.3" + json3 "^3.3.2" + url-parse "^1.4.3" + +sockjs@0.3.20: + version "0.3.20" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.20.tgz#b26a283ec562ef8b2687b44033a4eeceac75d855" + integrity sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA== + dependencies: + faye-websocket "^0.10.0" + uuid "^3.4.0" + websocket-driver "0.6.5" + +sort-keys@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" + integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0= + dependencies: + is-plain-obj "^1.0.0" + +source-list-map@^2.0.0: + 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-resolve@^0.5.0: + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@~0.5.12: + version "0.5.19" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" + integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-url@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= + +source-map@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.0.tgz#0fe96503ac86a5adb5de63f4e412ae4872cdbe86" + integrity sha1-D+llA6yGpa213mP05BKuSHLNvoY= + +source-map@^0.4.2: + version "0.4.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" + integrity sha1-66T12pwNyZneaAMti092FzZSA2s= + dependencies: + amdefine ">=0.0.4" + +source-map@^0.5.0, source-map@^0.5.6: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +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.3" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" + integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== + +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.7" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz#e9c18a410e5ed7e12442a549fbd8afa767038d65" + integrity sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ== + +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" + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^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 sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +sshpk@^1.7.0: + version "1.16.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" + integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +ssri@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" + integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== + dependencies: + figgy-pudding "^3.5.1" + +ssri@^7.0.0, ssri@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-7.1.0.tgz#92c241bf6de82365b5c7fb4bd76e975522e1294d" + integrity sha512-77/WrDZUWocK0mvA5NTRQyveUf+wsrIc6vyrxpS8tVvYBcX215QbafrJR3KtkpskIzoFLqqNuuYQvxaMjXJ/0g== + dependencies: + figgy-pudding "^3.5.1" + minipass "^3.1.1" + +stable@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" + integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== + +stackframe@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.2.0.tgz#52429492d63c62eb989804c11552e3d22e779303" + integrity sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA== + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + +stdout-stream@^1.4.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/stdout-stream/-/stdout-stream-1.4.1.tgz#5ac174cdd5cd726104aa0c0b2bd83815d8d535de" + integrity sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA== + dependencies: + readable-stream "^2.0.1" + +stream-browserify@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" + integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + +stream-each@^1.1.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" + integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== + dependencies: + end-of-stream "^1.1.0" + stream-shift "^1.0.0" + +stream-http@^2.7.2: + version "2.8.3" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" + integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.3.6" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + +stream-shift@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" + integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== + +strict-uri-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" + integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= + +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +"string-width@^1.0.2 || 2", string-width@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string-width@^3.0.0, string-width@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string-width@^4.1.0, string-width@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" + integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" + +string.prototype.trimend@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz#a22bd53cca5c7cf44d7c9d5c732118873d6cd18b" + integrity sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + +string.prototype.trimstart@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz#9b4cb590e123bb36564401d59824298de50fd5aa" + integrity sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + +string_decoder@^1.0.0, 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" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^5, strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + dependencies: + ansi-regex "^5.0.0" + +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= + dependencies: + is-utf8 "^0.2.0" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + +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@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" + integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI= + dependencies: + get-stdin "^4.0.1" + +strip-indent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" + integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= + +strip-json-comments@^3.0.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@^0.21.0: + version "0.21.0" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.21.0.tgz#68c52e5eb2afc9ca92b6274be277ee59aea3a852" + integrity sha512-T+UNsAcl3Yg+BsPKs1vd22Fr8sVT+CJMtzqc6LEw9bbJZb43lm9GoeIfUcDEefBSWC0BhYbcdupV1GtI4DGzxg== + dependencies: + loader-utils "^1.1.0" + schema-utils "^0.4.5" + +stylehacks@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5" + integrity sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g== + dependencies: + browserslist "^4.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= + +supports-color@^5.3.0, supports-color@^5.4.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@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== + 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" + +svg-tags@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764" + integrity sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q= + +svgo@^1.0.0: + 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" + +table@^5.2.3: + version "5.4.6" + resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" + integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== + dependencies: + ajv "^6.10.2" + lodash "^4.17.14" + slice-ansi "^2.1.0" + string-width "^3.0.0" + +tapable@^1.0.0, tapable@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" + integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== + +tar@^2.0.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.2.tgz#0ca8848562c7299b8b446ff6a4d60cdbb23edc40" + integrity sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA== + dependencies: + block-stream "*" + fstream "^1.0.12" + inherits "2" + +terser-webpack-plugin@^1.4.3: + version "1.4.5" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz#a217aefaea330e734ffacb6120ec1fa312d6040b" + integrity sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw== + dependencies: + cacache "^12.0.2" + find-cache-dir "^2.1.0" + is-wsl "^1.1.0" + schema-utils "^1.0.0" + serialize-javascript "^4.0.0" + source-map "^0.6.1" + terser "^4.1.2" + webpack-sources "^1.4.0" + worker-farm "^1.7.0" + +terser-webpack-plugin@^2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-2.3.8.tgz#894764a19b0743f2f704e7c2a848c5283a696724" + integrity sha512-/fKw3R+hWyHfYx7Bv6oPqmk4HGQcrWLtV3X6ggvPuwPNHSnzvVV51z6OaaCOus4YLjutYGOz3pEpbhe6Up2s1w== + dependencies: + cacache "^13.0.1" + find-cache-dir "^3.3.1" + jest-worker "^25.4.0" + p-limit "^2.3.0" + schema-utils "^2.6.6" + serialize-javascript "^4.0.0" + source-map "^0.6.1" + terser "^4.6.12" + webpack-sources "^1.4.3" + +terser@^4.1.2, terser@^4.6.11, terser@^4.6.12: + version "4.8.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" + integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== + dependencies: + commander "^2.20.0" + source-map "~0.6.1" + source-map-support "~0.5.12" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + +thenify-all@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY= + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.3.1" + resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" + integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== + dependencies: + any-promise "^1.0.0" + +thread-loader@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/thread-loader/-/thread-loader-2.1.3.tgz#cbd2c139fc2b2de6e9d28f62286ab770c1acbdda" + integrity sha512-wNrVKH2Lcf8ZrWxDF/khdlLlsTMczdcwPA9VEK4c2exlEPynYWxi9op3nPTo5lAnDIkE0rQEB3VBP+4Zncc9Hg== + dependencies: + loader-runner "^2.3.1" + loader-utils "^1.1.0" + neo-async "^2.6.0" + +through2@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +through@^2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + +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== + +timers-browserify@^2.0.4: + version "2.0.12" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee" + integrity sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ== + dependencies: + setimmediate "^1.0.4" + +timsort@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" + integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= + +tinymce@^5.6.2: + version "5.6.2" + resolved "https://registry.yarnpkg.com/tinymce/-/tinymce-5.6.2.tgz#4c20c22e328c5d0baab204928dbc2b0ecbed18b4" + integrity sha512-z7zvM5seOPiW86/vqf08kStwW5Zs5U9oQfuqh2rTj4jEcT2QzxT0v72i2zw3W6rbTLldkAej6edFZphj5ee5zg== + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +to-arraybuffer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= + +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 sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +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" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== + +toposort@^1.0.0: + version "1.0.7" + resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.7.tgz#2e68442d9f64ec720b8cc89e6443ac6caa950029" + integrity sha1-LmhELZ9k7HILjMieZEOsbKqVACk= + +tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +trim-newlines@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" + integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= + +"true-case-path@^1.0.2": + version "1.0.3" + resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-1.0.3.tgz#f813b5a8c86b40da59606722b144e3225799f47d" + integrity sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew== + dependencies: + glob "^7.1.2" + +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== + +ts-pnp@^1.1.6: + version "1.2.0" + resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92" + integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw== + +tsconfig-paths@^3.9.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz#098547a6c4448807e8fcb8eae081064ee9a3c90b" + integrity sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.1" + minimist "^1.2.0" + strip-bom "^3.0.0" + +tslib@^1.9.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tty-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + dependencies: + prelude-ls "~1.1.2" + +type-fest@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" + integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== + +type-fest@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" + integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== + +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + +type-is@~1.6.17, 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" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + +uglify-js@3.4.x: + version "3.4.10" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.10.tgz#9ad9563d8eb3acdfb8d38597d2af1d815f6a755f" + integrity sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw== + dependencies: + commander "~2.19.0" + source-map "~0.6.1" + +unicode-canonical-property-names-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" + integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== + +unicode-match-property-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" + integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== + dependencies: + unicode-canonical-property-names-ecmascript "^1.0.4" + unicode-property-aliases-ecmascript "^1.0.4" + +unicode-match-property-value-ecmascript@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" + integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== + +unicode-property-aliases-ecmascript@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" + integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== + +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + +uniq@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" + integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= + +uniqs@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" + integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI= + +unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== + dependencies: + unique-slug "^2.0.0" + +unique-slug@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== + dependencies: + imurmurhash "^0.1.4" + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +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 sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + +unquote@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" + integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +upath@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== + +upper-case@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" + integrity sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg= + +uri-js@^4.2.2: + version "4.4.0" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.0.tgz#aa714261de793e8a82347a7bcc9ce74e86f28602" + integrity sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g== + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + +url-loader@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-2.3.0.tgz#e0e2ef658f003efb8ca41b0f3ffbf76bab88658b" + integrity sha512-goSdg8VY+7nPZKUEChZSEtW5gjbS66USIGCeSJ1OVOJ7Yfuh/36YxCwMi5HVEJh6mqUYOoy3NJ0vlOMrWsSHog== + dependencies: + loader-utils "^1.2.3" + mime "^2.4.4" + schema-utils "^2.5.0" + +url-parse@^1.4.3: + version "1.4.7" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278" + integrity sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + +url@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + +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 sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +util.promisify@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" + integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== + dependencies: + define-properties "^1.1.2" + object.getownpropertydescriptors "^2.0.3" + +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" + +util@0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= + dependencies: + inherits "2.0.1" + +util@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" + integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== + dependencies: + inherits "2.0.3" + +utila@~0.4: + version "0.4.0" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" + integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw= + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= + +uuid@^3.3.2, uuid@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +v8-compile-cache@^2.0.3: + version "2.2.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz#9471efa3ef9128d2f7c6a7ca39c4dd6b5055b132" + integrity sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q== + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + +vendors@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.4.tgz#e2b800a53e7a29b93506c3cf41100d16c4c4ad8e" + integrity sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w== + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +vm-browserify@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" + integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== + +vue-eslint-parser@^7.0.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-7.3.0.tgz#894085839d99d81296fa081d19643733f23d7559" + integrity sha512-n5PJKZbyspD0+8LnaZgpEvNCrjQx1DyDHw8JdWwoxhhC+yRip4TAvSDpXGf9SWX6b0umeB5aR61gwUo6NVvFxw== + dependencies: + debug "^4.1.1" + eslint-scope "^5.0.0" + eslint-visitor-keys "^1.1.0" + espree "^6.2.1" + esquery "^1.0.1" + lodash "^4.17.15" + +vue-functional-data-merge@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/vue-functional-data-merge/-/vue-functional-data-merge-3.1.0.tgz#08a7797583b7f35680587f8a1d51d729aa1dc657" + integrity sha512-leT4kdJVQyeZNY1kmnS1xiUlQ9z1B/kdBFCILIjYYQDqZgLqCLa0UhjSSeRX6c3mUe6U5qYeM8LrEqkHJ1B4LA== + +vue-hot-reload-api@^2.3.0: + version "2.3.4" + resolved "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz#532955cc1eb208a3d990b3a9f9a70574657e08f2" + integrity sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog== + +"vue-loader-v16@npm:vue-loader@^16.0.0-beta.7": + version "16.1.2" + resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-16.1.2.tgz#5c03b6c50d2a5f983c7ceba15c50d78ca2b298f4" + integrity sha512-8QTxh+Fd+HB6fiL52iEVLKqE9N1JSlMXLR92Ijm6g8PZrwIxckgpqjPDWRP5TWxdiPaHR+alUWsnu1ShQOwt+Q== + dependencies: + chalk "^4.1.0" + hash-sum "^2.0.0" + loader-utils "^2.0.0" + +vue-loader@^15.9.2: + version "15.9.6" + resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-15.9.6.tgz#f4bb9ae20c3a8370af3ecf09b8126d38ffdb6b8b" + integrity sha512-j0cqiLzwbeImIC6nVIby2o/ABAWhlppyL/m5oJ67R5MloP0hj/DtFgb0Zmq3J9CG7AJ+AXIvHVnJAPBvrLyuDg== + dependencies: + "@vue/component-compiler-utils" "^3.1.0" + hash-sum "^1.0.2" + loader-utils "^1.1.0" + vue-hot-reload-api "^2.3.0" + vue-style-loader "^4.1.0" + +vue-style-loader@^4.1.0, vue-style-loader@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/vue-style-loader/-/vue-style-loader-4.1.2.tgz#dedf349806f25ceb4e64f3ad7c0a44fba735fcf8" + integrity sha512-0ip8ge6Gzz/Bk0iHovU9XAUQaFt/G2B61bnWa2tCcqqdgfHs1lF9xXorFbE55Gmy92okFT+8bfmySuUOu13vxQ== + dependencies: + hash-sum "^1.0.2" + loader-utils "^1.0.2" + +vue-template-compiler@^2.6.11: + version "2.6.12" + resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.6.12.tgz#947ed7196744c8a5285ebe1233fe960437fcc57e" + integrity sha512-OzzZ52zS41YUbkCBfdXShQTe69j1gQDZ9HIX8miuC9C3rBCk9wIRjLiZZLrmX9V+Ftq/YEyv1JaVr5Y/hNtByg== + dependencies: + de-indent "^1.0.2" + he "^1.1.0" + +vue-template-es2015-compiler@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz#1ee3bc9a16ecbf5118be334bb15f9c46f82f5825" + integrity sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw== + +vue@^2.6.11: + version "2.6.12" + resolved "https://registry.yarnpkg.com/vue/-/vue-2.6.12.tgz#f5ebd4fa6bd2869403e29a896aed4904456c9123" + integrity sha512-uhmLFETqPPNyuLLbsKz6ioJ4q7AZHzD8ZVFNATNyICSZouqP2Sz0rotWQC8UNBF6VGSCs5abnKJoStA6JbCbfg== + +watchpack-chokidar2@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957" + integrity sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww== + dependencies: + chokidar "^2.1.8" + +watchpack@^1.7.4: + version "1.7.5" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.5.tgz#1267e6c55e0b9b5be44c2023aed5437a2c26c453" + integrity sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ== + dependencies: + graceful-fs "^4.1.2" + neo-async "^2.5.0" + optionalDependencies: + chokidar "^3.4.1" + watchpack-chokidar2 "^2.0.1" + +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" + +wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= + dependencies: + defaults "^1.0.3" + +webpack-bundle-analyzer@^3.8.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.9.0.tgz#f6f94db108fb574e415ad313de41a2707d33ef3c" + integrity sha512-Ob8amZfCm3rMB1ScjQVlbYYUEJyEjdEtQ92jqiFUYt5VkEeO2v5UMbv49P/gnmCZm3A6yaFQzCBvpZqN4MUsdA== + dependencies: + acorn "^7.1.1" + acorn-walk "^7.1.1" + bfj "^6.1.1" + chalk "^2.4.1" + commander "^2.18.0" + ejs "^2.6.1" + express "^4.16.3" + filesize "^3.6.1" + gzip-size "^5.0.0" + lodash "^4.17.19" + mkdirp "^0.5.1" + opener "^1.5.1" + ws "^6.0.0" + +webpack-bundle-tracker@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/webpack-bundle-tracker/-/webpack-bundle-tracker-0.4.3.tgz#48a3e2226ddb9d24d704640ab4168c2d120f4526" + integrity sha512-Sl/+OsNhFAH3/c6XADupRu8jLvGojfXX0pZIIm3O5ZcJqkHHqlY4nLG+NVRcbDgM/jOeWimKDGQMVEa8FBeJ2g== + dependencies: + deep-extend "^0.6.0" + mkdirp "^0.5.1" + strip-ansi "^5.2.0" + +webpack-chain@^6.4.0: + version "6.5.1" + resolved "https://registry.yarnpkg.com/webpack-chain/-/webpack-chain-6.5.1.tgz#4f27284cbbb637e3c8fbdef43eef588d4d861206" + integrity sha512-7doO/SRtLu8q5WM0s7vPKPWX580qhi0/yBHkOxNkv50f6qB76Zy9o2wRTrrPULqYTvQlVHuvbA8v+G5ayuUDsA== + dependencies: + deepmerge "^1.5.2" + javascript-stringify "^2.0.1" + +webpack-dev-middleware@^3.7.2: + version "3.7.3" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz#0639372b143262e2b84ab95d3b91a7597061c2c5" + integrity sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ== + dependencies: + memory-fs "^0.4.1" + mime "^2.4.4" + mkdirp "^0.5.1" + range-parser "^1.2.1" + webpack-log "^2.0.0" + +webpack-dev-server@^3.11.0: + version "3.11.0" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz#8f154a3bce1bcfd1cc618ef4e703278855e7ff8c" + integrity sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg== + dependencies: + ansi-html "0.0.7" + bonjour "^3.5.0" + chokidar "^2.1.8" + compression "^1.7.4" + connect-history-api-fallback "^1.6.0" + debug "^4.1.1" + del "^4.1.1" + express "^4.17.1" + html-entities "^1.3.1" + http-proxy-middleware "0.19.1" + import-local "^2.0.0" + internal-ip "^4.3.0" + ip "^1.1.5" + is-absolute-url "^3.0.3" + killable "^1.0.1" + loglevel "^1.6.8" + opn "^5.5.0" + p-retry "^3.0.1" + portfinder "^1.0.26" + schema-utils "^1.0.0" + selfsigned "^1.10.7" + semver "^6.3.0" + serve-index "^1.9.1" + sockjs "0.3.20" + sockjs-client "1.4.0" + spdy "^4.0.2" + strip-ansi "^3.0.1" + supports-color "^6.1.0" + url "^0.11.0" + webpack-dev-middleware "^3.7.2" + webpack-log "^2.0.0" + ws "^6.2.1" + yargs "^13.3.2" + +webpack-jquery-ui@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/webpack-jquery-ui/-/webpack-jquery-ui-2.0.1.tgz#7b061beaed848da3d6f5a0acdfdf9dedbac0baed" + integrity sha512-ykG5qttZmTraCktCOgacVRAmD8TQi6N83smVH8D7/yahi63vH31uP0ZXN2o/qwNICn9GMLsi8jVjR0M3u2MEkw== + dependencies: + css-loader "^1.0.0" + file-loader "^1.1.11" + jquery "^3.3.1" + jquery-ui "^1.12.1" + style-loader "^0.21.0" + +webpack-log@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" + integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg== + dependencies: + ansi-colors "^3.0.0" + uuid "^3.3.2" + +webpack-merge@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.2.2.tgz#a27c52ea783d1398afd2087f547d7b9d2f43634d" + integrity sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g== + dependencies: + lodash "^4.17.15" + +webpack-sources@^1.0.1, webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1, 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@^4.0.0, webpack@^4.43.0: + version "4.44.2" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.44.2.tgz#6bfe2b0af055c8b2d1e90ed2cd9363f841266b72" + integrity sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/wasm-edit" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + acorn "^6.4.1" + ajv "^6.10.2" + ajv-keywords "^3.4.1" + chrome-trace-event "^1.0.2" + enhanced-resolve "^4.3.0" + eslint-scope "^4.0.3" + json-parse-better-errors "^1.0.2" + loader-runner "^2.4.0" + loader-utils "^1.2.3" + memory-fs "^0.4.1" + micromatch "^3.1.10" + mkdirp "^0.5.3" + neo-async "^2.6.1" + node-libs-browser "^2.2.1" + schema-utils "^1.0.0" + tapable "^1.1.3" + terser-webpack-plugin "^1.4.3" + watchpack "^1.7.4" + webpack-sources "^1.4.1" + +websocket-driver@0.6.5: + version "0.6.5" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.6.5.tgz#5cb2556ceb85f4373c6d8238aa691c8454e13a36" + integrity sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY= + dependencies: + websocket-extensions ">=0.1.1" + +websocket-driver@>=0.5.1: + 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, websocket-extensions@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" + integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + +which@1, which@^1.2.9: + 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" + +wide-align@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== + dependencies: + string-width "^1.0.2 || 2" + +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== + +worker-farm@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" + integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== + dependencies: + errno "~0.1.7" + +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== + dependencies: + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" + +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + 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 sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +write@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" + integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== + dependencies: + mkdirp "^0.5.1" + +ws@^6.0.0, ws@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" + integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== + dependencies: + async-limiter "~1.0.0" + +xtend@^4.0.0, xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4" + integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ== + +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= + +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== + +yargs-parser@^13.1.2: + version "13.1.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" + integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@^18.1.2: + version "18.1.3" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs@^13.3.2: + version "13.3.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" + integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== + dependencies: + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.2" + +yargs@^15.0.0: + version "15.4.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" + integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== + dependencies: + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^18.1.2" + +yorkie@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/yorkie/-/yorkie-2.0.0.tgz#92411912d435214e12c51c2ae1093e54b6bb83d9" + integrity sha512-jcKpkthap6x63MB4TxwCyuIGkV0oYP/YRyuQU5UO0Yz/E/ZAu+653/uov+phdmO54n6BcvFRyyt0RRrWdN2mpw== + dependencies: + execa "^0.8.0" + is-ci "^1.0.10" + normalize-path "^1.0.0" + strip-indent "^2.0.0"